sql >> Database teknologi >  >> RDS >> Database

Sådan installeres Neo4j på Ubuntu 20.04

Introduktion

I denne tutorial vil vi undersøge, hvad Neo4j er, hvad det bruges til, og hvordan det implementeres. Vi vil også installere og konfigurere installationen på en Ubuntu 20.04-server. Neo4j er en grafisk database, der bruges til at skabe datarelationer. Andre eksempler på grafiske databaser omfatter:

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

Hvad er Neo4j

Neo4j forbinder data, mens de er lagret, hvilket giver os mulighed for at køre forespørgsler, som vi aldrig vidste eller tænkte over før. For at sige det enkelt, registrerer Neo4j forholdet mellem dataknudepunkter, hvorimod konventionelle relationelle databaser bruger kolonner og rækker til at gemme strukturerede data. Da hver node gemmer referencer til alle de andre noder, som den er forbundet til, kan Neo4j indkode og forespørge på komplekse relationer med minimal overhead.

Neo Technology er skaberen og udvikleren af ​​open source-softwaren Neo4j. Virksomheden har udviklet det siden 2003. Det er skrevet i Java og Scala, og kildekoden er frit tilgængelig på GitHub. Fra 2015 betragtes det som det mest anvendte grafiske databasestyringssystem, der er i brug i dag. Neo4j anvender sit eget forespørgselssprog kaldet Cypher, men forespørgsler kan også skrives i andre stilarter, for eksempel gennem Java API.

Forudsætninger

Til denne installation kræver softwaren følgende basisindstillinger.

  • 8 GB RAM og en fire-core server. Som minimum er den anbefalede brug 1 GB RAM og en single-core server.
  • Ubuntu 20.04 OS
  • Alle kommandoer køres som root. Hvis du er en almindelig bruger, skal kommandoer indledes med sudo-kommandoen.

Neo4j installation

Tilføj lager

Ubuntu indeholder ikke officielt Neo4j i standardpakkelageret. Vi tilføjer pakkekilden, der peger på placeringen af ​​Neo4j-lageret, tilføjer derefter GPG-nøglen fra Neo4j til verifikation, og installerer derefter selve Neo4j.

Vi starter med at opdatere listen over pakker og selve pakkerne.

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

Tilføj yderligere software

I dette trin installerer vi en ekstra pakke, der er nødvendig for HTTPS-forbindelser. Denne applikation er muligvis allerede installeret som standard på systemet, men den skal stadig opdateres.

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

apt-transport-https pakke aktiverer brugen af ​​https via pakkehåndteringen ved hjælp af libapt-pkg bibliotek. Dette holder installationen sikker.

Bekræft sikkerhedsnøgle

Nu tilføjer vi den officielle sikkerhedsnøgle til Neo4j-pakkelageret. Denne nøgle tjekker og verificerer, at det du installerer er fra det officielle lager.

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

Tilføj lager

Tilføj det officielle Neo4j-lager til pakkehåndteringslisten.

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

Installer Neo4j

Når du installerer Neo4j og alle dens afhængigheder, er det vigtigt at bemærke, at installationen vil bede os om at installere Java-pakker for at arbejde med Neo4j. Under installationen skal du trykke på Y. for at acceptere denne softwareinstallation. Hvis du har Java installeret, vil installationsprogrammet forstå og springe dette trin over.

 root@host:~# apt install neo4j -y Læser pakkelister... Færdig Opbygning af afhængighedstræ        Læsestatusoplysninger... Færdig Følgende pakke blev automatisk installeret og er ikke længere påkrævet:  libfprint-2- tod1 Brug 'sudo apt autoremove' for at fjerne det. Følgende ekstra pakker vil blive installeret:  cypher-shell Følgende NYE pakker vil blive installeret:  cypher-shell neo4j 0 opgraderet, 2 nyinstalleret, 0 til at fjerne og 0 ikke opgraderet. Skal have 116 MB arkiver. Efter denne handling vil der blive brugt 131 MB ekstra diskplads. Hent:1 https://debian.neo4j.com stabil/4.1 amd64 cypher-shell alle 4.1.3 [27,1 MB] Hent:2 https://debian.neo4j.com stabil/4.1 amd64 neo4j alle 1:4.1 .5 [88,4 MB] Hentede 116 MB på 10 sek. (Læser database ... 163626 filer og mapper installeret i øjeblikket.) Forbereder udpakning .../cypher-shell_4.1.3_all.deb ... Udpakker cypher-shell (4.1.3) ... Vælger tidligere fravalgt pakke neo4j. Forbereder udpakning .../neo4j_1%3a4.1.5_all.deb ... Udpakning neo4j (1:4.1.5) ... Opsætning af cypher-shell (4.1.3) ... Opsætning af neo4j (1:4.1) .5) ... Behandler triggers for man-db (2.9.1-1) ... Behandler triggers for systemd (245.4-4ubuntu3.3) ... root@host:~#   

