Database
 sql >> база данни >  >> RDS >> Database

Как да инсталирате Neo4j на Ubuntu 20.04

Въведение

В този урок ще разгледаме какво представлява Neo4j, за какво се използва и как се прилага. Ние също така ще инсталираме и конфигурираме инсталацията на сървър на Ubuntu 20.04. Neo4j е графична база данни, използвана за създаване на връзки с данни. Други примери за графични бази данни включват:

  • ArangoDB
  • Grakn Core
  • Microsoft SQL Server 2017
  • OrientDB
  • RedisGraph

Какво е Neo4j

Neo4j свързва данните, докато се съхраняват, което ни позволява да изпълняваме заявки, за които никога не сме знаели или мислили преди. Казано по-просто, Neo4j записва връзката между възлите на данни, докато конвенционалните релационни бази данни използват колони и редове за съхранение на структурирани данни. Тъй като всеки възел съхранява препратки към всички други възли, към които е свързан, Neo4j може да кодира и да заявява сложни връзки с минимални допълнителни разходи.

Neo Technology е създател и разработчик на софтуера с отворен код Neo4j. Компанията го разработва от 2003 г. Написан е на Java и Scala, а изходният код е свободно достъпен в GitHub. От 2015 г. тя се счита за най-използваната графична система за управление на база данни, която се използва днес. Neo4j използва собствен език за заявки, наречен Cypher, но заявките могат да бъдат написани и в други стилове, например чрез Java API.

Предварителни условия

За тази инсталация софтуерът изисква следните основни настройки.

  • 8 GB RAM и четириядрен сървър. Като минимум препоръчителната употреба е 1 GB RAM и едноядрен сървър.
  • Ubuntu 20.04 OS
  • Всички команди се изпълняват като root. Ако сте обикновен потребител, командите трябва да бъдат предшествани от командата sudo.

Инсталация на Neo4j

Добавяне на хранилище

Ubuntu не съдържа официално Neo4j в стандартното хранилище на пакети. Ще добавим източника на пакета, насочващ към местоположението на хранилището на Neo4j, след това ще добавим GPG ключа от Neo4j за проверка, след което ще инсталираме самия Neo4j.

Започваме с актуализиране на списъка с пакети и самите пакети.

root@host:~# apt update && apt -y upgrade

Добавяне на допълнителен софтуер

В тази стъпка ще инсталираме допълнителен пакет, който е необходим за HTTPS връзки. Това приложение може вече да е инсталирано по подразбиране в системата, но те все още трябва да бъдат актуализирани.

root@host:~# apt install apt-transport-https ca-certificates curl software-properties-common -y

apt-transport-https пакет позволява използването на https чрез мениджъра на пакети с помощта на libapt-pkg библиотека. Това поддържа инсталацията сигурна.

Проверете ключа за сигурност

Сега добавяме официалния ключ за сигурност за хранилището на пакетите Neo4j. Този ключ за проверка и потвърждава, че това, което инсталирате, е от официалното хранилище.

 root@host:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add -
 OK
 root@host:~#  

Добавяне на хранилище

Добавете официалното хранилище Neo4j към списъка с мениджър на пакети.

root@host:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"

Инсталирайте Neo4j

Когато инсталирате Neo4j и всички негови зависимости, е важно да отбележим, че инсталацията ще ни подкани да инсталираме Java пакети, за да работим с Neo4j. По време на инсталацията натиснете Y., за да приемете тази инсталация на софтуера. Ако имате инсталирана Java, инсталаторът ще разбере и ще пропусне тази стъпка.

 root@host:~# apt install neo4j -y
 Reading package lists... Done
 Building dependency tree       
 Reading state information... Done
 The following package was automatically installed and is no longer required:
   libfprint-2-tod1
 Use 'sudo apt autoremove' to remove it.
 The following additional packages will be installed:
   cypher-shell
 The following NEW packages will be installed:
   cypher-shell neo4j
 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
 Need to get 116 MB of archives.
 After this operation, 131 MB of additional disk space will be used.
 Get:1 https://debian.neo4j.com stable/4.1 amd64 cypher-shell all 4.1.3 [27,1 MB]
 Get:2 https://debian.neo4j.com stable/4.1 amd64 neo4j all 1:4.1.5 [88,4 MB]
 Fetched 116 MB in 10s (11,1 MB/s)                                              
 Preconfiguring packages ...
 Selecting previously unselected package cypher-shell.
 (Reading database ... 163626 files and directories currently installed.)
 Preparing to unpack .../cypher-shell_4.1.3_all.deb ...
 Unpacking cypher-shell (4.1.3) ...
 Selecting previously unselected package neo4j.
 Preparing to unpack .../neo4j_1%3a4.1.5_all.deb ...
 Unpacking neo4j (1:4.1.5) ...
 Setting up cypher-shell (4.1.3) ...
 Setting up neo4j (1:4.1.5) ...
 Processing triggers for man-db (2.9.1-1) ...
 Processing triggers for systemd (245.4-4ubuntu3.3) ...
 root@host:~#  

