40
1 NoSQL Einführung in Graphen Datenbanken mit Neo4j Tobias Trelle, codecentric AG @tobiastrelle

NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

Embed Size (px)

Citation preview

Page 1: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

1

NoSQLEinführung in Graphen­Datenbanken mit Neo4j

Tobias Trelle, codecentric AG

@tobiastrelle

Page 2: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

2

Tobias TrelleSenior IT Consultant @ codecentric AGTwitter: @tobiastrelleSlideshare: GitHub:

http://de.slideshare.net/tobiastrelle/https://github.com/ttrelle

Page 3: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

2

3

AgendaNoSQL?GraphenNeo4j Graph DatabaseData StructuresCypher Query LanguageAPI

Page 4: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 1

NoSQL?

Page 5: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 2

Page 6: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 2

4 . 3

NoSQL­Datenbanken helfen bei der Lösung der dreiProblem­Felder im Big Data­Umfeld (Gartner, 2009):

Warum NoSQL?

Volume (Menge an Daten)Variety (verschiedene Strukturen)Velocity (Geschwindigkeit)

Page 7: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 4

NeueHerausforderungen

Horizontale SkalierungVerteilte SystemeCAP Theorem / Eventual Consistency

Page 8: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 5

CAP TheoremConsistencyAvailabilityPartition Tolerance

Nicht alle diese Anforderungen können zur gleichen Zeitgleichermaßen gut erfüllt werden!

Page 9: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 6

Messaging­System vonFacebook

100 Node Cluster (Apache HBase)87 Billion R/W­Operations / Day9+ Billion Messages / Day4 PB Compressed Data / Day45% Growth / Month

Source: Nicolas Spiegelberg

(Berlin BuzzWords, June 2012)

Page 10: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 7

NoSQL­Datenbanken

Page 11: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 8

http://nosql­database.org/

Page 12: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

4 . 8

4 . 9

DB­Engines Ranking

http://db­engines.com/de/ranking

Page 13: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

5 . 1

Graphen

Page 14: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

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

Page 15: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

5 . 3

Edges / Kanten

Einfacher Graph

Vertices / Knoten

Page 16: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

5 . 4

Spezialfälle

Page 17: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

5 . 5

Streckennetze

Page 18: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

5 . 6

Stromnetz

Page 19: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

5 . 7

Use Cases für GraphenEVUs (Strom, Gas, Wasser)Streckennetze (DB, Verkehrsbetriebe)Logistik (DHL, UPS, ...)Social Networks

Page 20: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

6 . 1

Neo4j

Page 21: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

6 . 2

Graph in Neo4j

Gerichteter Graph ( )Knoten und Kanten haben EigenschaftenKnoten haben ein (oder mehere) Label(s)

( , ) ≠ ( , )V1 V2 V2 V1

==> sog. Property­Graph

Page 22: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

6 . 3

Page 23: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

6 . 4

PropertiesString (Unicode)Boole'sche WerteNumerische Werte (float, int)Arrays solcher Typen

CREATE (john :Person :Developer name: "John", age: 36 )

Page 24: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

6 . 5

LabelsString (Unicode)Dient zur Klassifizierung von KnotenMehrere Labels möglichNamensraum zur Index­Definition

CREATE (john :Person :Developer name: "John", age: 36 ) // Index CREATE INDEX ON :Person(name)

Page 25: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

6 . 6

BeziehungNativer DatentypVerbindet immer zwei KnotenHat einen TypKann auch Properties haben

CREATE (john) ­[:KNOWS since: 2004, level: "expert" ]­> (java)

Page 26: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

6 . 7

SchemaLabels klassifizieren KnotenUnique Constraint auf Knoten­PropertyExists Constraint auf Knoten­PropertyExists Constraint auf Beziehung­Property

// 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)

Page 27: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

6 . 8

Zusammenfassung

Page 28: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

7 . 1

Cypher QueryLanguage

Page 29: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

7 . 2

CypherDeklarative (Abfrage­)SpracheHat als DSL Syntax­Elemente für Knoten () undKanten ­­>Erinnert an SQLReferenz: https://neo4j.com/docs/developer­manual/current/cypher/

Page 30: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

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: "Qui­Gon 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), ...

Page 31: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

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)

Qui­Gon Jinn

Obi WanKenobi

Darth Vader(Anakin

Skywalker)

LukeSkywalker

Rey

DarthPlagueis(Hego

Damask)

Darth Sidious(Sheev

Palpatine)

Darth Maul ()

Kylo Ren (BenSolo)

Grand­Master Snoke

()

PadmeNaberrie

Leia Organa

Han Solo

Page 32: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

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

Page 33: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

8 . 1

API

Page 34: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

8 . 2

Endpoints und Protokolle

Page 35: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

8 . 3

DriverJavaC#JavaScriptPython

Page 36: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

8 . 4

Java Driver<dependency> <groupId>org.neo4j.driver</groupId> <artifactId>neo4j­java­driver</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();

Page 37: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

9 . 1

Technischer Überlick

Page 38: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

9 . 2

Neo4j ÜberblickIn Java implementiertOpen Source: GLP v3 LizenzEnterprise Support verfügbar (Clustering, Monitoring,...)

https://github.com/neo4j/neo4j

Page 39: NoSQL - Einführung in Graphen-Datenbanken mit 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)

Page 40: NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

NoSQL: Einführung in Graphen­Datenbanken mit Neo4j 10

Danke für IhreAufmerksamkeit