Start Neo4j-tjenesten

Når vi har det installeret, skal vi aktivere det som en neo4j.service-tjeneste.

 root@host:~# systemctl aktiver neo4j.service Synkronisering af neo4j.services tilstand med SysV servicescript med /lib/systemd/systemd-sysv-install. Udfører:/lib/systemd/systemd-sysv-install enable neo4j Oprettet symlink /etc/systemd/system/multi-user.target.wants/neo4j.service → /lib/systemd/system/neo4j.service. root@host:~#   

Tjek Neo4j-status

Dernæst bekræfter vi, at alt fungerer som forventet.

 root@host:~# systemctl status neo4j.service neo4j.service - Neo4j Graph Database      Indlæst:indlæst (/lib/systemd/system/neo4j.service; aktiveret; forudindstillet leverandør:>      Aktiv:aktiv (kører) ) siden ons 2020-12-23 20:04:44 +03; 2min. 4s siden    Hoved-PID:4827 (java)       Opgaver:52 (grænse:9489)      Hukommelse:      Hukommelse:447.                Hukommelse:447.               4827 /usr/bin/java -cp /var/lib/neo4j/plugins:/etc/neo4j:/usr/sh> сне 23 20:04:46 vært neo4j[4827]:2020-12-23 17:04:46.101+0000 INFO  ========N> сне 23 20:04:47 vært neo4j[4827]:2020-12-23 17:04:47.073+0000 INFO  Initiali> сне 24:20 neo4j[4827]:2020-12-23 17:04:47.077+0000 INFO  Opsætning> сне 23 20:04:47 vært neo4j[4827]:2020-12-23 17:04:47.07n+ INFO сне 23 20:04:47 vært neo4j[4827]:2020-12-23 17:04:47.083+0000 INFO  Indstilling ve> сне 23 20:04:47 vært neo4j[4827]:2023-17:2023-17 :47.085+0000 INFO  Efter init> сне 23 20:04:47 vært neo4j[4827]:2020-12-23 17:04:47.088+0000 IN FO  Performing> сне 23 20:04:47 vært neo4j[4827]:2020-12-23 17:04:47.197+0000 INFO  Bolt enabl> сне 23 20:04:47 vært neo4j[42027-1:28237]:17:04:47.843+0000 INFO  Remote int> сне 23 20:04:47 vært neo4j[4827]:2020-12-23 17:04:47.844+0000 INFO  Startet. linje 1-19/19 (SLUT) For at forlade denne skærm skal du trykke på Ctrl + C. Det er vigtigt at have følgende parametre:Indlæst:indlæst (/lib/systemd/system/neo4j.service; aktiveret; forudindstillet leverandør:>  Aktiv :aktiv (kører) siden ons 2020-12-23 20:04:44 +03; 2min. 4s siden  

Test DB-forbindelse

Da vi installerede Neo4j og startede den som en tjeneste, vil vi nu teste databaseforbindelsen og konfigurere admin-brugeren.

Bemærk:Vi bruger den gratis Community Edition Neo4j-version. Det understøtter samtidig arbejde med den samme database, men inkluderer ikke tildeling af roller og tilladelser til brugere.

Arbejd med Neo4j

For at interagere med databasen vil vi starte det interne værktøj kaldet cypher-shell for at arbejde med Neo4j. Når vi først kører det, bliver vi bedt om at indtaste en bruger og adgangskode. Som standard er brugernavnet neo4j, og adgangskoden er neo4j. Efter det første login bliver du bedt om at ændre adgangskoden til en af ​​dine valg.

 oot@host:~# cypher-shell brugernavn:neo4j adgangskode:***** Adgangskodeændring påkrævet ny adgangskode:******** Forbundet til Neo4j 4.1.0 på neo4j:// localhost:7687 som bruger neo4j. Skriv :help for at få en liste over tilgængelige kommandoer eller :exit for at afslutte skallen. Bemærk, at Cypher-forespørgsler skal slutte med et semikolon. neo4j@neo4j>   

For at afslutte skal du bruge exit-kommandoen.

 neo4j@neo4j> afslut Hej! root@host:~#   

Tilføj noder 

