Speakers: Michael Hunger (Neo Technology) and Josh Long (Pivotal)
Spring Data Neo4j 3.0 is here and it supports Neo4j 2.0. Neo4j is a tiny graph database with a big punch. Graph databases are imminently suited to asking interesting questions, and doing analysis. Want to load the Facebook friend graph? Build a recommendation engine? Neo4j's just the ticket. Join Spring Data Neo4j lead Michael Hunger (@mesirii) and Spring Developer Advocate Josh Long (@starbuxman) for a look at how to build smart, graph-driven applications with Spring Data Neo4j and Spring Boot.
7. Trends
in
BigData
/
NOSQL
1. increasing data size (big data)
•“Every 2 days we create as much information as
we did up to 2003” - Eric Schmidt
2. increasingly connected data (graph data)
•for example, text documents to html
3. semi-structured data
•individualization of data, with common sub-set
4. architecture - a facade over multiple services
10. EvoluJon
of
Web
Search
Pre-1999
WWW Indexing
Atomic Data
9
1999 - 2012
Google Invents
PageRank
Simple
Connected Data
2012-?
Google Launches the
Knowledge Graph
Rich
Connected Data
11. EvoluJon
of
Online
Job
Search
2010-11
Resume Scoring
Atomic Data
2011-12
Social Job Search
Connected Data
X
15. PracJcal
Cypher
// Server 1 Outage!
MATCH (n)<-[:DEPENDS_ON*]-(upstream)!
WHERE n.name = "Server 1"!
RETURN upstream!
X
upstream
{name:"Webserver VM"}
{name:"Public Website"}
16. PracJcal
Cypher
// Public website dependencies!
MATCH (n)-[:DEPENDS_ON*]->(downstream)!
WHERE n.name = "Public Website"!
RETURN downstream!
!
X
downstream
{name:"Database VM"}
{name:"Server 2"}
{name:"SAN"}
{name:"Webserver VM"}
{name:"Server 1"}
17. PracJcal
Cypher
// Most depended on component!
MATCH (n)<-[:DEPENDS_ON*]-(dependent)!
RETURN n, !
count(DISTINCT dependent) !
AS dependents!
ORDER BY dependents DESC!
LIMIT 1
X
n dependents
{name:"SAN"
}
6
28. 22
Properties (key value pairs)
+ Indexes (finding start points)
Emil
Andrés
Lars
Johan
Allison
Peter
Michael
Tobias
Andreas
IanMica
Delia
knows
knows
knows
knows
knows
knows
knows
knows
knows
knowsMica
knowsknows
Mica
Delia
knows
The
Property
Graph
Model
Labels (categorize nodes)
Nodes
Relationships
29. • a sample social graph
–with ~1,000 persons
• average 50 friends per person
• pathExists(a,b) limited to depth 4
• caches warmed up to eliminate disk I/O
# persons query time
Relational database 1.000 2000ms
Neo4j 1.000 2ms
Neo4j 1.000.000
But
what
about
Performance?
33. Translate
to
Cypher
27
MATCH (person:Person)-[:IS_FRIEND_OF]->(friend),
(friend)-[:LIKES]->(restaurant),
(restaurant)-[:LOCATED_IN]->(loc:Location),
(restaurant)-[:SERVES]->(type:Cuisine)
!
WHERE person.name = 'Philip' AND loc.location='New York' AND
type.cuisine='Sushi'
!
RETURN restaurant.name
* Cypher query language examplehttp://maxdemarzi.com/?s=facebook
36. 4
- A Graph Database:
- a schema-free Property Graph
- perfect for complex, highly connected data
- A Graph Database:
- reliable with real ACID Transactions
- scalable: billions nodes and relationships
- fast with millons traversals / second
- Server with REST API, or Embeddable on the JVM
- higher-performance with High-Availability (read scaling)
(Neo4j)-‐[:IS_A]-‐>(Graph
Database)
37. 4
–Declarative query language
–Describe what you want, not how
–Based on pattern matching
–First level support for graph concepts and collections
MATCH (tag:Tag {tag:"springdata"})
MATCH (poster)-[:POSTED]->(tweet)<-[:TAGGED]-(tag)
WHERE poster.age > 18
RETURN poster.name, collect(tweet.date) as dates, count(*)
ORDER BY count(*) DESC
LIMIT 10
Cypher
-‐
A
Graph
Query
Language
38.
39. Spring
Data
• Easy access to NoSQL databases
for Spring developers
• Consistent APIs and concepts
– configuration, repositories, object-mapping
– don't hide power of each database
• Shared common infrastructure
• Support for several NOSQL approaches
(Neo4j, MongoDB, Redis, Hadoop, …)
33
http://projects.spring.io/spring-data
40. Spring
Data
Neo4j
• Uses annotations to define graph entities
• Entity state backed by graph database
• Two modes of Object Graph Mapping
• simple POJO Graph Mapping
• advanced, seamless AspectJ backed Mapping
• SD-Repositories support
• Template, Config, Lifecycle
• Neo4j Server Support
34
http://projects.spring.io/spring-data-neo4j
41. Spring
Data
News
• Spring Data Dijkstra Release is Today
• Includes Spring Data Neo4j 3.1.GA
35
http://projects.spring.io/spring-data
42. Sample
Spring
Data
Neo4j
+
Boot
ApplicaJon
36
github.com/jexp/sdn-twitter-boot
• uses Spring Social (minimally)
• Simple Domain:Tweets, Users,Tags
• connected Entities
• Repositories, Service
• Standalone Application with spring-boot
• either embedded Neo4j-Database, or
• local Neo4j-Server
44. Spring
Data
Book
• Written by Spring Data Leads
• Covers most SD projects
38
50 e-book copies available for you!
45. • Wednesday, Oct. 22 - graphconnect.com
• Only conference focused on graphDBs
and applications powered by graphs
• Register now for $99 Alpha Geek Passes,
Neo4j training courses additional $99
GRAPHCONNECT!
SF 2014
49. Whiteboard
it
-‐
abstract
:Tweet
MENTIONS
:Tweet:User
:User
POSTED
POSTED
:TagTAGGED
TAGGED
:Tag
TAG
G
ED
50. Whiteboard
friendly
-‐
example
Attending
the #SDN
#Neo4j
meetup
MENTIONS
Looking
forward to my
@peterneub
POSTED
POSTED
#Neo4jTAGGED
TAGGED
#SDN
TAG
G
ED
52. Spring
Data
๏Spring Data: Pivotal initiative to give Spring
developers easy access to the emerging world
of NOSQL
๏Build on top of common infrastructure
๏Spring Data Neo4j is the integration library for
Neo4j
๏http://projects.spring.io/spring-data
๏Support for other NOSQL approaches
53. Spring
Data
Neo4j
๏The brain child of Rod Johnson & Emil Eifrém
•Wrote functional initial prototype
•Developed by Neo Technology and
SpringSource teams
๏Uses annotations to define graph entities
๏Entity state backed by graph database
๏Two modes of Object Graph Mapping
•simple POJO Graph Mapping
54. public class Tag {
private final Node underlyingNode;
!
Tag( final Node node ) {
underlyingNode = node;
}
!
public Node getUnderlyingNode() {
return underlyingNode;
}
!
public final String getTag() {
return (String) underlyingNode.getProperty( “tag”
);
Classic
Neo4j
domain
class
56. Defining
enJty
classes
•@NodeEntity
• Represents a node in the graph
• Fields saved as properties on node
• Object references stored as relationships
between nodes
• Instantiated using Java ‘new’ keyword, like any
POJO
• Also returned by lookup mechanisms
• Type information stored in the graph as
57. Defining
enJty
classes
•@RelationshipEntity
• Represents a relationship in the graph
• Fields saved as properties on relationship
• Special fields for start- and end-nodes
• Only returned by lookup methods
58. !
@NodeEntity
public class Tweet {
@GraphId private Long id;
!
@Indexed(unique=true) Long tweetId;
!
String text;
!
@Fetch User sender; // eager loading
!
@RelatedTo(type="TAGGED") Collection<Tag> tags;
Tweet
domain
class
59. 53
Interface based Repositories
๏based on Repository infrastructure in Spring Data Commons
๏just define the interface and the namespace
configuration
๏provide out-of-the-box support for
•CRUD-Operations
•Index-Lookups
•Traversal-Execution
•Annotated Graph-Queries (Cypher, Gremlin)
61. 55
Neo4j-Template (I)
๏well known Spring Template Pattern
๏Resource / Transaction Management
๏Convenience Methods
๏Nodes and Entities handling & conversion
๏Fluent Query Result Handling
๏Works also via REST with Neo4j-Server
๏Exception Translation
62. 56
REST-Client-Support
!
๏drop-in replacement for the embedded GraphDatabase
๏works transparently with POJO-Entity-Mapping and
Neo4j-Template
@EnableNeo4jRepositories
@Configuration
class MyConfig extends Neo4jConfiguration {
@Bean
public GraphDatabaseService graphDatabaseService() {
return new SpringRestGraphDatabase(URL);
}
}
63. 57
Cypher Query Language
๏Declarative query language
•Describe what you want, not how
•Based on graph patterns
•Expressive - easy to read and learn
•Powerful
‣Read and write operations
‣Support for graph concepts
64. 58
Cypher Query Language
๏Write-Queries create graph structures
•Add follows to a user
•Create a complete tweet.
MERGE (user:User {user:"starbuxman"})
FOREACH (name in ["ah3rz","springsource","mesirii"] |
MERGE (other:User {user:name})
MERGE (user)-[:FOLLOWS]->(other))
!
MATCH (user:User {name:"mesirii"})
CREATE (tweet:Tweet {text:"Love to work with
@starbuxman on #SpringData #Neo4j demos"})<-
[:POSTED]-(user))
FOREACH (tag in ["SpringData","Neo4j"] |
MERGE (t:Tag {tag:tag})
MERGE (tweet)-[:TAGGED]->(t))
65. 59
Cypher Query Language
๏Read-Queries answer use-case questions
•Whom should I follow?
•Which tags where often used with "java"?
MATCH (me:User {user:"starbuxman"})
MATCH (me)-[:POSTED]->(tweet)-[:MENTIONS]->(user)
WHERE not (me)-[:FOLLOWS]-(user)
RETURN user
!
MATCH (tag:Tag {tag:"java"})
MATCH (tag)<-[:TAGGED]-(tweet)-[:TAGGED]->(co_tag)
RETURN co_tag.tag, COUNT(*) as cnt
ORDER BY cnt DESC LIMIT 10
67. 61
Spring Boot
๏Rapid Application Development
๏Like a dynamic programming enviroment but in
Java & Spring
๏spring-boot-starter
๏spring-data, spring-data-neo4j, spring-data-
rest
๏web, thymeleaf
68. 62
Spring Data Neo4j 3.x
๏Support for Neo4j 2.x
๏Support for Labels
๏Support for "optional schema"
๏Indexes + Constraints
๏New Cypher Syntax
๏Supports geospatial primitives
70. 64
Todays Coding Exercise
๏uses Spring Social (minimally)
๏Simple Domain:Tweets, Users,Tags
•connected Entities
•Repositories, Service
๏Standalone Application with spring-boot
•either embedded Neo4j-Database, or
72. X
Spring Data Neo4j Guidebook
“Good Relationships”
๏Spring Data Neo4j comes with a great Guide
Book, featuring:
•Forewords by Rod Johnson and Emil Eifrem
•An easy to read, narrative tutorial
walkthrough for
cineasts.net
“I’m excited about Spring Data Neo4j.... Spring Data Neo4j makes
working with Neo4j amazingly easy, and therefore has the potential to
make you more successful as a developer.”
Rod Johnson, founder of Spring
74. 66
O‘Reilly Spring Data Book
„Modern Data Access for Enterprise
•book by the Spring Data project leads
•introduction to Spring Data & SD-repositories
•covers all subprojects
•e-book available forYOU,
75. ConJnue
here
๏See the Spring Data Neo4j site for more info:
http://spring.neo4j.org
๏Again, don’t miss our guidebook on Spring Data
Neo4j
published by InfoQ also printed
http://bit.ly/sdn-book
๏All about Neo4j:
http://neo4j.org
๏Neo4j & SDN videos and webinars:
http://video.neo4j.org
๏local Neo4j meetup groups
http://neo4j.meetup.com
76. • 5/13 - How eBay Now (Shutl) delivers even faster using
Neo4j at eBay in San Jose
• 5/20 - WEBINAR: Data-Driven Applications with Spring
and Neo4j
• 5/23 - Let Me Graph That For You with Ian Robinson, co-
author of Graph Databases, at Hack Reactor in SF
• 5/28 - GraphPANEL Silicon Valley at AOL in Palo Alto
• And more at: meetup.com/graphdb-sf
UPCOMING EVENTS
77. 68
ThankYou!
Feel free to reach out with questions on
!
•Twitter @starbuxman, @mesirii,
•Spring-Forums,
•Neo4j-Google-Group
•Stack-Overflow