Neo4 j, what else?

Preview:

Citation preview

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 Weverwijkrvanweverwijk@xebia.com

Recommended