Lad os opsætte nogle prøveknuder og definere relationer mellem dem. Opret forbindelse ved hjælp af Cypher

 root@host:~# cypher-shell brugernavn:neo4j adgangskode:******** Forbundet til Neo4j 4.1.0 på neo4j://localhost:7687 som bruger neo4j. Skriv :help for at få en liste over tilgængelige kommandoer eller :exit for at afslutte skallen. Bemærk, at Cypher-forespørgsler skal slutte med et semikolon. neo4j@neo4j>   

Lad os derefter tilføje en node kaldet Liquidweb og navnene på kolleger, der arbejder for denne virksomhed under navnet Margaret. Vi kan gøre dette ved at bruge CREATE-kommandoen, og syntaksen vil være som følger.

 neo4j@neo4j> OPRET (:Liquidweb {navn:'Margaret'}); 0 rækker tilgængelige efter 36 ms, forbrugt efter yderligere 0 ms Tilføjet 1 noder, Sæt 1 egenskaber, Tilføjet 1 etiketter neo4j@neo4j>   

Tilføj brugere

Lad os tilføje nogle flere kollegaer og knytte dem til den virksomhed, de arbejder for, Liquidweb. Vi vil oprette forbindelse ved hjælp af FRIEND-kommandoen.

 neo4j@neo4j> OPRET (:Liquidweb {navn:'John'})-[:FRIEND]->              (:Liquidweb {navn:'Peter'})-[:FRIEND]->               (:Liquidweb {navn:'Peter'}) {navn:'Chris'}); 0 rækker tilgængelige efter 38 ms, forbrugt efter yderligere 0 ms Tilføjet 3 noder, oprettet 2 relationer, sæt 3 egenskaber, tilføjet 3 etiketter neo4j@neo4j>   

Opret relationer

Da Peter og Chris arbejder i samme afdeling og har de samme egenskaber som noder, vil vi oprette en relation med navnekolonnen.

 neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)              HVOR a.name ='Peter' OG b.name ='Chris'              CREATE (a)-[r:DEPARTMENT { 'Udviklere' }]->(b)              RETURN type(r), r.name; +------------------------+ | type(r) | r.navn       | +------------------------+ | "AFDELING" | "Udviklere" | +------------------------+ 1 række tilgængelig efter 105 ms, forbrugt efter yderligere 10 ms Oprettet 1 relationer, Sæt 1 egenskaber neo4j@neo4j>  
  • MATCH - Dette angiver overensstemmelsen mellem noderne. I dette tilfælde inden for én virksomhed Liquidweb
  • WHERE - mellem værdier
  • OPRET - opret og tilføj
  • RETURN - Vend tilbage til basen.

Skab nu en forbindelse mellem John og Chris, selvom de er i forskellige afdelinger, men de arbejder på det samme projekt.neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)

             Hvor a.name ='John' OG b.name ='Chris'              OPRET (a)-[r:PROJEKT { navn:'Cool Project' }]->(b)      )       , r.navn; +--------------------------------+ | type(r)   | r.navn         | +--------------------------------+ | "PROJEKT" | "Fedt projekt" | +----------------------------+ 1 række tilgængelig efter 48 ms, forbrugt efter yderligere 5 ms Oprettet 1 relationer, Sæt 1 egenskaber neo4j @neo4j> 

Vis info

