Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

NoSQL - Einführung in Graphen-Datenbanken mit Neo4j

820 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

×