Your SlideShare is downloading. ×
Neo4J, what else?
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Neo4J, what else?

322

Published on

Presentation about Neo4J given at the Dutch NLjug event in november 2011.

Presentation about Neo4J given at the Dutch NLjug event in november 2011.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
322
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Neo4j, what else??? Ron van Weverwijk
  • 2. AGENDA• Positionering binnen NoSql• Wat is een graph (Graaf)• Neo4j• Neoclipse• Kamer van Koophandel• Vragen?
  • 3. VIER NOSQL CATEGORIEËN
  • 4. KEY-VALUE STORE
  • 5. COLUMN FAMILY (BIGTABLE)
  • 6. DOCUMENT DATABASES
  • 7. GRAPH DATABASES
  • 8. WAT IS EEN GRAPH?• Leonhard Euler (1736)• Seven Bridges of Königsberg http://en.wikipedia.org/wiki/Seven_Bridges_of_Königsberg
  • 9. WAAR ZIJN GRAPHS GOED IN?
  • 10. http://inmaps.linkedinlabs.com/
  • 11. NEO4J
  • 12. Experiment: Hoe zijn 2 nodes verbonden?• 1000 personen• gemiddeld 50 relaties• Zijn 2 personen verbonden met maximaal 4 stappen?• Warme cache
  • 13. Experiment: Hoe zijn 2 nodes verbonden?• 1000 personen Relationeel Neo4j• gemiddeld 50 relaties• Zijn 1000 2000ms 2ms 2 personen verbonden met maximaal 4 stappen?• Warme cache 1 000 000 ? 2ms
  • 14. Experiment: Hoe zijn 2 nodes verbonden?• 1000 personen Relationeel Neo4j• gemiddeld 50 relaties• Zijn 1000 2000ms 2ms 2 personen verbonden met maximaal 4 stappen?• Warme cache 1 000 000 ? 2ms
  • 15. NODES (VERTICES)RELATIONS (EDGES)
  • 16. PROPERTIES OP NODES type: persoon type: team name: Ron name: S2 type: persoon name: Corjan
  • 17. GETYPEERDE RELATIES speelt_in type: persoon type: team name: Ron name: S2 coach_van type: persoon name: Corjan
  • 18. PROPERTIES OP RELATIES speelt_in type: persoon type: team name: Ron name: S2 jaar: 2011 coach_van jaar: 2011 type: persoon name: Corjan
  • 19. PROPERTIES• Alle Java primitieven kunnen gebruikt worden: • String • boolean • int • double • ...
  • 20. SCHEMA-LESS DATABASE !=DATABASE WITHOUT DESIGN
  • 21. Doctor Who (Jim Webber)
  • 22. FILEBASED
  • 23. EMBEDDABLE, SERVER HIGH AVAILABLE• new EmbeddedGraphDatabase("/tmp/neodb");• GET http://localhost:7474/db/data/node/123• Map<String,String> config = HighlyAvailableGraphDatabase.loadConfigurations( configFile ); GraphDatabaseService db = new HighlyAvailableGraphDatabase( path, config );
  • 24. CREATE NODESTransaction tx = db.beginTx();try { Node ron = db.createNode(); ron.setProperty("name", "Ron van Weverwijk"); tx.success();} finally { tx.finish();}
  • 25. CREATE RELATIONSTransaction tx = db.beginTx();try { Node ron = db.createNode(); ron.setProperty("name", "Ron van Weverwijk"); Node lindy = db.createNode(); susan.setProperty("name", "Lindy van Weverwijk - Tersteeg"); lindy.createRelationshipTo(ron, DynamicRelationshipType.withName("MARIED")); tx.success();} finally { tx.finish();}
  • 26. RELATIONSDynamicRelationshipType.withName("MARIED");public enum RelationTypes implements RelationshipType{ MARIED,FRIENDS,LIVING}public class MariedRelationship implementsRelationshipType{ public String name() { return "maried"; }}
  • 27. TRAVERSINGTraversalDescription traversal = new TraversalDescriptionImpl() .depthFirst() .uniqueness(Uniqueness.RELATIONSHIP_PATH);Iterable<Path> paths = traversal.traverse(startNode); Ron Lindy Adres
  • 28. INCLUDE_AND_PRUNEINCLUDE_AND_CONTINUE EXCLUDE_AND_ PRUNEEXCLUDE_AND_CONTINUE
  • 29. ALGORITHMS• find all paths• find all simple paths• find the shortest path• Dijkstra algorithm• The a* search algorithm
  • 30. INDEXING:GRAPHS ARE THERE OWN INDEX
  • 31. LUCENETransaction tx = db.beginTx(); try { Node ron = db.createNode(); ron.setProperty("name", "Ron van Weverwijk"); Index<Node> people = db.index().forNodes("people"); people.add(ron, "name", ron.getProperty("name")); tx.success(); } finally { tx.finish();}
  • 32. HORIZONTAL PARTITIONING IS HARD Duur om te doorlopen
  • 33. HIGH AVAILABLE
  • 34. EVENTUALLY CONSISTENT
  • 35. NEOCLIPSE• eclipse applicatie• bekijk je Neo4j graph• toevoegen / verwijderen nodes en relations
  • 36. player_ofMathieu coach_of S2 Corjan player_of commission_member_of Ron Webcommissie commission_member_of Dennis
  • 37. NODE WRAPPINGpublic interface Member { String getName(); void setName(String name); // .....}
  • 38. NODE WRAPPINGpublic class MemberNode implements Member { private Node node; public static final String MEMBER_NAME_KEY = "name"; public MemberNode(Node node) { this.node = node; } public String getName() { return (String) getNode().getProperty(MEMBER_NAME_KEY); } public void setName(String name) { getNode().setProperty(MEMBER_NAME_KEY, name); }}
  • 39. KAMER VAN KOOPHANDEL• Instelling van en voor het bedrijfsleven• Registreren• Informeren• Stimuleren
  • 40. OPDRACHT• Hoe zijn bedrijven onderling verbonden?
  • 41. PROBLEEM• HuidigeDB2 database was niet geschikt om graph gerelateerde vragen te beantwoorden• Huidige systeem kon maximaal 3 niveaus terug geven• Response tijden waren te hoog• Belasting van het huidige systeem was te zwaar
  • 42. REGISTRATIE:FOCUS OP ORGANISATIE Uw keuken B.V. Bestuurder Bob de Bouwer
  • 43. IN NEO4J LEGGEN WE DE FOCUS OP DE RELATIE Uw keuken Zijn keuken B.V. B.V. Bestuurder Bestuurder Bob de Bouwer
  • 44. NIET ALLEEN 1 NIVEAU MAAR ALLE NIVEAU’S Haar keuken B.V. Bestuurder Zijn keuken Uw keuken B.V. Schaakvereniging B.V. Schaatmat Bestuurder Bestuurder Bestuurder Bob de Bouwer
  • 45. VERBETERING•1 vraag per 5 sec • 15 vragen per sec
  • 46. CIJFERS EN FEITEN• 11 900 000 nodes• 12 000 000 relaties•2 gb geheugen• 12 gb diskspace• AIX Power 7, 0.7 CPU @ 3.0GHZ
  • 47. HUIDIGE OPZETDB2 Neo4j
  • 48. GELEERDE LESSEN• Blijf tekenen: Maak het netwerk visueel• Maak proefopzetjes en refactor• Pas node wrapping toe om het domein simpel te houden• Typeer nodes
  • 49. NEO4J 1.5• kleinere disk-footprint• Cypher verbeteringen• HA verbeteringen• Verbeterde webadmin
  • 50. NEO4J SHORTLIST EU
  • 51. CREDITS KvK Kees van den Silvester van Ron vanJasper Feenstra Berg der Bijl Weverwijk Feenstra IT Four Scouts Xebia
  • 52. Ron van Weverwijkrvanweverwijk@xebia.com

×