Nu vil vi vise alle disse data og deres relationer ved hjælp af følgende forespørgsel.

 neo4j@neo4j> Match (n)-[r]->(m)             Return n,r,m; +------------------------------------------------ ----------------------------------------------------------+ | n                            | r                                  | m                            | +------------------------------------------------ ----------------------------------------------------------+ | (:Liquidweb {navn:"John"})  | [:VEN]                          | (:Liquidweb {navn:"Peter") | | (:Liquidweb {navn:"John"})  | [:PROJEKT {navn:"Cool Project"}]  | (:Liquidweb {navn:"Chris"})  | | (:Liquidweb {navn:"Peter") | [:AFDELING {navn:"Udviklere"}] | (:Liquidweb {navn:"Chris"})  | | (:Liquidweb {navn:"Peter") | [:VEN]                          | (:Liquidweb {navn:"Chris"})  | +------------------------------------------------ ----------------------------------------------------------+ 4 rækker tilgængelige efter 17 ms, forbrugt efter yderligere 2 ms neo4j@neo4j>   

Vi modtog outputdataene med følgende FRIEND-relationer, som viser forholdet og følgende datarelationer mellem AFDELING og PROJEKT.

For at afslutte cypher-skallen skal du køre exit-kommandoen.

 neo4j@neo4j> :afslut Hej! root@host:~#   

Opsæt en sikker fjernforbindelse til Neo4j

Vi vil ikke altid være i stand til at oprette forbindelse til databasen fra selve serveren. Hvis vi vil konfigurere applikationen til at bruge Neo4j, bliver vi nødt til at konfigurere den til sikker forbindelse til andre servere. Vi bør også konfigurere firewallen for at begrænse, hvilke servere der kan tilsluttes Neo4j.

Som standard forbinder Neo4j via localhost (127.0.0.1 - localhost - beregnet til at teste applikationer uden at arbejde med andre servere). Desuden vil arbejdet med Neo4j fra localhost ikke være åbent for offentlig adgang til internettet. Kun brugere med adgang til det lokale netværk vil kunne oprette forbindelse til Neo4j.

Konfigurer Neo4j

For at Neo4j kan oprette forbindelse til andre servere, skal vi ændre indstillingerne for konfigurationsfilen /etc/neo4j/neo4j.conf . Vi vil bruge nano-editoren til denne opgave. Husk, hvis du ikke er root, så brug sudo-kommandoen.

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

Find linjen i afsnittet Netværkstilslutning

#dbms.default_listen_address=0.0.0.0 

Fjern kommentaren til denne linje ved at fjerne #-symbolet og tryk derefter på Ctrl + S og Ctrl + X for at gemme og afslutte editoren.

Værdien 0.0.0.0 vil binde Neo4j til alle tilgængelige IPv4-netværksgrænseflader. Du kan angive en specifik IP-adresse eller netværk, som dine servere bruger som en datasti. Du kan også konfigurere den til at bruge IPv6-grænseflader, men der er mange nuancer til den indstilling. Vi anbefaler, at du læser dokumentationen på den officielle hjemmeside.

Konfigurer firewall til fjernforbindelser

For at konfigurere Neo4j-softwaren til fjernforbindelser skal vi konfigurere firewallen. Vi begrænser adgangen, så kun betroede systemer kan oprette forbindelse til den. I dette tilfælde vil vi bruge standard Ubuntu firewall, UFW.

Dernæst skal vi kontrollere, om firewallen er aktiveret. Hvis den ikke er aktiv, skal vi aktivere den.

 root@host:~# ufw enable Firewall er aktiv og aktiveret ved systemopstart root@host:~#   

Neo4j opretter to netværkssockets, når softwaren installeres. Én på port 7474 til HTTP-grænsefladen og én til den primære protokol på port 7687. Neo4j anbefaler at bruge port 7687. Kommandoen til at åbne en port vil ligne den følgende kommando, der bruges til at tillade en IPv4-adresse.

 ufw tillad fra YOUR_IP til enhver port 7687 proto tcp YOUR_IP - Brug en IP her for at give adgangstilladelse. Hvis du vil tillade adgang til hele det lokale netværk, skal du bruge følgende regel:ufw tillade fra 192.168.50.0/16 til enhver port 7687 proto tcp  

Indtast dit specifikke netværksområde for at åbne porten. For en IPv6-adresse vil kommandoen se sådan ud.

ufw tillade fra fe80::1006:f7a3:b9cc:b0cb til enhver port 7687 proto tcp 

Ovenstående IP'er bruges som eksempel. Erstat dine værdier og tilføj en regel.

 root@host:~# ufw tillad fra 192.168.50.189 til enhver port 7687 proto tcp Regel tilføjet root@host:~#   

Genstart Firewall

Sørg for at genstarte din firewall.

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

Bekræft forbindelsen

Lad os nu tjekke, om det fungerer korrekt.

  root@vært:~# UFW Status Status:Aktiv til handling fra------- ---- 7687/TCP Tillad 192.168.50.189 ROOT@HOST:~#  

Og dermed har vi en fungerende Neo4j-server, der er klar til brug og konfigureret til at tillade adgang på port 7687.

Konklusion

Vi mødtes med den grafiske Neo4j-database, lærte, hvordan den fungerer, og hvorfor den er nødvendig. Konfigurer en pakkehåndtering og installerede derefter Neo4j. Dernæst tjekkede vi funktionaliteten, gik ind i den og ændrede adgangskoden. Vi prøvede grundlæggende kommandoer til, hvordan man opretter en tabel, laver relationer og opsætter noder. Til sidst konfigurerede vi forbindelsen til de IP'er, vi havde brug for, og konfigurerede en firewall for sikkerhed.


  1. Skinner:PG::UdefineretTabel:FEJL:relation ... eksisterer ikke

  2. DROP TABEL HVIS FINDER Eksempel i PostgreSQL

  3. En introduktion til asynkron behandling med Service Broker

  4. Indsættelse af store objektdata i Salesforce.com fra SQL Server