Introduzione
In questo tutorial, esamineremo cos'è Neo4j, a cosa serve e come viene implementato. Installeremo e configureremo anche l'installazione su un server Ubuntu 20.04. Neo4j è un database grafico utilizzato per creare relazioni di dati. Altri esempi di database grafici includono:
- ArangoDB
- Nucleo di Grakn
- Microsoft SQL Server 2017
- OrientDB
- RedisGraph
Cos'è Neo4j
Neo4j collega i dati così come vengono archiviati, consentendoci di eseguire query che non conoscevamo o a cui non avevamo pensato prima. In parole povere, Neo4j registra la relazione tra i nodi di dati, mentre i database relazionali convenzionali utilizzano colonne e righe per memorizzare dati strutturati. Poiché ogni nodo memorizza i riferimenti a tutti gli altri nodi a cui è connesso, Neo4j può codificare e interrogare relazioni complesse con un sovraccarico minimo.
Neo Technology è il creatore e lo sviluppatore del software open source Neo4j. L'azienda lo sviluppa dal 2003. È scritto in Java e Scala e il codice sorgente è disponibile gratuitamente su GitHub. A partire dal 2015, è considerato il sistema di gestione di database grafico più utilizzato oggi in uso. Neo4j utilizza il proprio linguaggio di query chiamato Cypher, ma le query possono essere scritte anche in altri stili, ad esempio tramite l'API Java.
Prerequisiti
Per questa installazione, il software richiede le seguenti impostazioni di base.
- 8 GB di RAM e un server a quattro core. Come minimo, l'uso consigliato è 1 GB di RAM e un server single-core.
- Sistema operativo Ubuntu 20.04
- Tutti i comandi vengono eseguiti come root. Se sei un utente normale, i comandi devono essere preceduti dal comando sudo.
Installazione di Neo4j
Aggiungi repository
Ubuntu non contiene ufficialmente Neo4j nel repository di pacchetti standard. Aggiungeremo il sorgente del pacchetto che punta alla posizione del repository Neo4j, quindi aggiungeremo la chiave GPG da Neo4j per la verifica, quindi installeremo Neo4j stesso.
Iniziamo aggiornando l'elenco dei pacchetti e i pacchetti stessi.
root@host:~# apt update &&apt -y upgrade
Aggiungi software aggiuntivo
In questo passaggio, installeremo un pacchetto aggiuntivo necessario per le connessioni HTTPS. Questa applicazione potrebbe essere già installata per impostazione predefinita sul sistema, ma è comunque necessario aggiornarla.
root@host:~# apt install apt-transport-https ca-certificates curl software-properties-common -y
Il apt-transport-https pacchetto abilita l'uso di https tramite il gestore di pacchetti usando il libapt-pkg biblioteca. Ciò mantiene l'installazione sicura.
Verifica token di sicurezza
Ora aggiungiamo la chiave di sicurezza ufficiale per il repository dei pacchetti Neo4j. Questa chiave controlla e verifica ciò che stai installando proviene dal repository ufficiale.
root@host:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add - OK root@host:~#
Aggiungi repository
Aggiungi il repository ufficiale di Neo4j all'elenco dei gestori di pacchetti.
root@host:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"
Installa Neo4j
Quando si installa Neo4j e tutte le sue dipendenze, è essenziale notare che l'installazione ci chiederà di installare i pacchetti Java per funzionare con Neo4j. Durante l'installazione, premere Y. per accettare l'installazione del software. Se hai installato Java, il programma di installazione capirà e salterà questo passaggio.
root@host:~# apt install neo4j -y Lettura degli elenchi dei pacchetti... Fine Creazione dell'albero delle dipendenze Lettura delle informazioni sullo stato... Fine Il pacchetto seguente è stato installato automaticamente e non è più necessario: libfprint-2- tod1 Usa 'sudo apt autoremove' per rimuoverlo. Verranno installati i seguenti pacchetti aggiuntivi: cypher-shell Verranno installati i NUOVI pacchetti seguenti: cypher-shell neo4j 0 aggiornati, 2 appena installati, 0 da rimuovere e 0 non aggiornati. Necessità di ottenere 116 MB di archivi. Dopo questa operazione, verranno utilizzati 131 MB di spazio su disco aggiuntivo. Ottieni:1 https://debian.neo4j.com stable/4.1 amd64 cypher-shell all 4.1.3 [27,1 MB] Ottieni:2 https://debian.neo4j.com stable/4.1 amd64 neo4j all 1:4.1 .5 [88,4 MB] Recuperato 116 MB in 10s (11,1 MB/s) Preconfigurazione dei pacchetti... Selezione del pacchetto cypher-shell non selezionato. (Lettura del database ... 163626 file e directory attualmente installati.) Preparazione per decomprimere .../cypher-shell_4.1.3_all.deb ... Decomprimere cypher-shell (4.1.3) ... Selezionare il pacchetto neo4j precedentemente deselezionato. Preparazione alla decompressione .../neo4j_1%3a4.1.5_all.deb ... Decompressione di neo4j (1:4.1.5) ... Configurazione di cypher-shell (4.1.3) ... Configurazione di neo4j (1:4.1 .5) ... Trigger di elaborazione per man-db (2.9.1-1) ... Trigger di elaborazione per systemd (245.4-4ubuntu3.3) ... root@host:~#
Avvia il servizio Neo4j
Una volta installato, dobbiamo abilitarlo come servizio neo4j.service.
root@host:~# systemctl enable neo4j.service Sincronizzazione dello stato di neo4j.service con lo script del servizio SysV con /lib/systemd/systemd-sysv-install. In esecuzione:/lib/systemd/systemd-sysv-install enable neo4j Collegamento simbolico creato /etc/systemd/system/multi-user.target.wants/neo4j.service → /lib/systemd/system/neo4j.service. root@host:~#
Controlla lo stato di Neo4j
Successivamente, verifichiamo che tutto funzioni come previsto.
root@host:~# systemctl status neo4j.service neo4j.service - Neo4j Graph Database Caricato:caricato (/lib/systemd/system/neo4j.service; abilitato; preimpostazione del fornitore:> Attivo:attivo (in esecuzione ) da Wed 2020-12-23 20:04:44 +03; 2min 4s fa PID principale:4827 (java) Compiti:52 (limite:9489) Memoria:447,9 M 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 Configurazione> сне 23 20:04:47 host neo4j[4827]:2020-12-23 17:04:47.077+0000 INFO Creazione 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 Dopo init> сне 23 20:04:47 host neo4j[4827]:2020-12-23 17:04:47.088+0000 IN FO Performing> сне 23 20:04:47 host neo4j[4827]:2020-12-23 17:04:47.197+0000 INFO Bolt abilita> сне 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 Iniziato. righe 1-19/19 (END) Per uscire da questa schermata, premere Ctrl + C. È importante avere i seguenti parametri:Caricato:caricato (/lib/systemd/system/neo4j.service; abilitato; preimpostazione del fornitore:> Attivo :attivo (in esecuzione) da mer 23-12-2020 20:04:44 +03; 2min 4s fa
Test connessione DB
Poiché abbiamo installato Neo4j e l'abbiamo avviato come servizio, testeremo la connessione al database e configureremo l'utente amministratore.
Nota:stiamo utilizzando la versione gratuita della Community Edition Neo4j. Supporta il lavoro simultaneo con lo stesso database, ma non include l'assegnazione di ruoli e autorizzazioni agli utenti.Lavorare con Neo4j
Per interagire con il database, avvieremo l'utilità interna chiamata cypher-shell per lavorare con Neo4j. Quando lo eseguiamo per la prima volta, ci verrà chiesto di inserire un utente e una password. Per impostazione predefinita, il nome utente è neo4j e la password è neo4j. Dopo il primo accesso, ti verrà chiesto di cambiare la password con una di tua scelta.
oot@host:~# nome utente cypher-shell:neo4j password:***** È richiesta la modifica della password nuova password:******** Connesso a Neo4j 4.1.0 su neo4j:// localhost:7687 come utente neo4j. Digitare :help per un elenco di comandi disponibili o :exit per uscire dalla shell. Si noti che le query Cypher devono terminare con un punto e virgola. neo4j@neo4j>
Per uscire, usa il comando di uscita.
neo4j@neo4j> esci Ciao! root@host:~#
Aggiungi nodi
Impostiamo alcuni nodi di esempio e definiamo le relazioni tra di loro. Connettiti usando Cypher
root@host:~# nome utente cypher-shell:neo4j password:******** Connesso a Neo4j 4.1.0 su neo4j://localhost:7687 come utente neo4j. Digitare :help per un elenco di comandi disponibili o :exit per uscire dalla shell. Si noti che le query Cypher devono terminare con un punto e virgola. neo4j@neo4j>
Successivamente, aggiungiamo un nodo chiamato Liquidweb e i nomi dei colleghi che lavorano per questa azienda sotto il nome di Margaret. Possiamo farlo usando il comando CREATE e la sintassi sarà la seguente.
neo4j@neo4j> CREA (:Liquidweb {nome:'Margaret'}); 0 righe disponibili dopo 36 ms, consumate dopo altri 0 ms Aggiunti 1 nodi, Set 1 proprietà, Aggiunte 1 etichette neo4j@neo4j>
Aggiungi utenti
Aggiungiamo qualche altro collega e colleghiamoli all'azienda per cui lavorano, Liquidweb. Ci collegheremo usando il comando AMICO.
neo4j@neo4j> CREATE (:Liquidweb {name:'John'})-[:FRIEND]-> (:Liquidweb {name:'Peter'})-[:FRIEND]-> (:Liquidweb {nome:'Chris'}); 0 righe disponibili dopo 38 ms, consumate dopo altri 0 ms Aggiunti 3 nodi, Create 2 relazioni, Imposta 3 proprietà, Aggiunte 3 etichette neo4j@neo4j>
Crea relazioni
Poiché Peter e Chris lavorano nello stesso dipartimento e hanno le stesse proprietà dei nodi, creeremo una relazione con la colonna del nome.
neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb) WHERE a.name ='Peter' AND b.name ='Chris' CREATE (a)-[r:REPARTMENT { name:'Sviluppatori' }]->(b) RETURN tipo(r), r.name; +-------------------------+ | tipo(r) | r.nome | +-------------------------+ | "REPARTO" | "Sviluppatori" | +-------------------------+ 1 riga disponibile dopo 105 ms, consumata dopo altri 10 ms Creato 1 relazioni, Imposta 1 proprietà neo4j@neo4j>
- MATCH - Indica la corrispondenza dei nodi. In questo caso, all'interno di una società Liquidweb
- DOVE - tra i valori
- CREA - crea e aggiungi
- RITORNO - Ritorno alla base.
Ora crea una connessione tra John e Chris, anche se sono in reparti diversi, ma stanno lavorando allo stesso progetto.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.nome; +--------------+ | tipo(r) | r.nome | +--------------+ | "PROGETTO" | "Bel progetto" | +----------------------------+ 1 riga disponibile dopo 48 ms, consumata dopo altri 5 ms Creato 1 relazioni, Imposta 1 proprietà neo4j @neo4j>
Visualizza informazioni
Ora visualizzeremo tutti questi dati e le loro relazioni usando la seguente query.
neo4j@neo4j> Corrispondenza (n)-[r]->(m) Ritorno n,r,m; +------------------------------------------------ --------------------------------------------------+ | n | r | m | +------------------------------------------------ --------------------------------------------------+ | (:Liquidweb {nome:"Giovanni"}) | [:AMICO] | (:Liquidweb {nome:"Pietro"}) | | (:Liquidweb {nome:"Giovanni"}) | [:PROGETTO {nome:"Cool Project"}] | (:Liquidweb {nome:"Chris"}) | | (:Liquidweb {nome:"Pietro"}) | [:REPARTO {nome:"Sviluppatori"}] | (:Liquidweb {nome:"Chris"}) | | (:Liquidweb {nome:"Pietro"}) | [:AMICO] | (:Liquidweb {nome:"Chris"}) | +------------------------------------------------ --------------------------------------------------+ 4 righe disponibili dopo 17 ms, consumate dopo altri 2 ms neo4j@neo4j>
Abbiamo ricevuto i dati di output con le seguenti relazioni FRIEND, che mostrano la relazione e le seguenti relazioni di dati tra DEPARTMENT e PROJECT.
Per uscire dalla shell di crittografia, esegui il comando exit.
neo4j@neo4j> :exit Ciao! root@host:~#
Configura una connessione remota sicura a Neo4j
Non sempre saremo in grado di connetterci al database dal server stesso. Se vogliamo configurare l'applicazione per utilizzare Neo4j, dovremo configurarla per connetterci in modo sicuro ad altri server. Inoltre, dovremmo configurare il firewall per limitare i server che possono collegarsi a Neo4j.
Per impostazione predefinita, Neo4j si connette tramite localhost (127.0.0.1 - localhost - inteso per testare le applicazioni senza lavorare con altri server). Inoltre, il lavoro di Neo4j da localhost non sarà aperto per l'accesso pubblico a Internet. Solo gli utenti con accesso alla rete locale potranno connettersi a Neo4j.
Configura Neo4j
Affinché Neo4j possa connettersi ad altri server, è necessario modificare le impostazioni del file di configurazione /etc/neo4j/neo4j.conf . Useremo l'editor nano per questa attività. Ricorda, se non sei root, usa il comando sudo.
root@host:~# nano /etc/neo4j/neo4j.conf root@host:~#
Trova la riga nella sezione Connettore di rete
#dbms.default_listen_address=0.0.0.0
Decommenta questa riga rimuovendo il simbolo #, quindi premi Ctrl + S e Ctrl + X per salvare e uscire dall'editor.
Il valore 0.0.0.0 legherà Neo4j a tutte le interfacce di rete IPv4 disponibili. Puoi inserire un indirizzo IP o una rete specifici che i tuoi server utilizzano come percorso dati. Puoi anche configurarlo per utilizzare le interfacce IPv6, ma ci sono molte sfumature in questa impostazione. Ti consigliamo di leggere la documentazione sul sito ufficiale.
Configura Firewall per connessioni remote
Per configurare il software Neo4j per le connessioni remote, dobbiamo configurare il firewall. Limitiamo l'accesso in modo che solo i sistemi affidabili possano connettersi ad esso. In questo caso, utilizzeremo il firewall Ubuntu predefinito, UFW.
Successivamente, dobbiamo verificare se il firewall è attivato. Se non è attivo, dobbiamo abilitarlo.
root@host:~# ufw enable Il firewall è attivo e abilitato all'avvio del sistema root@host:~#
Neo4j crea due socket di rete durante l'installazione del software. Uno sulla porta 7474 per l'interfaccia HTTP e quello per il protocollo primario sulla porta 7687. Neo4j consiglia di utilizzare la porta 7687. Il comando per aprire una porta sarà simile al comando seguente utilizzato per consentire un indirizzo IPv4.
ufw allow from YOUR_IP a qualsiasi porta 7687 proto tcp YOUR_IP - Usa un IP qui per fornire il permesso di accesso. Se vuoi consentire l'accesso all'intera rete locale, usa la seguente regola:ufw allow from 192.168.50.0/16 to any port 7687 proto tcp
Immettere l'intervallo di rete specifico per aprire la porta. Per un indirizzo IPv6, il comando sarà simile a questo.
ufw consente da fe80::1006:f7a3:b9cc:b0cb a qualsiasi porta 7687 proto tcp
Gli IP di cui sopra sono usati come esempio. Sostituisci i tuoi valori e aggiungi una regola.
root@host:~# ufw permette da 192.168.50.189 a qualsiasi porta 7687 proto tcp Regola aggiunta root@host:~#
Riavvia Firewall
Assicurati di riavviare il firewall.
root@host:~# ufw reload Firewall ricaricato root@host:~#
Verifica connessione
Ora controlliamo se funziona correttamente.
;E con questo, abbiamo un server Neo4j funzionante, pronto per l'uso e configurato per consentire l'accesso sulla porta 7687.
Conclusione
Abbiamo incontrato il database grafico Neo4j, abbiamo imparato come funziona e perché è necessario. Configura un gestore di pacchetti e quindi installa Neo4j. Successivamente, abbiamo verificato la funzionalità, ci siamo entrati e abbiamo cambiato la password. Abbiamo provato i comandi di base su come creare una tabella, creare relazioni e impostare nodi. Alla fine, abbiamo configurato la connessione agli IP di cui avevamo bisogno e configurato un firewall per la sicurezza.