betting the company on a graph database - aseem kishore @ graphconnect boston 2013
DESCRIPTION
TRANSCRIPT
![Page 1: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/1.jpg)
BETTING THE COMPANYBETTING THE COMPANY
(LITERALLY) ON A
GRAPH DATABASEGRAPH DATABASE
TIPS, TRICKS, AND LESSONS LEARNED
Aseem KishoreJan 2013
![Page 5: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/5.jpg)
![Page 7: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/7.jpg)
![Page 8: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/8.jpg)
![Page 9: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/9.jpg)
START user=node(1), other=node(2)MATCH (user) -[r1:has|wants]-> (thing) <-[r2:has|wants]- (other)WHERE TYPE(r1) <> TYPE(r2)RETURN TYPE(r1), TYPE(r2), thing
![Page 10: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/10.jpg)
![Page 12: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/12.jpg)
SO…
JUST WHAT IS A
GRAPH DATABASEGRAPH DATABASE?
![Page 13: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/13.jpg)
![Page 14: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/14.jpg)
# adjacency list:nodes = List<Node>neighbors = Map<Node, List<Node>>neighbors[node1].add(node2)
# adjacency matrix:nodes = List<Node>connections = Map<Node, Map<Node, bool>>connections[node1][node2] = true
![Page 15: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/15.jpg)
![Page 16: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/16.jpg)
![Page 17: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/17.jpg)
![Page 18: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/18.jpg)
“ By definition, a graph database is any storagesystem that provides index-free adjacency. ”
“ This means that every element contains adirect pointer to its adjacent element and noindex lookups are necessary. ”
![Page 19: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/19.jpg)
QUERYING
1. Start somewhere
2. Traverse elsewhere
![Page 20: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/20.jpg)
QUERYING IN NEO4J
1. Start somewhereRoot nodeID directly (file offset)
Lucene index
2. Traverse elsewhere
Traversal APIsCypher patternsBuilt-in graph algos (Djikstra, A*, etc.)
![Page 21: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/21.jpg)
NEO4J USAGE
Embedded mode (Java API)
Server mode (REST API)
Cypher query language (both)
![Page 22: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/22.jpg)
OUR USAGE
NODE.JS
+
REST API
+
CYPHER
![Page 24: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/24.jpg)
NEO4J EDITIONS
Community editionSingle instanceOffline backup
Advanced editionMeh
Enterprise editionMulti-instance cluster!
Online backup!
![Page 25: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/25.jpg)
NEO4J SCALING
Master-slave replication
Cache-based sharding
Feature-based polyglot'ing
64B limit on nodes, rels, propsBut can be easily upped; just flipping some bits100 props/node (high) ⇒ 640M nodes
![Page 26: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/26.jpg)
OKAY...
LET'S TALK ABOUT
WHAT WE LEARNEDWHAT WE LEARNED
![Page 27: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/27.jpg)
![Page 28: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/28.jpg)
WHAT WE LEARNED
Unique, expressive relationship types
![Page 29: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/29.jpg)
![Page 30: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/30.jpg)
WHAT WE LEARNED
Unique, expressive relationship types
Cache stats where possible
![Page 31: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/31.jpg)
![Page 32: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/32.jpg)
WHAT WE LEARNED
Unique, expressive relationship types
Cache stats where possible
Capture history through event nodes
![Page 33: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/33.jpg)
![Page 34: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/34.jpg)
WHAT WE LEARNED
Unique, expressive relationship types
Cache stats where possible
Capture history through event nodes
First-class objects ⇒ nodes, not rels
![Page 35: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/35.jpg)
![Page 36: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/36.jpg)
WHAT WE LEARNED
Unique, expressive relationship types
Cache stats where possible
First-class objects ⇒ nodes, not rels
Capture history through event nodes
Connected data ⇒ nodes, not props
![Page 37: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/37.jpg)
![Page 38: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/38.jpg)
WHAT WE LEARNED
Unique, expressive relationship types
Cache stats where possible
First-class objects ⇒ nodes, not rels
Capture history through event nodes
Connected data ⇒ nodes, not props
Maintain linked lists for O(1) queries
![Page 39: Betting the Company on a Graph Database - Aseem Kishore @ GraphConnect Boston 2013](https://reader034.vdocuments.us/reader034/viewer/2022051412/54c6aea14a795938788b4569/html5/thumbnails/39.jpg)
NEO4J ROADMAP
Overhaul of indexing API
Relationship type grouping
Socket and/or binary protocol
Automatic sharding?