graphaware framework intro
DESCRIPTION
GraphConnect San Francisco 2014TRANSCRIPT
GraphAware Frameworkadvanced Neo4j use cases
!!
Michal Bachman @graph_aware
SAN FRANCISCO | 10.22.2014
powered by
GraphAwareTM
GraphAwareTM
Advanced Use Cases
GraphAware Framework (implementing advanced functionality)
GraphAware Framework Modules (built by us, used by you)
About this Talk
GraphAwareTM
Custom APIs
Transaction-Driven Behaviour
Asynchronous Computation
Advanced Use Cases
GraphAwareTM
Custom APIs
Transaction-Driven Behaviour
Asynchronous Computation
Advanced Use Cases
GraphAwareTM
a.k.a. “unmanaged extensions”
“Stored procedures” on steroids
Implemented and tested (!) in Java
Deployed with Neo4j (same lifecycle)
Custom APIs - What?
GraphAwareTM
Access to native Neo4j API (Java)
Performance
Locking
Too complex for Cypher
Functions missing in Cypher
Custom input/output format
Limit to read-only
Code to Data
…
Custom APIs - Why?
GraphAwareTM
GraphAware Framework makes it extremely easy to build, test, and deploy custom Neo4j APIs.
Custom APIs (How?)
GraphAwareTM
pure Spring MVC
test with GraphUnit
drop to plugins
restart Neo
Custom APIs - How? (GraphAware)
GraphAwareTM
representing time in Neo4j
storing and querying time series data
GraphAware TimeTree
Custom APIs - Example
from: "..@.."to: "..@.."text: "…"
value: 24
Day
SENT_ON
value: 23
Day
value: 22
Day
NEXTNEXT
value: 4
Month
value: 5
Month
NEXTFIRST
LAST
CHILD
CHILD
CHILD
value: 2014
Year
FIRSTLAST
CHILD
CHILD
TimeTreeRoot
CHILD
FIRST
LAST
GraphAwareTM
TimeTree Demo
GraphAwareTM
Custom APIs
Transaction-Driven Behaviour
Asynchronous Computation
Advanced Use Cases
GraphAwareTM
Neo4j is fully ACID
“Triggers” on steroids
Implemented and tested (!) in Java
Transaction-Driven Behaviour - What?
GraphAwareTM
Integrations with other systems
In-graph indexing
Additional modifications
Schema enforcement
Transaction-Driven Behaviour - Why?
GraphAwareTM
GraphAware Framework makes it extremely easy to build, test, and deploy custom Transaction-Driven functionality.
Transaction-Driven Behaviour (How?)
GraphAwareTM
Tracking changes in your graph (demo)
Assigning a UUID to each node (demo)
Defining and enforcing constraints (wip)
Auditing
…
Transaction-Driven Behaviour - Examples
GraphAwareTM
Transaction-Driven Behaviour - Demo
GraphAwareTM
Custom APIs
Transaction-Driven Behaviour
Asynchronous Computation
Advanced Use Cases
GraphAwareTM
Neo4j is primarily OLTP
Requests drive transactions
How about background computation?
Asynchronous Computation - What?
GraphAwareTM
Interesting graph algorithms
Expensive in real-time
Can be approximate
Can be approximated
There are quiet periods / dedicated slaves
Asynchronous Computation - Why?
GraphAwareTM
GraphAware Framework makes it possible to build, test, and deploy functionality executed in the background during quiet periods.
Asynchronous Computation (How?)
GraphAwareTM
Page Rank
Recommendations
Similarities
Centralities
Statistics
…
Asynchronous Computation - Examples
GraphAwareTM
Asynchronous Computation - Demo
GraphAwareTM
GraphAware Framework makes it easy to build, test, and deploy generic as well as domain-specific functionality for Neo4j.
GraphAware Framework
GraphAwareTM
TimeTree
Algorithms
ChangeFeed
UUID
NodeRank
GraphAware Framework
GraphAwareTM
GraphUnit & RestTest
RelCount
WarmUp
Schema (wip)
Recommendation Engine (wip)
GraphAware Framework
GraphAwareTM
Open Source (GPL)
Active
Production Ready
Github (http://github.com/graphaware)
Our Web (http://graphaware.com)
Maven Central
GraphAware Framework
GraphAwareTM
Try it
Give us feedback
Contribute
Build Own Modules
Get in touch for consultancy / support
[email protected] / @graph_aware
GraphAware Framework
GraphAwareTM
www.graphaware.com @graph_aware @bachmanm
Thank You!