Combine Spring Data Neo4j and Spring Boot to quickl

Post on 26-Jan-2015

110 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.

Transcript

S P R I NG   DATA   N EO 4 J  

github.com/jexp/sdn-­‐twi5er-­‐boot

WI TH S P R I NG   BOOT

Michael  Hunger  Josh  Long  

@mesirii  @starbuxman    

Twi5er  Graph

To become part of todays Twitter-Graph

✓your attendance

✓questions

✓remarks

✓....

please tweet with #springdata #neo4j

1. NOSQL, Connected Data,

2. Graph Databases and Neo4j

3. Spring Data Neo4j

4. Twitter-Graph - Sample App

5. Summary

6. Q & A

Agenda

NOSQL  -­‐  Not  Only  SQL

NOSQL

RelationalGraph

DocumentKeyValue

Riak

Column oriented

Redis

Cassandra

Mongo

Couch

Neo4j

MySQL Postgres

NOSQL  Databases

RDBMS

Den

sity

~=

Com

plex

ity

Column Family

Volume ~= Size

Key-Value Store

Document Databases

Graph Databases

90% of

use cases

Volume  vs.  Complexity

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

Graph  Databases

8

Graph  Database  Use  Cases

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

EvoluJon  of  Online  Job  Search

2010-11 Resume Scoring

Atomic Data

2011-12 Social Job Search

Connected Data

X

Social  Network

10

(Network)  Impact  Analysis

11

PracJcal  Cypher  

CREATE !! (crm {name:"CRM"}),!! (dbvm {name:"Database VM"}),!! (www {name:"Public Website"}),!! (wwwvm {name:"Webserver VM"}),!! (srv1 {name:"Server 1"}),!! (san {name:"SAN"}),!! (srv2 {name:"Server 2"}),!!! (crm)-[:DEPENDS_ON]->(dbvm),!! (dbvm)-[:DEPENDS_ON]->(srv2),!! (srv2)-[:DEPENDS_ON]->(san),!! (www)-[:DEPENDS_ON]->(dbvm),!! (www)-[:DEPENDS_ON]->(wwwvm),!! (wwwvm)-[:DEPENDS_ON]->(srv1),!! (srv1)-[:DEPENDS_ON]->(san)!

X

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"}

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"}

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

12

Route  Finding

RecommendaJons

13

LogisJcs

14

Access  Control

15

Workflow  Management

16

Fraud  Analysis

17

4

Facebook Graph Search

Everyone  is  Talking  about  Graphs

19

And  Everyone  is  Using  them

Graph  Databases

21

user accountuser_account

You  know  RelaJonal

22

Properties (key value pairs)

+ Indexes (finding start points)

Emil

Andrés

Lars

Johan

Allison

Peter

Michael

Tobias

Andreas

IanMica

Delia

knows

knows

knowsknows

knows

knows

knows

knows

knows

knowsMica

knowsknowsMica

Delia

knows

The  Property  Graph  Model

Labels (categorize nodes)

Nodes

Relationships

• 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?

4

Andreas Peter

Emil

Allison

knows

knows knows

knows

Whiteboard  Friendlyness

Andreas

How  do  I  query  this  Graph?

MATCH (poster:User {name:"Andreas"}) -[:POSTED]->(tweet) -[:MENTIONED]->(user)RETURN distinct user.name

Example:  Graph  Search!

26

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

28

Execute  the  Query

4

Neo4j  -­‐  A  Graph  Database?

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)

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 > 18RETURN poster.name, collect(tweet.date) as dates, count(*)ORDER BY count(*) DESCLIMIT 10

Cypher  -­‐  A  Graph  Query  Language

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

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

Spring  Data  News

• Spring Data Dijkstra Release is Today • Includes Spring Data Neo4j 3.1.GA

35

http://projects.spring.io/spring-data

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

Domain  Model

37

:Tweet

MENTIONS

:Tweet:User

:User

POSTEDPOSTED

:TagTAGGED

TAGGED

:Tag

TAGGED

Spring  Data  Book

• Written by Spring Data Leads • Covers most SD projects

38

50 e-book copies available for you!

• 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

• Visit http://neo4j.com

• Learn Online http://graphacademy.com

• Spring Data Neo4j http://spring.io/projects

LEARN MORE!ABOUT NEO4j

41

Thank  You!QuesDons?

@starbuxman  |  @mesirii

Introducing The Twitter-

Whiteboard  it  -­‐  abstract

:Tweet

MENTIONS

:Tweet:User

:User

POSTEDPOSTED

:TagTAGGED

TAGGED

:Tag

TAGGED

Whiteboard  friendly  -­‐  example

Attending the #SDN #Neo4j meetup

MENTIONS Looking

forward to my

@peterneub

POSTEDPOSTED

#Neo4jTAGGED

TAGGED

#SDN

TAGGED

Spring Data

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

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

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

!!!! ! @Indexed(unique = true)

!!!!@NodeEntitypublic class Tag { @GraphId private Long id; private String tag;}

Spring  Data  Neo4j  domain  class

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

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

!@NodeEntitypublic 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

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)

Repositoriesinterface TweetRepository extends GraphRepository<Tweet> { Tweet findByTweetId(String id); Collection<Tweet> findByTagsTag(String tag);}@EnableNeo4jRepositories("org.neo4j.twitter_graph.repositories")@Configuration

@Controllerpublic class TwitterController { @Autowired TweetRepository tweetRepository;! @RequestMapping(value = "/tweet/{id}",...) public String show(Model model, @PathVariable String id) { Tweet tweet = tweetRepository.findByTweetId(id); model.addAttribute("tweet", tweet); return "/tweet/show";

54

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

56

REST-Client-Support

!

๏drop-in replacement for the embedded GraphDatabase

๏works transparently with POJO-Entity-Mapping and Neo4j-Template

@EnableNeo4jRepositories@Configurationclass MyConfig extends Neo4jConfiguration { @Bean public GraphDatabaseService graphDatabaseService() { return new SpringRestGraphDatabase(URL); } }

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

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))

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 cntORDER BY cnt DESC LIMIT 10

Spring Data NEW

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

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

63

Coding the Twitter-

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

65

Demo Time

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

http://cineasts.net

Check Out: http://spring.neo4j.org/tutorial

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 for YOU,

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 printedhttp://bit.ly/sdn-book

๏All about Neo4j: http://neo4j.org

๏Neo4j & SDN videos and webinars: http://video.neo4j.org

๏ local Neo4j meetup groupshttp://neo4j.meetup.com

• 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

68

Thank You!Feel free to reach out with questions on !•Twitter @starbuxman, @mesirii, •Spring-Forums, •Neo4j-Google-Group •Stack-Overflow

top related