Стартирайте услугата Neo4j

След като го инсталираме, трябва да го активираме като услуга neo4j.service.

 root@host:~# systemctl enable neo4j.service
 Synchronizing state of neo4j.service with SysV service script with /lib/systemd/systemd-sysv-install.
 Executing: /lib/systemd/systemd-sysv-install enable neo4j
 Created symlink /etc/systemd/system/multi-user.target.wants/neo4j.service → /lib/systemd/system/neo4j.service.
 root@host:~#  

Проверете състоянието на Neo4j

След това проверяваме дали всичко работи според очакванията.

 root@host:~# systemctl status neo4j.service
  neo4j.service - Neo4j Graph Database
      Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
      Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago
    Main PID: 4827 (java)
       Tasks: 52 (limit: 9489)
      Memory: 447.9M
      CGroup: /system.slice/neo4j.service
              └─4827 /usr/bin/java -cp /var/lib/neo4j/plugins:/etc/neo4j:/usr/sh>
 сне 23 20:04:46 host neo4j[4827]: 2020-12-23 17:04:46.101+0000 INFO  ======== N>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.073+0000 INFO  Initializi>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO  Setting up>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO  Creating n>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.083+0000 INFO  Setting ve>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.085+0000 INFO  After init>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.088+0000 INFO  Performing>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.197+0000 INFO  Bolt enabl>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.843+0000 INFO  Remote int>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.844+0000 INFO  Started.
 lines 1-19/19 (END)
 To exit this screen, press Ctrl + C.
 It is important to have the following parameters:
 Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
  Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago 

Тестване на DB връзка

Тъй като инсталирахме Neo4j и го стартирахме като услуга, сега ще тестваме връзката с базата данни и ще конфигурираме администраторския потребител.

Забележка:Използваме безплатната версия на Community Edition Neo4j. Той поддържа едновременна работа с една и съща база данни, но не включва присвояване на роли и разрешения на потребителите.

Работа с Neo4j

За да взаимодействаме с базата данни, ще стартираме вътрешната помощна програма, наречена cypher-shell, за работа с Neo4j. Когато го стартираме за първи път, ще бъдем помолени да въведете потребител и парола. По подразбиране потребителското име е neo4j, а паролата е neo4j. След първото влизане ще бъдете подканени да промените паролата на една по ваш избор.

 oot@host:~# cypher-shell
 username: neo4j
 password: *****
 Password change required
 new password: ********
 Connected to Neo4j 4.1.0 at neo4j://localhost:7687 as user neo4j.
 Type :help for a list of available commands or :exit to exit the shell.
 Note that Cypher queries must end with a semicolon.
 neo4j@neo4j>  

За да излезете, използвайте командата exit.

 neo4j@neo4j> exit
 Bye!
 root@host:~#  

Добавяне на възли 

Нека настроим някои примерни възли и да дефинираме връзките между тях. Свържете се с помощта на Cypher

 root@host:~# cypher-shell
 username: neo4j
 password: ********
 Connected to Neo4j 4.1.0 at neo4j://localhost:7687 as user neo4j.
 Type :help for a list of available commands or :exit to exit the shell.
 Note that Cypher queries must end with a semicolon.
 neo4j@neo4j>  

