Date post: | 10-Jun-2015 |
Category: |
Technology |
Upload: | xebia-nederland-bv |
View: | 592 times |
Download: | 0 times |
NEO4J, WHAT ELSE?!Ron van Weverwijk
AGENDA
• Positionering binnen NoSql
• Waarom een Graph database?
• Neo4j
• Cypher
• Vragen?
VIER NOSQL CATEGORIEËN
KEY-VALUE STORE
COLUMN FAMILY (BIGTABLE)KEY-VALUE STORE
COLUMN FAMILY (BIGTABLE)
DOCUMENTDATABASES
KEY-VALUE STORE
COLUMN FAMILY (BIGTABLE)
DOCUMENTDATABASES GRAPH DATABASES
KEY-VALUE STORE
WAAR IS EEN GRAPHDATABASE GOED IN?
PageRank is gebouwd met 15 regels code!Bron:http://www.royans.net/arch/pregel-googles-other-data-processing-infrastructure/
WAAROM EEN GRAPHDATABASE?
WAAROM EEN GRAPHDATABASE?
WAAROM EEN GRAPHDATABASE?
Experiment: Hoe zijn 2 nodes verbonden?
• 1000 personen
• gemiddeld 50 relaties
• Zijn 2 personen verbonden met maximaal 4 stappen?
• Warme cache
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
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
NODES (VERTICES) RELATIONS (EDGES)
PROPERTIES OP NODES
type: persoonname: Ron
type: persoonname: Corjan
type: teamname: S2
GETYPEERDE RELATIES
type: persoonname: Ron
type: persoonname: Corjan
type: teamname: S2
speelt_in
coach_van
PROPERTIES OP RELATIES
type: persoonname: Ron
type: persoonname: Corjan
type: teamname: S2
speelt_in
coach_van
jaar : 2011
jaar : 2011
PROPERTIES
• Alle Java primitieven kunnen gebruikt worden:
• String
• boolean
• int
• double
• ...
SCHEMA-LESS DATABASE!=
DATABASE WITHOUT DESIGN
Doctor Who (Jim Webber)
FILEBASED
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 );
TRANSACTIONS
TRANSACTIONS
Transaction tx = db.beginTx();try { ... tx.success();} finally { tx.finish();}
SHOW ME THE CODE!
Start databaseMaak nodesMaak relatiesMaak lucene index
TRAVERSINGTraversalDescription traversal =
new TraversalDescriptionImpl() .depthFirst() .uniqueness(Uniqueness.RELATIONSHIP_PATH);
Iterable<Path> paths = traversal.traverse(startNode);
Ron
Adres
Lindy
ALGORITHMS
• find all paths
• find all simple paths
• find the shortest path
• Dijkstra algorithm
• The a* search algorithm
DEMO!
Neo4j webconsoleCypher viewer: Friso van Vollenhovenhttps://github.com/friso/graphs
Ron
S2
Webcommissie
CorjanMathieu
Dennis
player_of
player_of
coach_of
commission_member_of
commission_member_of
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
NODE WRAPPING
public interface Member { String getName();
void setName(String name);
// .....}
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); }}
NODE WRAPPING
public Team getMyTeam() { Relationship teamRelationship = getNode().getSingleRelationship(PLAYER_OF,
Direction.OUTGOING);
Node teamNode = teamRelationship.getEndNode();
return new Team(teamNode);}
Ron van [email protected]