Neo4j
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
- siehe iX 02/11 S.130
- Vergleich von fünf Graphdatenbanken: siehe LM 04/12 S.22
- siehe PHP Magazin 04/13 S.26
- Neo4j mit Perl (mit Neo4j Grundlagen): siehe LM 06/14 S.102
- Meet Graph Commons: Network Mapping For Everyone (neo4j.com),
- http://graphcommons.com
- "Graph Commons is a collaborative 'network mapping' platform and a knowledge base of relationships"
- 3 RDBMS & Graph Database Deployment Strategies
- Streaming Graphs: Combining Kafka and Neo4j
- Graph Databases for Beginners
- Using GraphQL for Digital Identity & Access Management
- Machine Learning Algorithms
- Praxis am Beispiel "Beziehungen unter Amazon Reviewern zur Erkennung von Fake-Bewertungen": siehe LM 07/20 S.30
- yaml-Datei einlesen mit Go-Script, Nutzung vom Similarity-Algorithmus, Docker-Installation (Dockerfile), Plugins nutzen (Algorithmen)
- https://www.linux-magazin.de/links/?id=44519 , https://www.linux-magazin.de/magazine/listings/#2020-07&030-ti-graphdb-neo4j
- [https://www.linux-magazin.de/videos/snapshot-07-2020-graph-datenbank-neo4j-enttarnt-gefaelschte-bewertungen/ Video - Snapshot 07/2020: Graph-Datenbank Neo4j enttarnt gefälschte Bewertungen
- Find More Fraud with Graph Data Science (Infographic)
- How to Build a Knowledge Graph from Scratch Even If You’re Not a Full-Blown Developer
GraphGist
- http://graphgist.neo4j.com
- http://neo4j.com/graphgists/
- running Neo4j graphgists locally with docker.io
Dokumentation
- http://docs.neo4j.org
- http://neo4j.com/docs/
- http://neo4j.com/docs/stable/
- http://neo4j.com/docs/stable/cypher-refcard/
- http://neo4j.com/developer/
Interfaces:
Performance Tuning:
Videos:
- Webinars: http://watch.neo4j.org
- YouTube Channel: http://www.youtube.com/neo4j
- Tips and Tricks for Graph Data Modeling
- Relational to Graph Data Modeling - Tipps zum Überführen eines SQL- in ein Neo4j-Modell
- Fraud Detection with Neo4j, Slides dazu
- The Secret Sauce of Neo4j: Modeling and Querying Graphs
- What Is a Graph Database in 10 Minutes, https://www.youtube.com/watch?v=REVkXVxvMQE
- #GraphCast: An Introduction to Neo4j
Literatur
Entwicklung
Einbettung mittels PHP:
- Neo4jPHP ist ein PHP-Framework, um REST-API anzusprechen. Alle wichtigen Operationen enthalten.
- https://github.com/endyjasmi/cypher
- https://github.com/jakewins/Neo4j.php
Visualisierung
- http://www.neo4j.org/develop/visualize
- http://neo4j.com/blog/graph-this-rendering-your-graph-with-graphviz/
- https://www.tomsawyer.com/products/perspectives/
- JavaScript Bibliotheken
- Daten für Suche aufbereiten: VisualSearch.js (siehe iX Big Data S.76)
- Graph query builder: popoto.js (siehe iX Big Data S.76)
- Neo4j for R Developers and Data Scientists
- Linkurious
- Neo4j Bloom
Prototyping / Design
- Figma mit GitLab Plugin: https://about.gitlab.com/blog/2020/10/02/product-development-management/ , https://www.figma.com/community/plugin/860845891704482356/GitLab
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
- 8 Solid Tips for Succeeding with Neo4j (neo4j.com)
- Setup des Server (Ports):
curl localhost:7474
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
- http://neo4j.com/developer/guide-importing-data-and-etl/
- https://github.com/jexp/neo4j-shell-tools
- http://stackoverflow.com/questions/20831287/neo4j-output-format
- http://stackoverflow.com/questions/18830686/export-whole-database-in-cypher-format-ascii-text
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
- http://www.hacksparrow.com/neo4j-tutorial-rest-api.html
- http://neo4j.com/blog/the-neo4j-rest-server-part1-get-it-going/
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
Tools
Use Cases
- http://www.bigdata-insider.de/neo4j-hilft-bei-aufdeckung-von-finanzskandal-a-528727/
- http://neo4j.com/blog/analyzing-panama-papers-neo4j/