Neo4j

aus www.kruedewagen.de, Homepage von Ralf und Judith Krüdewagen (Kruedewagen)
Zur Navigation springen Zur Suche springen
Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.

Auf dieser Seite befasse ich mich mit der Graph-Datenbank Neo4j.

Allgemein

  • Neo4j Homepage
  • High-performance NoSQL graph database
  • Knoten (Nodes) und Kanten (Relationships)
  • Knoten und Kanten werden ergänzt um "Properties" als Schlüssel/Werte-Paare (Key/Value), auch als Array möglich -> Property-Graph-Modell

Grundlagen

Neo4j kennt vier Grundelemente eines Graphen:

  • Nodes
  • Relationships
  • Properties
  • Labels

Artikel

GraphGist

Dokumentation

Interfaces:

Performance Tuning:

Videos:

Entwicklung

Einbettung mittels PHP:

Visualisierung

Installation

User und Rechte

Wrapper-User im System einrichten und in conf/neo4j-wrapper.conf konfigurieren:

wrapper.user=neo4j

Die Verzeichnisse conf und data sollten spezielle Rechte bzw. Eigentümer besitzen:

# ls -la
total 304
drwxr-xr-x  8 root  root    4096 Okt 16 23:20 .
drwxr-xr-x 15 root  root    4096 Nov 18 13:51 ..
drwxr-xr-x  3 root  root    4096 Nov 18 13:51 bin
-rw-r--r--  1 root  root   93430 Okt 16 23:20 CHANGES.txt
drwxr-xr-x  3 neo4j neo4j   4096 Nov 18 13:53 conf
drwxr-xr-x  6 neo4j neo4j   4096 Nov 18 13:53 data
drwxr-xr-x  2 root  root    4096 Nov 18 13:51 lib
-rw-r--r--  1 root  root  125005 Okt 16 23:20 LICENSES.txt
-rw-r--r--  1 root  root   36045 Okt 16 23:20 LICENSE.txt
-rw-r--r--  1 root  root    5959 Okt 16 23:20 NOTICE.txt
drwxr-xr-x  2 root  root    4096 Nov 18 13:51 plugins
-rw-r--r--  1 root  root    1569 Okt 16 23:20 README.txt
drwxr-xr-x  4 root  root    4096 Nov 18 13:51 system
-rw-r--r--  1 root  root    4318 Okt 17 01:21 UPGRADE.txt

Boot Script

Siehe offizielle Anleitung.

Authentifizierung

Standard:

neo4j/neo4j

mit curl:

curl ... -u neo4j:pw ...

Password in

/data/dbms/auth

Authentifizierung ein/ausstellen:

conf/neo4j-server.properties

Tipps und Tricks

Allgemein

Cypher

Create nodes and relations

Mensch ist Label. m1 und m2 sind "Variablen", die später im Cypher-Script genutzt werden können.

Nodes:

create (m1:Mensch {name:'Adam', type:'Mann', location:'Paradies'})
create (m2:Mensch {name:'Eva', type:'Frau', location:'Paradies'})
create (t1:Haustier {name:'Snakie', type:'Schlange', location:'Paradies'})
create (t2:Haustier {name:'Doggie', type:'Hund', location:'Paradies'})

Relations:

create (t1)-[:IS_PET_OF]->(m2)
create (t2)-[:IS_PET_OF]->(m1)
create (m1)-[:IS_PARTNER_OF {type:'married'}]->(m2)

Abfragen

Nodes:

MATCH (n) RETURN n LIMIT 100

Nur die Ids der Nodes:

match (n) return id(n) as ID

Nodes und Relationships:

START n=node(*) MATCH (n)-[r]->(m) RETURN n,r,m;
MATCH (n)-[r]->(m) RETURN n AS FROM , r AS `->`, m AS to;

Mit Index:

start n=node:node_audo_index("term:*") return n;

oder

http://localhost:7474/db/data/index/auto/node/?query=term:*

Siehe Plugins für Abfragen:

http://neo4j.com/docs/stable/server-plugins.html

Delete

Delete a node:

MATCH (n { name: 'Adam' }) DELETE n

Delete a node with relationships

MATCH (n { name: 'Adam' })-[r]-() DELETE n, r

Delete ALL nodes with relationships

MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n, r

import-cypher

  • Variablen nicht mit '' umschließen (auch nicht bei Strings mit Leerzeichen), weil sonst {Name} als Wert abgespeichert wird.
Falsch
import-cypher -d , -i in.csv -o out.txt create (n:#{Label} {name: '{Name}'}) return *
Richtig
import-cypher -d , -i in.csv -o out.txt create (n:#{Label} {name: {Name}}) return *
  • Datentyp kann im Import-File angegeben werden. Default ist "string". Integer dürfen nicht leer sein - wenn leer sein soll, dann Property weglassen. Es gibt kein NULL.
  • neue Features in 2.2: mehrere Input-Dateien, die man miteinander verbinden kann über Referenzen

Browser

Getting started

:play welcome
:play start
:play sysinfo

Diverses

:history
:style
:config
:schema (prüft u.a. ob Index verfügbar)
:clear
:help keys
:help commands

Query Templates

  • für "create" und "find"

Planner

Query Plan erstellen als Dry-Run für Queries - keine Execution:

explain <query>

Planner:

  • PLANNER RULE
  • PLANNER COST - neu in 2.2 in der Regel schneller

Profile, prüft ob Query Plan verfügbar:

profile <query>

Import und Export von Daten

Kompletter Dump:

neo4j-sh -c dump > export.cypher

Direktes Importieren eines Dumps in eine andere DB:

db1/bin/neo4j-sh -path db1/data/graph.db/ -c dump | db2/bin/neo4j-shell -path db2/data/graph.db/

REST API

curl -v http://localhost:7474/db/data/
curl -v http://localhost:7474/db/data/node/84

Namen

Nicht verifiziert (besonders die Aussagen zu Leerzeichen):

  • Node Labels mit camelCase, dürfen keine Leerzeichen enthalten, erster Buchstabe groß, z.B. "CarOwner".
  • Property Namen mit camelCase (ohne Leerzeichen), erster Buchstabe klein, z.B. "isMale".
  • Property Values mit '' oder "" umschließen, wenn als String.
  • http://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml
  • Leerzeichen mit `` umschließen.

Datentypen

  • Zahlen werden zu Integers oder Floats, wenn nicht mit '' oder "" umschlossen.

Beispiele

Switches und Ports

Anwendungen