Neo4j, what else??? Ron van Weverwijk
AGENDA• Positionering   binnen NoSql• Wat   is een graph (Graaf)• Neo4j• Neoclipse• Kamer   van Koophandel• Vragen?
VIER NOSQL CATEGORIEËN
KEY-VALUE STORE
COLUMN FAMILY (BIGTABLE)
DOCUMENT DATABASES
GRAPH DATABASES
WAT IS EEN GRAPH?• Leonhard   Euler (1736)• Seven   Bridges of Königsberg                    http://en.wikipedia.org/wiki/...
WAAR ZIJN GRAPHS GOED          IN?
http://inmaps.linkedinlabs.com/
NEO4J
Experiment: Hoe zijn 2 nodes verbonden?• 1000   personen• gemiddeld   50 relaties• Zijn     2 personen verbonden met maxim...
Experiment: Hoe zijn 2 nodes verbonden?• 1000   personen                       Relationeel   Neo4j• gemiddeld   50 relatie...
Experiment: Hoe zijn 2 nodes verbonden?• 1000   personen                       Relationeel   Neo4j• gemiddeld   50 relatie...
NODES (VERTICES)RELATIONS (EDGES)
PROPERTIES OP NODES    type: persoon                   type: team      name: Ron                      name: S2            ...
GETYPEERDE RELATIES                     speelt_in    type: persoon                   type: team      name: Ron            ...
PROPERTIES OP RELATIES                      speelt_in     type: persoon                   type: team       name: Ron      ...
PROPERTIES• Alle    Java primitieven kunnen gebruikt worden:  • String  • boolean  • int  • double  • ...
SCHEMA-LESS DATABASE           !=DATABASE WITHOUT DESIGN
Doctor Who (Jim Webber)
FILEBASED
EMBEDDABLE, SERVER                 HIGH AVAILABLE• new      EmbeddedGraphDatabase("/tmp/neodb");• GET      http://localhos...
CREATE NODESTransaction tx = db.beginTx();try {  Node ron = db.createNode();  ron.setProperty("name", "Ron van Weverwijk")...
CREATE RELATIONSTransaction tx = db.beginTx();try {  Node ron = db.createNode();  ron.setProperty("name", "Ron van Weverwi...
RELATIONSDynamicRelationshipType.withName("MARIED");public enum RelationTypes implements RelationshipType{      MARIED,FRI...
TRAVERSINGTraversalDescription traversal = new TraversalDescriptionImpl()          .depthFirst()          .uniqueness(Uniq...
INCLUDE_AND_PRUNEINCLUDE_AND_CONTINUE EXCLUDE_AND_ PRUNEEXCLUDE_AND_CONTINUE
ALGORITHMS• find   all paths• find   all simple paths• find   the shortest path• Dijkstra   algorithm• The   a* search algori...
INDEXING:GRAPHS ARE THERE OWN        INDEX
LUCENETransaction tx = db.beginTx(); try {    Node ron = db.createNode(); 	 ron.setProperty("name", "Ron van Weverwijk"); ...
HORIZONTAL PARTITIONING       IS HARD      Duur om te doorlopen
HIGH AVAILABLE
EVENTUALLY CONSISTENT
NEOCLIPSE• eclipse   applicatie• bekijk   je Neo4j graph• toevoegen     / verwijderen nodes en relations
player_ofMathieu                                 coach_of                           S2                            Corjan  ...
NODE WRAPPINGpublic interface Member {    String getName();    void setName(String name);    // .....}
NODE WRAPPINGpublic class MemberNode implements Member {  private Node node;  public static final String MEMBER_NAME_KEY = ...
KAMER VAN KOOPHANDEL• Instelling   van en voor het bedrijfsleven• Registreren• Informeren• Stimuleren
OPDRACHT• Hoe   zijn bedrijven onderling verbonden?
PROBLEEM• HuidigeDB2 database was niet geschikt om graph gerelateerde vragen te beantwoorden• Huidige   systeem kon maxima...
REGISTRATIE:FOCUS OP ORGANISATIE        Uw keuken          B.V.              Bestuurder         Bob de         Bouwer
IN NEO4J LEGGEN WE DE  FOCUS OP DE RELATIE     Uw keuken                Zijn keuken       B.V.                       B.V. ...
NIET ALLEEN 1 NIVEAU MAAR       ALLE NIVEAU’S                      Haar keuken                          B.V.              ...
VERBETERING•1   vraag per 5 sec   • 15   vragen per sec
CIJFERS EN FEITEN• 11   900 000 nodes• 12   000 000 relaties•2   gb geheugen• 12   gb diskspace• AIX   Power 7, 0.7 CPU @ ...
HUIDIGE OPZETDB2       Neo4j
GELEERDE LESSEN• Blijf   tekenen: Maak het netwerk visueel• Maak     proefopzetjes en refactor• Pas     node wrapping toe ...
NEO4J 1.5• kleinere   disk-footprint• Cypher     verbeteringen• HA   verbeteringen• Verbeterde    webadmin
NEO4J SHORTLIST EU
CREDITS                                 KvK                  Kees van den             Silvester van   Ron vanJasper Feenst...
Ron van Weverwijkrvanweverwijk@xebia.com
Neo4J, what else?
Neo4J, what else?
Neo4J, what else?
Neo4J, what else?
Neo4J, what else?
Neo4J, what else?
Neo4J, what else?
Upcoming SlideShare
Loading in...5
×

Neo4J, what else?

338

Published on

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
338
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Neo4J, what else?

  1. 1. Neo4j, what else??? Ron van Weverwijk
  2. 2. AGENDA• Positionering binnen NoSql• Wat is een graph (Graaf)• Neo4j• Neoclipse• Kamer van Koophandel• Vragen?
  3. 3. VIER NOSQL CATEGORIEËN
  4. 4. KEY-VALUE STORE
  5. 5. COLUMN FAMILY (BIGTABLE)
  6. 6. DOCUMENT DATABASES
  7. 7. GRAPH DATABASES
  8. 8. WAT IS EEN GRAPH?• Leonhard Euler (1736)• Seven Bridges of Königsberg http://en.wikipedia.org/wiki/Seven_Bridges_of_Königsberg
  9. 9. WAAR ZIJN GRAPHS GOED IN?
  10. 10. http://inmaps.linkedinlabs.com/
  11. 11. NEO4J
  12. 12. Experiment: Hoe zijn 2 nodes verbonden?• 1000 personen• gemiddeld 50 relaties• Zijn 2 personen verbonden met maximaal 4 stappen?• Warme cache
  13. 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. 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. 15. NODES (VERTICES)RELATIONS (EDGES)
  16. 16. PROPERTIES OP NODES type: persoon type: team name: Ron name: S2 type: persoon name: Corjan
  17. 17. GETYPEERDE RELATIES speelt_in type: persoon type: team name: Ron name: S2 coach_van type: persoon name: Corjan
  18. 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. 19. PROPERTIES• Alle Java primitieven kunnen gebruikt worden: • String • boolean • int • double • ...
  20. 20. SCHEMA-LESS DATABASE !=DATABASE WITHOUT DESIGN
  21. 21. Doctor Who (Jim Webber)
  22. 22. FILEBASED
  23. 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. 24. CREATE NODESTransaction tx = db.beginTx();try { Node ron = db.createNode(); ron.setProperty("name", "Ron van Weverwijk"); tx.success();} finally { tx.finish();}
  25. 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. 26. RELATIONSDynamicRelationshipType.withName("MARIED");public enum RelationTypes implements RelationshipType{ MARIED,FRIENDS,LIVING}public class MariedRelationship implementsRelationshipType{ public String name() { return "maried"; }}
  27. 27. TRAVERSINGTraversalDescription traversal = new TraversalDescriptionImpl() .depthFirst() .uniqueness(Uniqueness.RELATIONSHIP_PATH);Iterable<Path> paths = traversal.traverse(startNode); Ron Lindy Adres
  28. 28. INCLUDE_AND_PRUNEINCLUDE_AND_CONTINUE EXCLUDE_AND_ PRUNEEXCLUDE_AND_CONTINUE
  29. 29. ALGORITHMS• find all paths• find all simple paths• find the shortest path• Dijkstra algorithm• The a* search algorithm
  30. 30. INDEXING:GRAPHS ARE THERE OWN INDEX
  31. 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. 32. HORIZONTAL PARTITIONING IS HARD Duur om te doorlopen
  33. 33. HIGH AVAILABLE
  34. 34. EVENTUALLY CONSISTENT
  35. 35. NEOCLIPSE• eclipse applicatie• bekijk je Neo4j graph• toevoegen / verwijderen nodes en relations
  36. 36. player_ofMathieu coach_of S2 Corjan player_of commission_member_of Ron Webcommissie commission_member_of Dennis
  37. 37. NODE WRAPPINGpublic interface Member { String getName(); void setName(String name); // .....}
  38. 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. 39. KAMER VAN KOOPHANDEL• Instelling van en voor het bedrijfsleven• Registreren• Informeren• Stimuleren
  40. 40. OPDRACHT• Hoe zijn bedrijven onderling verbonden?
  41. 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. 42. REGISTRATIE:FOCUS OP ORGANISATIE Uw keuken B.V. Bestuurder Bob de Bouwer
  43. 43. IN NEO4J LEGGEN WE DE FOCUS OP DE RELATIE Uw keuken Zijn keuken B.V. B.V. Bestuurder Bestuurder Bob de Bouwer
  44. 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. 45. VERBETERING•1 vraag per 5 sec • 15 vragen per sec
  46. 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. 47. HUIDIGE OPZETDB2 Neo4j
  48. 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. 49. NEO4J 1.5• kleinere disk-footprint• Cypher verbeteringen• HA verbeteringen• Verbeterde webadmin
  50. 50. NEO4J SHORTLIST EU
  51. 51. CREDITS KvK Kees van den Silvester van Ron vanJasper Feenstra Berg der Bijl Weverwijk Feenstra IT Four Scouts Xebia
  52. 52. Ron van Weverwijkrvanweverwijk@xebia.com

×