Download - Neo4 j, what else?
![Page 1: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/1.jpg)
NEO4J, WHAT ELSE?!Ron van Weverwijk
![Page 2: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/2.jpg)
AGENDA
• Positionering binnen NoSql
• Waarom een Graph database?
• Neo4j
• Cypher
• Vragen?
![Page 3: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/3.jpg)
VIER NOSQL CATEGORIEËN
![Page 4: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/4.jpg)
![Page 5: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/5.jpg)
KEY-VALUE STORE
![Page 6: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/6.jpg)
COLUMN FAMILY (BIGTABLE)KEY-VALUE STORE
![Page 7: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/7.jpg)
COLUMN FAMILY (BIGTABLE)
DOCUMENTDATABASES
KEY-VALUE STORE
![Page 8: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/8.jpg)
COLUMN FAMILY (BIGTABLE)
DOCUMENTDATABASES GRAPH DATABASES
KEY-VALUE STORE
![Page 9: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/9.jpg)
![Page 10: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/10.jpg)
![Page 11: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/11.jpg)
WAAR IS EEN GRAPHDATABASE GOED IN?
![Page 13: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/13.jpg)
![Page 14: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/14.jpg)
PageRank is gebouwd met 15 regels code!Bron:http://www.royans.net/arch/pregel-googles-other-data-processing-infrastructure/
![Page 15: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/15.jpg)
![Page 16: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/16.jpg)
![Page 17: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/17.jpg)
WAAROM EEN GRAPHDATABASE?
![Page 18: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/18.jpg)
WAAROM EEN GRAPHDATABASE?
![Page 19: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/19.jpg)
WAAROM EEN GRAPHDATABASE?
![Page 20: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/20.jpg)
Experiment: Hoe zijn 2 nodes verbonden?
• 1000 personen
• gemiddeld 50 relaties
• Zijn 2 personen verbonden met maximaal 4 stappen?
• Warme cache
![Page 21: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/21.jpg)
Experiment: Hoe zijn 2 nodes verbonden?
• 1000 personen
• gemiddeld 50 relaties
• Zijn 2 personen verbonden met maximaal 4 stappen?
• Warme cache
Relationeel Neo4j
1000 2000ms 2ms
1 000 000 ? 2ms
![Page 22: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/22.jpg)
Experiment: Hoe zijn 2 nodes verbonden?
• 1000 personen
• gemiddeld 50 relaties
• Zijn 2 personen verbonden met maximaal 4 stappen?
• Warme cache
Relationeel Neo4j
1000 2000ms 2ms
1 000 000 ? 2ms
![Page 23: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/23.jpg)
NODES (VERTICES) RELATIONS (EDGES)
![Page 24: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/24.jpg)
PROPERTIES OP NODES
type: persoonname: Ron
type: persoonname: Corjan
type: teamname: S2
![Page 25: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/25.jpg)
GETYPEERDE RELATIES
type: persoonname: Ron
type: persoonname: Corjan
type: teamname: S2
speelt_in
coach_van
![Page 26: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/26.jpg)
PROPERTIES OP RELATIES
type: persoonname: Ron
type: persoonname: Corjan
type: teamname: S2
speelt_in
coach_van
jaar : 2011
jaar : 2011
![Page 27: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/27.jpg)
PROPERTIES
• Alle Java primitieven kunnen gebruikt worden:
• String
• boolean
• int
• double
• ...
![Page 28: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/28.jpg)
SCHEMA-LESS DATABASE!=
DATABASE WITHOUT DESIGN
![Page 29: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/29.jpg)
Doctor Who (Jim Webber)
![Page 30: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/30.jpg)
FILEBASED
![Page 31: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/31.jpg)
EMBEDDABLE, SERVERHIGH 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 );
![Page 32: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/32.jpg)
TRANSACTIONS
![Page 33: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/33.jpg)
TRANSACTIONS
Transaction tx = db.beginTx();try { ... tx.success();} finally { tx.finish();}
![Page 34: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/34.jpg)
SHOW ME THE CODE!
Start databaseMaak nodesMaak relatiesMaak lucene index
![Page 35: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/35.jpg)
TRAVERSINGTraversalDescription traversal =
new TraversalDescriptionImpl() .depthFirst() .uniqueness(Uniqueness.RELATIONSHIP_PATH);
Iterable<Path> paths = traversal.traverse(startNode);
Ron
Adres
Lindy
![Page 36: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/36.jpg)
ALGORITHMS
• find all paths
• find all simple paths
• find the shortest path
• Dijkstra algorithm
• The a* search algorithm
![Page 37: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/37.jpg)
DEMO!
Neo4j webconsoleCypher viewer: Friso van Vollenhovenhttps://github.com/friso/graphs
![Page 38: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/38.jpg)
Ron
S2
Webcommissie
CorjanMathieu
Dennis
player_of
player_of
coach_of
commission_member_of
commission_member_of
![Page 39: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/39.jpg)
GELEERDE LESSEN
• Blijf tekenen: Maak het netwerk visueel
• Maak proefopzetjes en refactor
• Pas node wrapping toe om het domein simpel te houden
• Typeer nodes
• gebruik BatchInsert voor veel data
![Page 40: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/40.jpg)
NODE WRAPPING
public interface Member { String getName();
void setName(String name);
// .....}
![Page 41: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/41.jpg)
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); }}
![Page 42: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/42.jpg)
NODE WRAPPING
public Team getMyTeam() { Relationship teamRelationship = getNode().getSingleRelationship(PLAYER_OF,
Direction.OUTGOING);
Node teamNode = teamRelationship.getEndNode();
return new Team(teamNode);}
![Page 43: Neo4 j, what else?](https://reader035.vdocument.in/reader035/viewer/2022062419/5577bec4d8b42a1c068b4e8e/html5/thumbnails/43.jpg)
Ron van [email protected]