След това нека добавим възел, наречен Liquidweb, и имената на колегите, които работят за тази компания под името Margaret. Можем да направим това с помощта на командата CREATE и синтаксисът ще бъде както следва.

 neo4j@neo4j> CREATE (:Liquidweb {name: 'Margaret'});
 0 rows available after 36 ms, consumed after another 0 ms
 Added 1 nodes, Set 1 properties, Added 1 labels
 neo4j@neo4j>  

Добавяне на потребители

Нека добавим още няколко колеги и ги свържем с компанията, за която работят, Liquidweb. Ще се свържем с командата FRIEND.

 neo4j@neo4j> CREATE (:Liquidweb {name: 'John'})-[:FRIEND]->
              (:Liquidweb {name: 'Peter'})-[:FRIEND]->
              (:Liquidweb {name: 'Chris'});
 0 rows available after 38 ms, consumed after another 0 ms
 Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels
 neo4j@neo4j>  

Създаване на взаимоотношения

Тъй като Питър и Крис работят в един и същи отдел и имат същите свойства като възлите, ще създадем връзка с колоната с име.

 neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)
              WHERE a.name = 'Peter' AND b.name = 'Chris'
              CREATE (a)-[r:DEPARTMENT { name: 'Developers' }]->(b)
              RETURN type(r), r.name;
 +------------------------+
 | type(r) | r.name       |
 +------------------------+
 | "DEPARTMENT" | "Developers" |
 +------------------------+
 1 row available after 105 ms, consumed after another 10 ms
 Created 1 relationships, Set 1 properties
 neo4j@neo4j> 
  • СЪВТОРЕНИЕ – Това показва съответствието на възлите. В този случай в рамките на една компания Liquidweb
  • КЪДЕ - между стойностите
  • СЪЗДАВАНЕ - създаване и добавяне
  • ВРЪЩАНЕ – Връщане в базата.

Сега създайте връзка между Джон и Крис, въпреки че са в различни отдели, но работят по един и същ проект.neo4j@neo4j> МАЧ (a:Liquidweb),(b:Liquidweb)

              WHERE a.name = 'John' AND b.name = 'Chris'
              CREATE (a)-[r:PROJECT { name: 'Cool Project' }]->(b)
              RETURN type(r), r.name;
 +----------------------------+
 | type(r)   | r.name         |
 +----------------------------+
 | "PROJECT" | "Cool Project" |
 +----------------------------+
 1 row available after 48 ms, consumed after another 5 ms
 Created 1 relationships, Set 1 properties
 neo4j@neo4j>  

Показване на информация

Сега ще покажем всички тези данни и техните връзки с помощта на следната заявка.

 neo4j@neo4j> Match (n)-[r]->(m)
              Return n,r,m;
 +--------------------------------------------------------------------------------------------------+
 | n                            | r                                  | m                            |
 +--------------------------------------------------------------------------------------------------+
 | (:Liquidweb {name: "John"})  | [:FRIEND]                          | (:Liquidweb {name: "Peter"}) |
 | (:Liquidweb {name: "John"})  | [:PROJECT {name: "Cool Project"}]  | (:Liquidweb {name: "Chris"})  |
 | (:Liquidweb {name: "Peter"}) | [:DEPARTMENT {name: "Developers"}] | (:Liquidweb {name: "Chris"})  |
 | (:Liquidweb {name: "Peter"}) | [:FRIEND]                          | (:Liquidweb {name: "Chris"})  |
 +--------------------------------------------------------------------------------------------------+
 4 rows available after 17 ms, consumed after another 2 ms
 neo4j@neo4j>  

Получихме изходните данни със следните връзки FRIEND, които показват връзката и следните връзки с данни между DEPARTMENT и PROJECT.

За да излезете от шифрованата обвивка, изпълнете командата exit.

 neo4j@neo4j> :exit
 Bye!
 root@host:~#  

Настройте сигурна отдалечена връзка към Neo4j

Не винаги ще можем да се свържем с базата данни от самия сървър. Ако искаме да конфигурираме приложението да използва Neo4j, ще трябва да го конфигурираме за сигурно свързване с други сървъри. Освен това трябва да конфигурираме защитната стена, за да ограничим кои сървъри могат да се свързват към Neo4j.

