sql >> Database >  >> RDS >> Database

Neo4j installeren op Ubuntu 20.04

Inleiding

In deze tutorial zullen we onderzoeken wat Neo4j is, waarvoor het wordt gebruikt en hoe het wordt geïmplementeerd. We zullen de installatie ook installeren en configureren op een Ubuntu 20.04-server. Neo4j is een grafische database die wordt gebruikt om gegevensrelaties te creëren. Andere voorbeelden van grafische databases zijn:

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

Wat is Neo4j

Neo4j verbindt gegevens terwijl deze worden opgeslagen, waardoor we query's kunnen uitvoeren die we nooit eerder wisten of waar we nooit aan hadden gedacht. Simpel gezegd, Neo4j legt de relatie tussen gegevensknooppunten vast, terwijl conventionele relationele databases kolommen en rijen gebruiken om gestructureerde gegevens op te slaan. Aangezien elk knooppunt verwijzingen opslaat naar alle andere knooppunten waarmee het is verbonden, kan Neo4j complexe relaties coderen en opvragen met minimale overhead.

Neo Technology is de maker en ontwikkelaar van de open-source software Neo4j. Het bedrijf ontwikkelt het sinds 2003. Het is geschreven in Java en Scala en de broncode is vrij beschikbaar op GitHub. Vanaf 2015 wordt het beschouwd als het meest gebruikte grafische databasebeheersysteem dat tegenwoordig wordt gebruikt. Neo4j gebruikt zijn eigen querytaal genaamd Cypher, maar query's kunnen ook in andere stijlen worden geschreven, bijvoorbeeld via de Java API.

Vereisten

Voor deze installatie heeft de software de volgende basisinstellingen nodig.

  • 8 GB RAM en een vier-core server. Het aanbevolen gebruik is minimaal 1 GB RAM en een single-core server.
  • Ubuntu 20.04 besturingssysteem
  • Alle commando's worden uitgevoerd als root. Als u een gewone gebruiker bent, moeten opdrachten worden voorafgegaan door de opdracht sudo.

Neo4j-installatie

Repository toevoegen

Ubuntu bevat officieel geen Neo4j in de standaard pakketrepository. We voegen de pakketbron toe die verwijst naar de locatie van de Neo4j-repository, voegen vervolgens de GPG-sleutel van Neo4j toe voor verificatie en installeren vervolgens Neo4j zelf.

We beginnen met het bijwerken van de lijst met pakketten en de pakketten zelf.

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

Extra software toevoegen

In deze stap zullen we een extra pakket installeren dat nodig is voor HTTPS-verbindingen. Deze applicatie is mogelijk al standaard op het systeem geïnstalleerd, maar moet nog worden bijgewerkt.

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

De apt-transport-https pakket maakt het gebruik van https mogelijk via de pakketbeheerder met behulp van de libapt-pkg bibliotheek. Dit houdt de installatie veilig.

Beveiligingssleutel verifiëren

Nu voegen we de officiële beveiligingssleutel toe voor de Neo4j-pakketrepository. Deze sleutelcontrole en verifieert dat wat u installeert afkomstig is uit de officiële repository.

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

Repository toevoegen

Voeg de officiële Neo4j-repository toe aan de lijst met pakketbeheerders.

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

Neo4j installeren

Bij het installeren van Neo4j en al zijn afhankelijkheden, is het essentieel om op te merken dat de installatie ons zal vragen om Java-pakketten te installeren om met Neo4j te werken. Druk tijdens de installatie op Y. om deze software-installatie te accepteren. Als je Java hebt geïnstalleerd, zal het installatieprogramma deze stap begrijpen en overslaan.

 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:~#  

Start de Neo4j-service

Zodra we het hebben geïnstalleerd, moeten we het inschakelen als een neo4j.service-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:~#  

Controleer de Neo4j-status

Vervolgens controleren we of alles werkt zoals verwacht.

 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-verbinding testen

Aangezien we Neo4j hebben geïnstalleerd en het als een service zijn gestart, zullen we nu de databaseverbinding testen en de admin-gebruiker configureren.

Opmerking:we gebruiken de gratis Community Edition Neo4j-versie. Het ondersteunt gelijktijdig werken met dezelfde database, maar omvat niet het toewijzen van rollen en machtigingen aan gebruikers.

Werken met Neo4j

Om met de database te communiceren, starten we het interne hulpprogramma cypher-shell om met Neo4j te werken. Wanneer we het voor het eerst uitvoeren, worden we gevraagd om een ​​gebruiker en wachtwoord in te voeren. Standaard is de gebruikersnaam neo4j en het wachtwoord neo4j. Na de eerste keer inloggen, wordt u gevraagd het wachtwoord te wijzigen in een wachtwoord naar keuze.

 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>  

Gebruik het exit-commando om af te sluiten.

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

Nodes toevoegen 

Laten we enkele voorbeeldknooppunten instellen en relaties tussen deze definiëren. Maak verbinding met 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>  

Laten we vervolgens een knooppunt met de naam Liquidweb toevoegen en de namen van collega's die voor dit bedrijf werken onder de naam Margaret. We kunnen dit doen met de opdracht CREATE, en de syntaxis zal als volgt zijn.

 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>  

