nosql - einführung in graphen-datenbanken mit neo4j
Post on 24-Jan-2017
241 Views
Preview:
TRANSCRIPT
1
NoSQLEinführung in GraphenDatenbanken mit Neo4j
Tobias Trelle, codecentric AG
@tobiastrelle
2
Tobias TrelleSenior IT Consultant @ codecentric AGTwitter: @tobiastrelleSlideshare: GitHub:
http://de.slideshare.net/tobiastrelle/https://github.com/ttrelle
2
3
AgendaNoSQL?GraphenNeo4j Graph DatabaseData StructuresCypher Query LanguageAPI
4 . 1
NoSQL?
4 . 2
4 . 2
4 . 3
NoSQLDatenbanken helfen bei der Lösung der dreiProblemFelder im Big DataUmfeld (Gartner, 2009):
Warum NoSQL?
Volume (Menge an Daten)Variety (verschiedene Strukturen)Velocity (Geschwindigkeit)
4 . 4
NeueHerausforderungen
Horizontale SkalierungVerteilte SystemeCAP Theorem / Eventual Consistency
4 . 5
CAP TheoremConsistencyAvailabilityPartition Tolerance
Nicht alle diese Anforderungen können zur gleichen Zeitgleichermaßen gut erfüllt werden!
4 . 6
MessagingSystem vonFacebook
100 Node Cluster (Apache HBase)87 Billion R/WOperations / Day9+ Billion Messages / Day4 PB Compressed Data / Day45% Growth / Month
Source: Nicolas Spiegelberg
(Berlin BuzzWords, June 2012)
4 . 7
NoSQLDatenbanken
5 . 1
Graphen
5 . 2
Ein ist ein Tupel bestehend aus
Formale DefinitionGraph G = (V , E)
Knoten (Vertices): Kanten (Edges):
V = , . . . , V1 Vn
E ⊂ V xV = , . . . , E1 Em
5 . 3
Edges / Kanten
Einfacher Graph
Vertices / Knoten
5 . 4
Spezialfälle
5 . 5
Streckennetze
5 . 6
Stromnetz
5 . 7
Use Cases für GraphenEVUs (Strom, Gas, Wasser)Streckennetze (DB, Verkehrsbetriebe)Logistik (DHL, UPS, ...)Social Networks
6 . 1
Neo4j
6 . 2
Graph in Neo4j
Gerichteter Graph ( )Knoten und Kanten haben EigenschaftenKnoten haben ein (oder mehere) Label(s)
( , ) ≠ ( , )V1 V2 V2 V1
==> sog. PropertyGraph
6 . 3
6 . 4
PropertiesString (Unicode)Boole'sche WerteNumerische Werte (float, int)Arrays solcher Typen
CREATE (john :Person :Developer name: "John", age: 36 )
6 . 5
LabelsString (Unicode)Dient zur Klassifizierung von KnotenMehrere Labels möglichNamensraum zur IndexDefinition
CREATE (john :Person :Developer name: "John", age: 36 ) // Index CREATE INDEX ON :Person(name)
6 . 6
BeziehungNativer DatentypVerbindet immer zwei KnotenHat einen TypKann auch Properties haben
CREATE (john) [:KNOWS since: 2004, level: "expert" ]> (java)
6 . 7
SchemaLabels klassifizieren KnotenUnique Constraint auf KnotenPropertyExists Constraint auf KnotenPropertyExists Constraint auf BeziehungProperty
// Knoten Property unique CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
// Kanten Property existiert CREATE CONSTRAINT ON (k:KNOWS) ASSERT exists(k.since)
6 . 8
Zusammenfassung
7 . 1
Cypher QueryLanguage
7 . 2
CypherDeklarative (Abfrage)SpracheHat als DSL SyntaxElemente für Knoten () undKanten >Erinnert an SQLReferenz: https://neo4j.com/docs/developermanual/current/cypher/
7 . 3
CREATE Anlegen von Knotenund Kanten
// Star Wars Jedi/Sith example CREATE // Jedi ... (yoda :Jedi :UnknownSpecies name:"Yoda"), (dooku :Jedi :Sith :Human name: "Count Dooku", sith_name: "Darth Tyranus"(qui_gon :Jedi :Human name: "QuiGon Jinn"), (obi_wan :Jedi :Human name: "Obi Wan Kenobi"), (anakin :Jedi :Sith :Human name: "Anakin Skywalker", sith_name: "Darth Vader"(luke :Jedi :Human name:"Luke Skywalker"), ... // Master relationships (darth_plagueis)[:TRAINS]>(emperor), (yoda)[:TRAINS]>(dooku), (yoda)[:TRAINS]>(luke), (emperor)[:TRAINS]>(dooku), ...
7 . 4
TRAINS
TRA…
KILLS
TRAINS
KILLS
TRAINS
KILLS
KILLS
TRAINS
TRAINS
TRAINS
FATHER_OF
<3 <3
<3
FATHER_OF
KILLSKILLS
FAT…
MOTHER_OF
TRAINS
TRAINS
TRAINS
FATHER_OF
MOTHER
_OF
TRAINS
MOTHER_OF
<3 <3 <3
Yoda
DarthTyranus(CountDooku)
QuiGon Jinn
Obi WanKenobi
Darth Vader(Anakin
Skywalker)
LukeSkywalker
Rey
DarthPlagueis(Hego
Damask)
Darth Sidious(Sheev
Palpatine)
Darth Maul ()
Kylo Ren (BenSolo)
GrandMaster Snoke
()
PadmeNaberrie
Leia Organa
Han Solo
7 . 5
MATCH Abfragen// Most important Sith MATCH (s :Sith)[r]() WITH s, count(r) as n WHERE n > 2 RETURN s ORDER BY n DESC LIMIT 3
Live Demo: http://localhost:7474
8 . 1
API
8 . 2
Endpoints und Protokolle
8 . 3
DriverJavaC#JavaScriptPython
8 . 4
Java Driver<dependency> <groupId>org.neo4j.driver</groupId> <artifactId>neo4jjavadriver</artifactId> <version>1.0.5</version> </dependency>
import org.neo4j.driver.v1.*;
Driver driver = GraphDatabase.driver( "bolt://localhost", AuthTokens.basic( "neo4j", "neo4j" ) ); Session session = driver.session();
StatementResult result = session.run( "MATCH (j:Jedi) RETURN j" ); while ( result.hasNext() ) Record jedi = result.next(); System.out.println( jedi.get( "name" ).asString() );
session.close(); driver.close();
9 . 1
Technischer Überlick
9 . 2
Neo4j ÜberblickIn Java implementiertOpen Source: GLP v3 LizenzEnterprise Support verfügbar (Clustering, Monitoring,...)
https://github.com/neo4j/neo4j
9 . 3
Neo4j ÜberblickBeziehungen sind First Class DatenstrukturenIndex Free Adjacency, d.h. Komplexität fürTraversierung Stored Procedures seit Version 3.0
O(1)
NoSQL: Einführung in GraphenDatenbanken mit Neo4j 10
Danke für IhreAufmerksamkeit
top related