По подразбиране Neo4j се свързва чрез localhost (127.0.0.1 - localhost - предназначен за тестване на приложения без работа с други сървъри). Също така работата на Neo4j от localhost няма да бъде отворена за публичен достъп до Интернет. Само потребители с достъп до локалната мрежа ще могат да се свързват с Neo4j.

Конфигуриране на Neo4j

За да може Neo4j да се свърже с други сървъри, трябва да променим настройките на конфигурационния файл /etc/neo4j/neo4j.conf . Ще използваме нано редактора за тази задача. Не забравяйте, че ако не сте root, използвайте командата sudo.

 root@host:~# nano /etc/neo4j/neo4j.conf
 root@host:~#  

Намерете реда в секцията Мрежов конектор

#dbms.default_listen_address=0.0.0.0

Декоментирайте този ред, като премахнете символа # и след това натиснете Ctrl + S и Ctrl + X, за да запазите и излезете от редактора.

Стойността 0.0.0.0 ще обвърже Neo4j с всички налични IPv4 мрежови интерфейси. Можете да поставите конкретен IP адрес или мрежа, която вашите сървъри използват като път за данни. Можете също да го конфигурирате да използва IPv6 интерфейси, но има много нюанси в тази настройка. Препоръчваме ви да прочетете документацията на официалния уебсайт.

Конфигуриране на защитна стена за отдалечени връзки

За да конфигурираме софтуера Neo4j за отдалечени връзки, трябва да конфигурираме защитната стена. Ние ограничаваме достъпа, така че само доверени системи да могат да се свързват с него. В този случай ще използваме защитната стена на Ubuntu по подразбиране, UFW.

След това трябва да проверим дали защитната стена е активирана. Ако не е активен, трябва да го активираме.

 root@host:~# ufw enable
 Firewall is active and enabled on system startup
 root@host:~#  

Neo4j създава два мрежови сокета при инсталиране на софтуера. Един на порт 7474 за HTTP интерфейса и този за основния протокол на порт 7687. Neo4j препоръчва използването на порт 7687. Командата за отваряне на порт ще бъде подобна на следната команда, използвана за разрешаване на IPv4 адрес.

 ufw allow from YOUR_IP to any port 7687 proto tcp
 YOUR_IP - Use an IP here to provide access permission. If you want to allow access to the entire local network, use the following rule:
 ufw allow from 192.168.50.0/16 to any port 7687 proto tcp 

Въведете вашия конкретен мрежов диапазон, за да отворите порта. За IPv6 адрес командата ще изглежда така.

ufw allow from fe80::1006:f7a3:b9cc:b0cb to any port 7687 proto tcp

Горните IP адреси се използват като пример. Заменете стойностите си и добавете правило.

 root@host:~# ufw allow from 192.168.50.189 to any port 7687 proto tcp
 Rule added
 root@host:~#  

Рестартирайте защитната стена

Не забравяйте да рестартирате защитната си стена.

 root@host:~# ufw reload
 Firewall reloaded
 root@host:~#  

Проверете връзката

Сега нека проверим дали работи правилно.

 root@host:~# ufw status
 Status: active
 To                         Action      From
 --                         ------      ----
 7687/tcp                   ALLOW       192.168.50.189            
 root@host:~#  

И с това имаме работещ сървър Neo4j, който е готов за работа и конфигуриран да позволява достъп до порт 7687.

Заключение

Срещнахме се с графичната база данни Neo4j, научихме как работи и защо е необходима. Настройте мениджър на пакети и след това инсталирайте Neo4j. След това проверихме функционалността, влязохме в нея и променихме паролата. Изпробвахме основни команди за това как да създадем таблица, да създадем връзки и да настроим възли. В крайна сметка конфигурирахме връзката с IP адресите, от които се нуждаехме, и конфигурирахме защитна стена за сигурност.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL MIN() за начинаещи

  2. Използване на Geekbench 3.2 за тестване на големи сървъри за бази данни

  3. Съвети за управление на архивиране за TimescaleDB

  4. Работа с не-ASCII JDBC данни в Talend

  5. DELETE VS DROP в SQL