Gebruikers toevoegen

Laten we nog een paar collega's toevoegen en ze koppelen aan het bedrijf waarvoor ze werken, Liquidweb. We zullen verbinding maken met het FRIEND-commando.

 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>  

Relaties creëren

Aangezien Peter en Chris op dezelfde afdeling werken en dezelfde eigenschappen hebben als knooppunten, zullen we een relatie maken met de naamkolom.

 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> 
  • MATCH - Dit geeft de overeenkomst van de knooppunten aan. In dit geval binnen één bedrijf Liquidweb
  • WAAR - tussen waarden
  • CREATE - maken en toevoegen
  • RETURN - Keer terug naar de basis.

Maak nu een verbinding tussen John en Chris, hoewel ze op verschillende afdelingen zitten, maar aan hetzelfde project werken.neo4j@neo4j> MATCH (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>  

Informatie weergeven

Nu zullen we al deze gegevens en hun relaties weergeven met behulp van de volgende query.

 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>  

We hebben de uitvoergegevens ontvangen met de volgende VRIEND-relaties, die de relatie en de volgende gegevensrelaties tussen AFDELING en PROJECT laten zien.

Voer het exit-commando uit om de cypher-shell te verlaten.

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

Stel een veilige externe verbinding in met Neo4j

We kunnen niet altijd verbinding maken met de database vanaf de server zelf. Als we de applicatie willen configureren om Neo4j te gebruiken, moeten we deze configureren om veilig verbinding te maken met andere servers. We moeten ook de firewall configureren om te beperken welke servers kunnen koppelen aan Neo4j.

Neo4j maakt standaard verbinding via localhost (127.0.0.1 - localhost - bedoeld voor het testen van applicaties zonder met andere servers te werken). Ook zal het werk van Neo4j van localhost niet openstaan ​​voor publieke toegang tot internet. Alleen gebruikers met toegang tot het lokale netwerk kunnen verbinding maken met Neo4j.

Neo4j configureren

Om Neo4j verbinding te laten maken met andere servers, moeten we de instellingen van het configuratiebestand /etc/neo4j/neo4j.conf wijzigen . We zullen de nano-editor voor deze taak gebruiken. Denk eraan, als je geen root bent, gebruik dan het sudo-commando.

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

Zoek de lijn in het gedeelte Netwerkconnector

#dbms.default_listen_address=0.0.0.0

Maak het commentaar van deze regel ongedaan door het # -symbool te verwijderen en druk vervolgens op Ctrl + S en Ctrl + X om op te slaan en de editor af te sluiten.

De 0.0.0.0-waarde zal Neo4j binden aan alle beschikbare IPv4-netwerkinterfaces. U kunt een specifiek IP-adres of netwerk plaatsen dat uw servers gebruiken als gegevenspad. Je kunt het ook configureren om IPv6-interfaces te gebruiken, maar er zijn veel nuances in die instelling. We raden u aan de documentatie op de officiële website te lezen.

Firewall configureren voor externe verbindingen

Om de Neo4j-software te configureren voor externe verbindingen, moeten we de firewall configureren. We beperken de toegang zodat alleen vertrouwde systemen er verbinding mee kunnen maken. In dit geval gebruiken we de standaard Ubuntu-firewall, UFW.

Vervolgens moeten we controleren of de firewall is geactiveerd. Als het niet actief is, moeten we het inschakelen.

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

Neo4j creëert twee netwerk sockets bij het installeren van de software. Eén op poort 7474 voor de HTTP-interface en één voor het primaire protocol op poort 7687. Neo4j raadt het gebruik van poort 7687 aan. De opdracht om een ​​poort te openen zal vergelijkbaar zijn met de volgende opdracht die wordt gebruikt om een ​​IPv4-adres toe te staan.

 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 

Voer uw specifieke netwerkbereik in om de poort te openen. Voor een IPv6-adres ziet de opdracht er als volgt uit.

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

De bovenstaande IP's worden als voorbeeld gebruikt. Vervang uw waarden en voeg een regel toe.

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

Herstart Firewall

Zorg ervoor dat u uw firewall opnieuw opstart.

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

Verbinding verifiëren

Laten we nu eens kijken of het correct werkt.

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

En daarmee hebben we een werkende Neo4j-server die klaar is voor gebruik en geconfigureerd om toegang op poort 7687 toe te staan.

Conclusie

We ontmoetten de grafische database van Neo4j, leerden hoe het werkt en waarom het nodig is. Stel een pakketbeheerder in en installeer vervolgens Neo4j. Vervolgens hebben we de functionaliteit gecontroleerd, erin gedoken en het wachtwoord gewijzigd. We hebben basisopdrachten geprobeerd voor het maken van een tabel, het maken van relaties en het instellen van knooppunten. Uiteindelijk hebben we de verbinding met de IP's geconfigureerd die we nodig hadden en een firewall geconfigureerd voor beveiliging.


  1. 4 manieren om alle weergaven in een SQL Server-database weer te geven

  2. MySQL-updatetabel op basis van een andere tabelwaarde

  3. DAYOFWEEK() Voorbeelden – MySQL

  4. ORA-00979 geen groep op uitdrukking