43
NEO4J, WHAT ELSE?! Ron van Weverwijk

Neo4 j, what else?

Embed Size (px)

Citation preview

Page 1: Neo4 j, what else?

NEO4J, WHAT ELSE?!Ron van Weverwijk

Page 2: Neo4 j, what else?

AGENDA

• Positionering binnen NoSql

• Waarom een Graph database?

• Neo4j

• Cypher

• Vragen?

Page 3: Neo4 j, what else?

VIER NOSQL CATEGORIEËN

Page 4: Neo4 j, what else?
Page 5: Neo4 j, what else?

KEY-VALUE STORE

Page 6: Neo4 j, what else?

COLUMN FAMILY (BIGTABLE)KEY-VALUE STORE

Page 7: Neo4 j, what else?

COLUMN FAMILY (BIGTABLE)

DOCUMENTDATABASES

KEY-VALUE STORE

Page 8: Neo4 j, what else?

COLUMN FAMILY (BIGTABLE)

DOCUMENTDATABASES GRAPH DATABASES

KEY-VALUE STORE

Page 9: Neo4 j, what else?
Page 10: Neo4 j, what else?
Page 11: Neo4 j, what else?

WAAR IS EEN GRAPHDATABASE GOED IN?

Page 13: Neo4 j, what else?
Page 14: Neo4 j, what else?

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?
Page 16: Neo4 j, what else?
Page 17: Neo4 j, what else?

WAAROM EEN GRAPHDATABASE?

Page 18: Neo4 j, what else?

WAAROM EEN GRAPHDATABASE?

Page 19: Neo4 j, what else?

WAAROM EEN GRAPHDATABASE?

Page 20: Neo4 j, what else?

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?

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?

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?

NODES (VERTICES) RELATIONS (EDGES)

Page 24: Neo4 j, what else?

PROPERTIES OP NODES

type: persoonname: Ron

type: persoonname: Corjan

type: teamname: S2

Page 25: Neo4 j, what else?

GETYPEERDE RELATIES

type: persoonname: Ron

type: persoonname: Corjan

type: teamname: S2

speelt_in

coach_van

Page 26: Neo4 j, what else?

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?

PROPERTIES

• Alle Java primitieven kunnen gebruikt worden:

• String

• boolean

• int

• double

• ...

Page 28: Neo4 j, what else?

SCHEMA-LESS DATABASE!=

DATABASE WITHOUT DESIGN

Page 29: Neo4 j, what else?

Doctor Who (Jim Webber)

Page 30: Neo4 j, what else?

FILEBASED

Page 31: Neo4 j, what else?

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?

TRANSACTIONS

Page 33: Neo4 j, what else?

TRANSACTIONS

Transaction tx = db.beginTx();try { ... tx.success();} finally { tx.finish();}

Page 34: Neo4 j, what else?

SHOW ME THE CODE!

Start databaseMaak nodesMaak relatiesMaak lucene index

Page 35: Neo4 j, what else?

TRAVERSINGTraversalDescription traversal =

new TraversalDescriptionImpl() .depthFirst() .uniqueness(Uniqueness.RELATIONSHIP_PATH);

Iterable<Path> paths = traversal.traverse(startNode);

Ron

Adres

Lindy

Page 36: Neo4 j, what else?

ALGORITHMS

• find all paths

• find all simple paths

• find the shortest path

• Dijkstra algorithm

• The a* search algorithm

Page 37: Neo4 j, what else?

DEMO!

Neo4j webconsoleCypher viewer: Friso van Vollenhovenhttps://github.com/friso/graphs

Page 38: Neo4 j, what else?

Ron

S2

Webcommissie

CorjanMathieu

Dennis

player_of

player_of

coach_of

commission_member_of

commission_member_of

Page 39: Neo4 j, what else?

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?

NODE WRAPPING

public interface Member { String getName();

void setName(String name);

// .....}

Page 41: Neo4 j, what else?

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?

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?

Ron van [email protected]