Shutl delivers with Neo4j by addressing issues with their previous MySQL database including exponential growth of joins, complex unmaintainable code, and slowing API response times. They chose Neo4j as a graph database because relationships are explicitly stored, domain modeling is simplified, and performance remains constant with growth. Queries in Neo4j use the Cypher language which focuses on pattern matching rather than implementation details.
7. exponential growth of joins in mysql with added features
code base too complex and unmaintanable
api response time growing too large the more data was added
our fastest delivery was quicker then our slowest query!
problems with our previous attempt (v1):
Tuesday, 30 July 13
8. The case for graph databases:
relationships are explicit stored (RDBS lack relationships)
domain modelling is simpli鍖ed because adding new subgraphs
doesnt affect the existing structure and queries (additive model)
white board friendly
schema-less
db performance remains relatively constant because queries are
localized to its portion of the graph. O(1) for same query
traversals of relationships are easy and very fast
Tuesday, 30 July 13
9. What is a graph anyway?
Node 1 Node 2
Node 4
Node 3
a collection of vertices (nodes)
connected by edges (relationships)
Tuesday, 30 July 13
10. a short history: the seven bridges of K旦nigsberg (1735)
Leonard Euler
Tuesday, 30 July 13
11. directed graph
Node 1 Node 2
Node 4
Node 3
each relationship has a direction or
one start node and one end node
Tuesday, 30 July 13
12. property graph:
name:Volker
nodes contain properties (key, value)
relationships have a type and are always directed
relationships can contain properties too
name: Sam
:friends
name: Megan
:knows
since: 2005
name: Paul
:friends
:works_for
:knows
Tuesday, 30 July 13
16. Querying the graph: Cypher
declarative query language speci鍖c to neo4j
easy to learn and intuitive
enables the user to specify speci鍖c patterns to query for (something that looks like this)
inspired partly by SQL (WHERE and ORDER BY) and SPARQL (pattern matching)
focuses on what to query for and not how to query for it
switch from a mySQl world is made easier by the use of cypher instead of having to learn
a traversal framework straight away
Tuesday, 30 July 13
17. START: Starting points in the graph, obtained via index lookups or by element IDs.
MATCH: The graph pattern to match, bound to the starting points in START.
WHERE: Filtering criteria.
RETURN: What to return.
CREATE: Creates nodes and relationships.
DELETE: Removes nodes, relationships and properties.
SET: Set values to properties.
FOREACH: Performs updating actions once per element in a list.
WITH: Divides a query into multiple, distinct parts
cypher clauses
Tuesday, 30 July 13
18. an example graph
Node 1
me
Node 2
Steve
Node 3
Sam
Node 4
David
Node 5
Megan
me - [:knows] -> Steve -
[:knows] -> David
me - [:knows] -> Sam -
[:knows] -> Megan
Megan - [:knows] -> David
knows
knowsknows
knows
knows
Tuesday, 30 July 13