Daten natuerlich modellieren und verarbeiten mit Neo4j

  • Published on
    22-Nov-2014

  • View
    937

  • Download
    4

DESCRIPTION

 

Transcript

  • 1. Neo4jDaten natrlich modellieren und verarbeiten mit Neo4jBerlin Expert Days 2013 | Berlin | 04.04.2013
  • 2. 2Speaker ProfilPatrick Baumgartner Senior Software Consultant | Partner @ Swiftmind Spring Framework, OSGi, Neo4j Spring Trainer Co-Autor von OSGi fr Praktiker Agile Projektmethoden & Praktiken Scrum.org Trainer - PSD Java @patbaumgartner
  • 3. 3SwiftmindIhre Experten fr Enterprise JavaSpezialgebiete Java EE Spring Framework OSGi Agile Projektmethoden Software Engineering Best PracticesStandort Zrich, Schweiz @swiftmind http://www.swiftmind.com
  • 4. 4Agenda Einfhrung Usecases Neo4j Querying Import / Export Tools und APIs Polyglot Persistence Highlights & Challenges beim Einsatz Q & A
  • 5. 5New Types of Data Stores
  • 6. 6NoSQLDatengrsseDatenkomplexittKey-Value StoresColumn FamilyDocument DatabasesGraph DatabasesRelational Databases90% aller Usecases
  • 7. 7Property Graph Modell Graphen bestehen aus Knoten / Nodes Beziehungen / Relations Eigenschafen / PropertiesAliceBobCarname:Bobage:63sex:malename:Aliceage:21sex:femaletype:carvendor:tesla
  • 8. 8Wo finde ich meinen Graphen?Usecases
  • 9. 9Social DataAliceCarol LukeBobSamPete
  • 10. 10Ein einziger Anwendungsfall?Social Graph
  • 11. 11Spatial Data12 53138type:Hotelname:Radisson Blulat:47.452549long:8.564615type:Hotelname:Widderlat:47.373517long:8.539252
  • 12. 12Schienennetz in Deutschland
  • 13. 13Social & Spatial DataAliceMat 5Bob138type:Hotelname:Radisson Blulat:47.452549long:8.564615
  • 14. 14Financial DataAliceHotel LukeBankATMPete
  • 15. 15Eine beliebige Business DomneProcessKPIDeviceActivityFunctionService
  • 16. 16Neo4jThe Big Picture
  • 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 fr kommerzielle Anwendungen Neo Technology Entwicklung & Support ~ 50 Personen / 6 Lnder / 3 Kontinente Total 24 Mio $ VC Finanzierung
  • 18. 18Eigenschaften Objektorientiert, flexible Netzwerkstruktur Support fr ACID Transaktionen Horizontal skalierbar Java API Anbindung mittels Java, Groovy, Scala, JRuby Runtime Standalone Server Embedded Database Diskbasierter Storage Manager Support fr Erweiterungen und Testing
  • 19. 19Wie komme ich an meine Daten?Querying
  • 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. 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 fr komplexe Traversals
  • 22. 22Traversal API Beschreibt Bewegungen durch den Graphen Callback basiert Abfrage API fr Graphen Fluent API Konstrukte Neo4j implementiert folgende Algorithmen: A* Dijkstra pathsWithLength shortestPath allSimplePaths allPaths
  • 23. 23Traversal API Konstrukte
  • 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. 25Index Queries Untersttzung von Node undRelationship Indices Lucene als Standard-implementierungnode id property value15 name Alice15 yearOfBirth 197216 name Bob46 name Carol46 yearOfBirth 1983
  • 26. 26Cypher Query Language Graph Query Language hnlich SQL Deklarative Sprache Definiert das Was nicht das Wie Nutzt Pattern Matching Support fr Filterung Paginierung Update-Funktionalitt
  • 27. 27Cypher Query Language ElementeElement BedeutungSTART Startelement(e) (Angabe von Index- o. Id-Lookup)MATCH Pattern fr zu findende Knoten, beschrieben durchPfade auf Identifiern (a) [knows]-> (b)WHERE Resultatsfilterung (boolean-Ausdruck)SKIP LIMIT PaginierungRETURN Definiert Rckgabe-ElementeORDER BY Sortierung nach PropertiesPARAMETERS Parameter-Map, die im Cypher mittels Key oderPosition verwendet werden kannCREATE Erzeugt einen Knoten
  • 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 column = result.columnAs("friend");while(column.hasNext()) {Node friendNode = (Node)column.next();System.out.println(friendNode.getProperty(PROP_FIRSTNAME));}
  • 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. 30Wie lese und schreibe ich Daten?Import / Export
  • 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. 32NeoClipse
  • 33. 33Thinkerpop BlueprintThinkerpop BlueprintExtensions GraphML Reader/WriterLibrary GraphSon Reader/WriterLibrary GML Reader/Writer Library Java UniversalNetwork/Graph Framework
  • 34. 34GraphML GraphML (http://graphml.graphdrawing.org/ ) Standardisierte Beschreibungssprache fr Graphen Modellierungswerkzeuge XML
  • 35. 35Neo4j Bordmittel GraphML Gremlin Plugin CSV BatchInserter ParallelBatchInserter
  • 36. 36Ntzliche Helfer bei der tglichen ArbeitTools & APIs
  • 37. 37Tools & APIs (2) Admin Web-Interface Datenbersicht Abfrage Commandline Tool Neo4j Shell Commandline Tool Send UNIX-like Commands via RMI (cd, ls, pwd) Support fr Cypher Queries REST API Zugriff mittels HTTP und JSON Clients fr div. Sprache (Java, .NET, PHP, Ruby,...) Neoclipse Eclipse basiertes Tool fr graphische Darstellung Filteroptionen fr Teilgraphendarstellung
  • 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. 39Gibt es nur EINEN zentralen Datentopf?Polyglot Persistence
  • 40. 40Polyglot PersistenceApplikationUser Sessions Shopping Card RecommendationsProduct Catalog Analytics Financial DataRedis Riak Neo4jMongoDB Casandra MySQL
  • 41. 41Challenges and Highlights
  • 42. 42Challenges Developer Onboarding Indexierung Schemanderungen -> Migrationen Extrem viele Daten Oft neue Neo4j Releases Bugs keine Showstopper bersicht im Modell nicht verlieren / Dokumentation pflegen
  • 43. 43Highlights Community mit gutem Support Sourcen auf Github Gute Performance Whiteboard friendliness Spring Programmier-Modell mit Spring Data Neo4j
  • 44. 44Q&A
  • 45. 45Herzlichen Dank!Patrick Baumgartner, @patbaumgartnerpatrick.baumgartner [at] swiftmind [dot] comhttp://www.swiftmind.com @swiftmind

Recommended

View more >