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.
Neo4jDaten natürlich modellieren und verarbeiten mit Neo4jBerlin Expert Days 2013 | Berlin | 04.04.2013
2Speaker ProfilPatrick Baumgartner• Senior Software Consultant | Partner @ Swiftmind• Spring Framework, OSGi, Neo4j• Sprin...
3SwiftmindIhre Experten für Enterprise JavaSpezialgebiete• Java EE• Spring Framework• OSGi• Agile Projektmethoden• Softwar...
4Agenda• Einführung• Usecases• Neo4j• Querying• Import / Export• Tools und APIs• Polyglot Persistence• Highlights & Challe...
5New Types of Data Stores
6NoSQLDatengrösseDatenkomplexitätKey-Value StoresColumn FamilyDocument DatabasesGraph DatabasesRelational Databases90% all...
7Property Graph Modell• Graphen bestehen aus– Knoten / Nodes– Beziehungen / Relations– Eigenschafen / PropertiesAliceBobCa...
8Wo finde ich meinen Graphen?Usecases
9Social DataAliceCarol LukeBobSamPete
10Ein einziger Anwendungsfall?Social Graph
11Spatial Data12 53138type:Hotelname:Radisson Blulat:47.452549long:8.564615type:Hotelname:Widderlat:47.373517long:8.539252
12Schienennetz in Deutschland
13Social & Spatial DataAliceMat 5Bob138type:Hotelname:Radisson Blulat:47.452549long:8.564615
14Financial DataAliceHotel LukeBankATMPete
15Eine beliebige Business DomäneProcessKPIDeviceActivityFunctionService
16Neo4jThe Big Picture
17Neo4j – Big Picture• Die verbreiteste Graphendatenbank der Welt– Robust: Im Betrieb 24/7 seit 2003– Reifegrad: Vielfach ...
18Eigenschaften• Objektorientiert, flexible Netzwerkstruktur• Support für ACID Transaktionen• Horizontal skalierbar• Java ...
19Wie komme ich an meine Daten?Querying
20Graph Querying• Wie erhalte ich die richtigen Nodes aus dem Graphen?– Nenne mir alle Freunde und Freunde von Freundenwel...
21Neo4j APINode bob = ...;for ((Relationship rel: bob.getRelationships(RelTypes.KNOWS)) {Node friend = rel.getEndNode();Sy...
22Traversal API• Beschreibt Bewegungen durch den Graphen• Callback basiert• Abfrage API für Graphen• Fluent API• Konstrukt...
23Traversal API – Konstrukte
24Beispiel: Traversal APITraversalDescription directFriends = Traversal.description().breadthFirst().relationships(RelType...
25Index Queries• Unterstützung von Node undRelationship Indices• Lucene als Standard-implementierungnode id property value...
26Cypher Query Language• Graph Query Language ähnlich SQL• Deklarative Sprache• Definiert das „Was“ – nicht das „Wie“• Nut...
27Cypher Query Language – ElementeElement BedeutungSTART Startelement(e) (Angabe von Index- o. Id-Lookup)MATCH Pattern für...
28Beispiel: Cypher QueryString query = "START person=node(12) “+ “MATCH person-[:KNOWS]-friend “+ “RETURN friend“;Executio...
29Beispiel: Cypher Create QueryCREATE (carol {name:“Carol“}) return carol;+------------------------+| carol |+------------...
30Wie lese und schreibe ich Daten?Import / Export
31Erzeugung von Nodes mit Javaorg.neo4j.graphdb.GraphDatabaseService graphDb =new GraphDatabaseFactory().newEmbeddedDataba...
32NeoClipse
33Thinkerpop – BlueprintThinkerpop BlueprintExtensions• GraphML Reader/WriterLibrary• GraphSon Reader/WriterLibrary• GML R...
34GraphML• GraphML (http://graphml.graphdrawing.org/ )– Standardisierte Beschreibungssprache für Graphen– Modellierungswer...
35Neo4j Bordmittel• GraphML– Gremlin Plugin• CSV– BatchInserter– ParallelBatchInserter
36Nützliche Helfer bei der täglichen ArbeitTools & APIs
37Tools & APIs (2)• Admin Web-Interface– Datenübersicht– Abfrage– Commandline Tool• Neo4j Shell– Commandline Tool– Send UN...
38Tools & APIs (3)• Gremlin Plugin– Groovy basierte Graph Traversal Language via RESTAPI– Graph importer• Indexing– Lucene...
39Gibt es nur EINEN zentralen Datentopf?Polyglot Persistence
40Polyglot PersistenceApplikationUser Sessions Shopping Card RecommendationsProduct Catalog Analytics Financial DataRedis ...
41Challenges and Highlights
42Challenges• Developer Onboarding• Indexierung• “Schemaänderungen” -> Migrationen• Extrem viele Daten• Oft neue Neo4j Rel...
43Highlights• Community mit gutem Support• Sourcen auf Github• Gute Performance• Whiteboard friendliness• Spring Programmi...
44Q&A
45Herzlichen Dank!Patrick Baumgartner, @patbaumgartnerpatrick.baumgartner [at] swiftmind [dot] comhttp://www.swiftmind.com...
Upcoming SlideShare
Loading in …5
×

Daten natuerlich modellieren und verarbeiten mit Neo4j

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

Daten natuerlich modellieren und verarbeiten mit Neo4j

  1. 1. Neo4jDaten natürlich modellieren und verarbeiten mit Neo4jBerlin Expert Days 2013 | Berlin | 04.04.2013
  2. 2. 2Speaker ProfilPatrick Baumgartner• Senior Software Consultant | Partner @ Swiftmind• Spring Framework, OSGi, Neo4j• Spring Trainer• Co-Autor von „OSGi für Praktiker“• Agile Projektmethoden & Praktiken• Scrum.org Trainer - PSD Java• @patbaumgartner
  3. 3. 3SwiftmindIhre Experten für Enterprise JavaSpezialgebiete• Java EE• Spring Framework• OSGi• Agile Projektmethoden• Software Engineering Best PracticesStandort• Zürich, Schweiz• @swiftmind• http://www.swiftmind.com
  4. 4. 4Agenda• Einführung• Usecases• Neo4j• Querying• Import / Export• Tools und APIs• Polyglot Persistence• Highlights & Challenges beim Einsatz• Q & A
  5. 5. 5New Types of Data Stores
  6. 6. 6NoSQLDatengrösseDatenkomplexitätKey-Value StoresColumn FamilyDocument DatabasesGraph DatabasesRelational Databases90% aller Usecases
  7. 7. 7Property Graph Modell• Graphen bestehen aus– Knoten / Nodes– Beziehungen / Relations– Eigenschafen / PropertiesAliceBobCarname:Bobage:63sex:malename:Aliceage:21sex:femaletype:carvendor:tesla
  8. 8. 8Wo finde ich meinen Graphen?Usecases
  9. 9. 9Social DataAliceCarol LukeBobSamPete
  10. 10. 10Ein einziger Anwendungsfall?Social Graph
  11. 11. 11Spatial Data12 53138type:Hotelname:Radisson Blulat:47.452549long:8.564615type:Hotelname:Widderlat:47.373517long:8.539252
  12. 12. 12Schienennetz in Deutschland
  13. 13. 13Social & Spatial DataAliceMat 5Bob138type:Hotelname:Radisson Blulat:47.452549long:8.564615
  14. 14. 14Financial DataAliceHotel LukeBankATMPete
  15. 15. 15Eine beliebige Business DomäneProcessKPIDeviceActivityFunctionService
  16. 16. 16Neo4jThe Big Picture
  17. 17. 17Neo4j – Big Picture• Die verbreiteste Graphendatenbank der Welt– Robust: Im Betrieb 24/7 seit 2003– Reifegrad: Vielfach in Produktion ausgerollt– Community: Ecosystem mit Tools, Bindings, Frameworks• Lizenzen– AGPLv3 Community Edition – OpenSource– Advanced/Enterprise – für kommerzielle Anwendungen• Neo Technology– Entwicklung & Support– ~ 50 Personen / 6 Länder / 3 Kontinente– Total 24 Mio $ VC Finanzierung
  18. 18. 18Eigenschaften• Objektorientiert, flexible Netzwerkstruktur• Support für ACID Transaktionen• Horizontal skalierbar• Java API– Anbindung mittels Java, Groovy, Scala, JRuby• Runtime– Standalone Server– Embedded Database• Diskbasierter Storage Manager• Support für Erweiterungen und Testing
  19. 19. 19Wie komme ich an meine Daten?Querying
  20. 20. 20Graph Querying• Wie erhalte ich die richtigen Nodes aus dem Graphen?– Nenne mir alle Freunde und Freunde von Freundenwelche den Film XY mit mehr als 3 Sternen bewertethaben.– ...• Queryingmethoden– Traversing mit Neo4j API– Traversal Descriptions– Graphalgorithmen– Index Queries– Cypher Queries
  21. 21. 21Neo4j APINode bob = ...;for ((Relationship rel: bob.getRelationships(RelTypes.KNOWS)) {Node friend = rel.getEndNode();System.out.println(friend.getProperty("name"));}• Einfache, aber sehr „low level“ API• Zu „verbose“ für komplexe Traversals
  22. 22. 22Traversal API• Beschreibt Bewegungen durch den Graphen• Callback basiert• Abfrage API für Graphen• Fluent API• Konstrukte• Neo4j implementiert folgende Algorithmen:– A*– Dijkstra– pathsWithLength– shortestPath– allSimplePaths– allPaths
  23. 23. 23Traversal API – Konstrukte
  24. 24. 24Beispiel: Traversal APITraversalDescription directFriends = Traversal.description().breadthFirst().relationships(RelTypes.KNOWS).evaluator(Evaluators.toDepth(1)).evaluator(Evaluators.excludeStartPosition());for(Path p : directFriends.traverse(bob)) {System.out.println(p.endNode().getProperty(„firstname“));}
  25. 25. 25Index Queries• Unterstützung von Node undRelationship Indices• Lucene als Standard-implementierungnode id property value15 name Alice15 yearOfBirth 197216 name Bob46 name Carol46 yearOfBirth 1983
  26. 26. 26Cypher Query Language• Graph Query Language ähnlich SQL• Deklarative Sprache• Definiert das „Was“ – nicht das „Wie“• Nutzt Pattern Matching• Support für– Filterung– Paginierung• Update-Funktionalität
  27. 27. 27Cypher Query Language – ElementeElement BedeutungSTART Startelement(e) (Angabe von Index- o. Id-Lookup)MATCH Pattern für zu findende Knoten, beschrieben durchPfade auf Identifiern (a) –[knows]-> (b)WHERE Resultatsfilterung (boolean-Ausdruck)SKIP LIMIT PaginierungRETURN Definiert Rückgabe-ElementeORDER BY Sortierung nach PropertiesPARAMETERS Parameter-Map, die im Cypher mittels Key oderPosition verwendet werden kannCREATE Erzeugt einen Knoten
  28. 28. 28Beispiel: Cypher QueryString query = "START person=node(12) “+ “MATCH person-[:KNOWS]-friend “+ “RETURN friend“;ExecutionEngine engine = new ExecutionEngine(graphDb);ExecutionResult result = engine.execute(query);Iterator<Object> column = result.columnAs("friend");while(column.hasNext()) {Node friendNode = (Node)column.next();System.out.println(friendNode.getProperty(PROP_FIRSTNAME));}
  29. 29. 29Beispiel: Cypher Create QueryCREATE (carol {name:“Carol“}) return carol;+------------------------+| carol |+------------------------+| Node[1]{name:“carol“} |+------------------------+START carol=node(1) CREATE (bob {name:“Bob"}),(bob)-[:knows]->(carol) return carol;START carol=node(1)CREATE (apple {name:“Apple“,typ:“Fruit“}),(carol)-[:owns {number: 5}]->(apple);
  30. 30. 30Wie lese und schreibe ich Daten?Import / Export
  31. 31. 31Erzeugung von Nodes mit Javaorg.neo4j.graphdb.GraphDatabaseService graphDb =new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);Transaction tx = graphDb.beginTx();try {Node peter = createNode(graphDb, "Peter");Node carol = createNode(graphDb, “Carol");peter.createRelationshipTo(carol, RelTypes.KNOWS);..tx.success();} finally {tx.finish();}public Node createNode(GraphDatabaseService graphDb, String firstname) {Node person = graphDb.createNode();person.setProperty(„firstname“, firstname);return person;}
  32. 32. 32NeoClipse
  33. 33. 33Thinkerpop – BlueprintThinkerpop BlueprintExtensions• GraphML Reader/WriterLibrary• GraphSon Reader/WriterLibrary• GML Reader/Writer Library• Java UniversalNetwork/Graph Framework
  34. 34. 34GraphML• GraphML (http://graphml.graphdrawing.org/ )– Standardisierte Beschreibungssprache für Graphen– Modellierungswerkzeuge– XML<graph id="G" edgedefault="directed"><node id="n0"/><node id="n1"/><edge source="n0" target="n1"/></graph>
  35. 35. 35Neo4j Bordmittel• GraphML– Gremlin Plugin• CSV– BatchInserter– ParallelBatchInserter
  36. 36. 36Nützliche Helfer bei der täglichen ArbeitTools & APIs
  37. 37. 37Tools & APIs (2)• Admin Web-Interface– Datenübersicht– Abfrage– Commandline Tool• Neo4j Shell– Commandline Tool– Send UNIX-like Commands via RMI (cd, ls, pwd)– Support für Cypher Queries• REST API– Zugriff mittels HTTP und JSON– Clients für div. Sprache (Java, .NET, PHP, Ruby,...)• Neoclipse– Eclipse basiertes Tool für graphische Darstellung– Filteroptionen für Teilgraphendarstellung
  38. 38. 38Tools & APIs (3)• Gremlin Plugin– Groovy basierte Graph Traversal Language via RESTAPI– Graph importer• Indexing– Lucene• Third Party Libraries– Thinkerpop– Spring Data Neo4j (SDN)• ...
  39. 39. 39Gibt es nur EINEN zentralen Datentopf?Polyglot Persistence
  40. 40. 40Polyglot PersistenceApplikationUser Sessions Shopping Card RecommendationsProduct Catalog Analytics Financial DataRedis Riak Neo4jMongoDB Casandra MySQL
  41. 41. 41Challenges and Highlights
  42. 42. 42Challenges• Developer Onboarding• Indexierung• “Schemaänderungen” -> Migrationen• Extrem viele Daten• Oft neue Neo4j Releases• Bugs – keine Showstopper• Übersicht im Modell nicht verlieren / Dokumentation pflegen
  43. 43. 43Highlights• Community mit gutem Support• Sourcen auf Github• Gute Performance• Whiteboard friendliness• Spring Programmier-Modell mit Spring Data Neo4j
  44. 44. 44Q&A
  45. 45. 45Herzlichen Dank!Patrick Baumgartner, @patbaumgartnerpatrick.baumgartner [at] swiftmind [dot] comhttp://www.swiftmind.com @swiftmind

    Be the first to comment

    Login to see the comments

  • jodroog

    Jul. 9, 2014
  • mobbithek

    Jan. 26, 2015

Views

Total views

1,432

On Slideshare

0

From embeds

0

Number of embeds

187

Actions

Downloads

33

Shares

0

Comments

0

Likes

2

×