Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

832 views

Published on

Eine Einführung zu NoSQL-Datenbanken am Beispiel der Graphen-Datenbank Neo4j,

Published in: Software
  • Be the first to comment

  • Be the first to like this

NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

  1. 1. 1 NoSQL Einführung in Graphen­ Datenbanken mit Neo4j Tobias Trelle, codecentric AG @tobiastrelle
  2. 2. Tobias Trelle Senior IT Consultant @ codecentric AG Twitter: @tobiastrelle Slideshare:  GitHub:  http://de.slideshare.net/tobiastrelle/ https://github.com/ttrelle
  3. 3. 2 3 Agenda NoSQL? Graphen Neo4j Graph Database Data Structures Cypher Query Language API
  4. 4. 4 . 1 NoSQL?
  5. 5. 4 . 2 4 . 3 NoSQL­Datenbanken helfen bei der Lösung der drei Problem­Felder im Big Data­Umfeld (Gartner, 2009): Warum NoSQL? Volume (Menge an Daten) Variety (verschiedene Strukturen) Velocity (Geschwindigkeit)
  6. 6. 4 . 4 Neue Herausforderungen Horizontale Skalierung Verteilte Systeme CAP Theorem / Eventual Consistency
  7. 7. 4 . 5 CAP Theorem Consistency Availability Partition Tolerance Nicht alle diese Anforderungen können zur gleichen Zeit gleichermaßen gut erfüllt werden!
  8. 8. 4 . 6 Messaging­System von Facebook 100 Node Cluster (Apache HBase) 87 Billion R/W­Operations / Day 9+ Billion Messages / Day 4 PB Compressed Data / Day 45% Growth / Month Source: Nicolas Spiegelberg (Berlin BuzzWords, June 2012)
  9. 9. 4 . 7 NoSQL­Datenbanken
  10. 10. http://nosql­database.org/
  11. 11. 4 . 8 4 . 9 DB­Engines Ranking http://db­engines.com/de/ranking
  12. 12. 5 . 1 Graphen
  13. 13. 5 . 2 Ein   ist ein Tupel   bestehend aus Formale Definition Graph G = (V , E) Knoten (Vertices):  Kanten (Edges):  V = { , . . . , }V1 Vn E ⊂ V xV = { , . . . , }E1 Em
  14. 14. 5 . 3   Edges / Kanten Einfacher Graph Vertices / Knoten
  15. 15. 5 . 4 Spezialfälle
  16. 16. 5 . 5 Streckennetze
  17. 17. 5 . 6 Stromnetz
  18. 18. 5 . 7 Use Cases für Graphen EVUs (Strom, Gas, Wasser) Streckennetze (DB, Verkehrsbetriebe) Logistik (DHL, UPS, ...) Social Networks
  19. 19. 6 . 1 Neo4j
  20. 20. 6 . 2 Graph in Neo4j Gerichteter Graph ( ) Knoten und Kanten haben Eigenschaften Knoten haben ein (oder mehere) Label(s) ( , ) ≠ ( , )V1 V2 V2 V1 ==> sog. Property­Graph
  21. 21. 6 . 3
  22. 22. 6 . 4 Properties String (Unicode) Boole'sche Werte Numerische Werte (float, int) Arrays solcher Typen CREATE (john :Person :Developer {     name: "John",     age: 36  }) 
  23. 23. 6 . 5 Labels String (Unicode) Dient zur Klassifizierung von Knoten Mehrere Labels möglich Namensraum zur Index­Definition CREATE (john :Person :Developer {   name: "John",   age: 36  })  // Index  CREATE INDEX ON :Person(name) 
  24. 24. 6 . 6 Beziehung Nativer Datentyp Verbindet immer zwei Knoten Hat einen Typ Kann auch Properties haben CREATE     (john)     ­[:KNOWS {since: 2004, level: "expert"} ]­>     (java) 
  25. 25. 6 . 7 Schema Labels klassifizieren Knoten Unique Constraint auf Knoten­Property Exists Constraint auf Knoten­Property Exists 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) 
  26. 26. 6 . 8 Zusammenfassung
  27. 27. 7 . 1 Cypher Query Language
  28. 28. 7 . 2 Cypher Deklarative (Abfrage­)Sprache Hat als DSL Syntax­Elemente für Knoten () und Kanten ­­> Erinnert an SQL Referenz: https://neo4j.com/docs/developer­ manual/current/cypher/
  29. 29. 7 . 3 CREATE ­ Anlegen von Knoten und 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),  ... 
  30. 30. 7 . 4 TRAINS TRA… KILLS TRAINS KILLS TRAINS KILLS KILLS TRAINS TRAINS TRAINS FATHER_OF <3 <3 <3 FATHER_OF KILLS KILLS FAT… M O THER_O F TRAINS TRAINS TRAINS FATHER_OF MOTHER_OF TRAINS MOTHER_OF <3 <3 <3 Yoda Darth Tyranus (Count Dooku) Qui­Gon Jinn Obi Wan Kenobi Darth Vader (Anakin Skywalker) Luke Skywalker Rey Darth Plagueis (Hego Damask) Darth Sidious (Sheev Palpatine) Darth Maul () Kylo Ren (Ben Solo) Grand­ Master Snoke () Padme Naberrie Leia Organa Han Solo
  31. 31. 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
  32. 32. 8 . 1 API
  33. 33. 8 . 2 Endpoints und Protokolle
  34. 34. 8 . 3 Driver Java C# JavaScript Python
  35. 35. 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(); 
  36. 36. 9 . 1 Technischer Überlick
  37. 37. 9 . 2 Neo4j Überblick In Java implementiert Open Source:  GLP v3 Lizenz Enterprise Support verfügbar (Clustering, Monitoring, ...) https://github.com/neo4j/neo4j
  38. 38. 9 . 3 Neo4j Überblick Beziehungen sind First Class Datenstrukturen Index Free Adjacency, d.h. Komplexität für Traversierung  Stored Procedures seit Version 3.0 O(1)
  39. 39. NoSQL: Einführung in Graphen­Datenbanken mit Neo4j 10 Danke für Ihre Aufmerksamkeit

×