SlideShare a Scribd company logo
1 of 34
Download to read offline
GraphAware
TM
Building High Performance Applications

with Spring Data Neo4j 4
Vince Bickers, GraphAware
graphaware.com
@graph_aware
Agenda
● A bit about Neo4j and the Spring Data project
● A brief history of SDN
● SDN 4: Spring Data + Standalone Java OGM
● Conference Demo
o Data model
o Code
o Live demo!
● Roadmap
● Q & A
Neo4j is a Graph Database
•Nodes & Edges (Relationships)
•Index-free adjacency means super-fast traversals
•Embedded Client and Remote Server
•Schema-flexible!
•Cypher Query Language
When worlds collide…
The impedance mismatch


Spring Data
•Most active Spring Project
•Consistent APIs to access both RDBMS and NoSQL stores
•JPA, Neo4j, MongoDB, Redis, CouchBase…
•Convenient abstractions for Spring developers
Quick History of SD-Neo4j
● SDN 0.x - Rod and Emil wrote it, started Spring Data efforts
● SDN 1.x - Embedded Neo4j, Object Mapping, Templates
● SDN 2.x - Neo4j Server, SD-Repositories
● SDN 3.x - Neo4j 2.x with Label + Schema Index Support, etc.
Now… Spring Data Neo4j 4.0
● New and Shiny!
o Complete rewrite
o Neo4j Server only (for now, at least)
o Sympathetic to typical business use cases
o And … not just for Spring developers!
Spring Data Neo4j 4 - Progress
● Development started Sep 2014
● Milestone 1 released end Mar 2015
● RC1 end-May 2015
● GA … mid-June 2015

Spring Data + Separate OGM
● Standalone Java OGM
● Spring+
o Template methods
o Transactions
o Repositories
o Queries
o Exception Translation
o Conversion Services
Approach
● Constraint: Cypher over HTTP
● Solution: Focus on performance!
Core OGM - Features
● "Vampire" Metadata scanning (no reflection!)
● Optional annotations
● Mapping contexts scoped to “conversational” lifetimes:
o Application,
o HTTP session,
o HTTP request, etc.
● "Smart" object-mapping
● Variable-depth persistence
Variable-depth persistence
If you're interested in loading this...
...you're often really interested in this
Variable-depth persistence
If your domain objects are connected….





















…you should be able to save them all at once - from any object.
Conference Application
Spring Data Neo4j 4.0
Spring Boot
Angular.js

Application architecture
Straightforward Spring Boot application:
● RESTControllers
● … depending on Services
● …... depending on Spring Repositories
● to persist POJO Entity classes

Entities and Relationships
Entities (Labels)
● Speaker
● Conference
● Track
● Talk (Session)
● Timeslot

Relationships
● PRESENTS
● REGISTERED_FOR
● IN_TRACK
● HAS_TRACK
● AT_TIMESLOT
Conference Graph Model
Speaker
Conference
Track
Session
Timeslot
PRESENTS
REGISTERED_FORHAS_TRACK
IN_TRACKAT_TIME_SLOT
Preparing the data - CQL
create (conference:Conference {name : 'GraphConnect 2015'})
create (track1:Track {name : 'Technical Track'})
create (track2:Track {name : 'Business Track'})
create (track3:Track {name : 'Practitioner Track'})
create (track4:Track {name : 'Beginner Track'})
create (conference)<-[:REGISTERED_FOR]-(long:Speaker {name : 'Josh Long'})
create (conference)<-[:REGISTERED_FOR]-(gonzalez:Speaker {name : 'Ignasi Gonzalez'})
create (conference)<-[:REGISTERED_FOR]-(lopez:Speaker {name : 'Ivan Lopez'})
create (conference)<-[:REGISTERED_FOR]-(rodriguez:Speaker {name : 'Anton Rodriguez'})
…etc
All the data loaded…
Configuration: Spring Boot
@SpringBootApplication
@Import(PersistenceConfig.class)
public class ConferenceApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(ConferenceApplication.class);
app.setShowBanner(false);
app.run(args);
}
}
Configuration: Persistence
@Configuration

@EnableNeo4jRepositories(basepackages="app.conference.repository")

@EnableTransactionManagement
public class PersistenceConfig extends Neo4jConfiguration {
@Bean public Neo4jServer neo4jServer() {

return new RemoteServer("http://localhost:7474");

}
@Bean public SessionFactory getSessionFactory() {

return new SessionFactory("app.conference.domain");

}
@Bean @Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)

public Session getSession() throws Exception {

return super.getSession();

}

}
Entities: Abstract Entity
@JsonIdentifyInfo(generator=JSOGGenerator.class)
public abstract class Entity {


@JsonProperty("id")

@GraphId

private Long id;
private String name;
}
Entities: Speaker


public class Speaker extends Entity {

@Relationship(type="PRESENTS")

private Set<Talk> talks;

}
Entities: Talk
@NodeEntity(label="Session")
public class Talk extends Entity {

@Relationship(type="AT_TIMESLOT")

private Timeslot timeslot;
@Relationship(type="IN_TRACK")

private Track track;
@Relationship(type="PRESENTS", direction=Relationship.INCOMING) 

private Set<Speaker> presenters;
}
Repositories
interface SpeakerRepository extends GraphRepository<Speaker> {


@Query("MATCH(s:Speaker)-[:PRESENTS]->() 

return s, count(*) as hits ORDER BY hits DESC")
Iterable<Map<String,Object>> speakersByNumberOfTalks();
}
Services - abstraction


public abstract class GenericCRUDService<T> implements Service<T> {
private static final int DEPTH_LIST = 0;

private static final int DEPTH_ENTITY = 1;
@Override

public Iterable<T> findAll() {

return getRepository().findAll(DEPTH_LIST);

}


@Override

public T find(Long id) {

return getRepository().findOne(id, DEPTH_ENTITY);

}
public abstract GraphRepository<T> getRepository();
}
Services - implementation
@Service
public class SpeakerService extends GenericCRUDService<Speaker> {
@Autowired

private SpeakerRepository repository;


@Override

public GraphRepository<Speaker> getRepository() {

return repository;

}
}
Controllers - abstraction
@RequestMapping(value = "/api")
public abstract class Controller<T> {
public Iterable<T> list() {

return getService().findAll();

}
public T create (T entity) {

return getService().createOrUpdate(entity);

}



// … more controller methods here
public abstract Service<T> getService();
}
Controllers - implementation
// controller methods get an @ResponseBody annotation by default, yay!
@RestController

public class TalkController extends Controller<Talk> {
@Autowired private TalkService service;
@RequestMapping(value="/talks", method = RequestMethod.GET)

public Iterable<Talk> list() {

return service.findAll();

}

}
Front end: Angular js
● Very simple CRUD application
● Loosely based on jHipster angular templates
● Each JSON entity (track, speaker, etc) fully supported by 5 files:
o config.js
o servicefactory.js
o controllers.js
o list.html
o detail.html
Demo
Conference Application
Where next?
Immediately after RC1:
● Project code split
● General release mid-June
● More features planned
o Dynamic Properties
o Support for Embedded Neo4j
o Versioning (MVCC)
o Automatic hooks to pre/post-save lifecycle events
o Binary protocol …etc.

Getting started
Neo4j: http://neo4j.com/download
SDN4 Conference Application: https://github.com/neo4j-examples/sdn4-
conference
Spring Data Neo4j (4)
Current Release: http://maven.springframework.org/milestone/org/springframework/
data/spring-data-neo4j/4.0.0.M1
Latest Build: http://repo.spring.io/libs-snapshot/org/springframework/data/spring-data-
neo4j/4.0.0.BUILD-SNAPSHOT
Code: https://github.com/spring-projects/spring-data-neo4j/tree/4.0
Documentation: http://docs.spring.io/spring-data/neo4j/docs/4.0.0.M1
GraphAware
TM
Getting help
Luanne Misquitta

Adam George

Vince Bickers

Want to track/raise an issue?
○ https://jira.spring.io/browse/DATAGRAPH


Got questions, or need some advice?
○ Check our blog:

http://graphaware.com/blog/
○ Stack Overflow is your friend
graphaware.com
@graph_aware

More Related Content

What's hot

Building Community APIs using GraphQL, Neo4j, and Kotlin
Building Community APIs using GraphQL, Neo4j, and KotlinBuilding Community APIs using GraphQL, Neo4j, and Kotlin
Building Community APIs using GraphQL, Neo4j, and KotlinNeo4j
 
Practical Graph Algorithms with Neo4j
Practical Graph Algorithms with Neo4jPractical Graph Algorithms with Neo4j
Practical Graph Algorithms with Neo4jjexp
 
Graphs & Neo4j - Past Present Future
Graphs & Neo4j - Past Present FutureGraphs & Neo4j - Past Present Future
Graphs & Neo4j - Past Present Futurejexp
 
Full Stack Development with Neo4j and GraphQL
Full Stack Development with Neo4j and GraphQLFull Stack Development with Neo4j and GraphQL
Full Stack Development with Neo4j and GraphQLNeo4j
 
Building a Knowledge Graph using NLP and Ontologies
Building a Knowledge Graph using NLP and OntologiesBuilding a Knowledge Graph using NLP and Ontologies
Building a Knowledge Graph using NLP and OntologiesNeo4j
 
GraphTour - Neo4j Platform Overview
GraphTour - Neo4j Platform OverviewGraphTour - Neo4j Platform Overview
GraphTour - Neo4j Platform OverviewNeo4j
 
Full Stack Graph in the Cloud
Full Stack Graph in the CloudFull Stack Graph in the Cloud
Full Stack Graph in the CloudNeo4j
 
This Week in Neo4j - 24th November 2018
This Week in Neo4j - 24th November 2018This Week in Neo4j - 24th November 2018
This Week in Neo4j - 24th November 2018Neo4j
 
Neo4j-Databridge: Enterprise-scale ETL for Neo4j
Neo4j-Databridge: Enterprise-scale ETL for Neo4jNeo4j-Databridge: Enterprise-scale ETL for Neo4j
Neo4j-Databridge: Enterprise-scale ETL for Neo4jNeo4j
 
No Sql in Enterprise Java Applications
No Sql in Enterprise Java ApplicationsNo Sql in Enterprise Java Applications
No Sql in Enterprise Java ApplicationsPatrick Baumgartner
 
Data pipelines observability: OpenLineage & Marquez
Data pipelines observability:  OpenLineage & MarquezData pipelines observability:  OpenLineage & Marquez
Data pipelines observability: OpenLineage & MarquezJulien Le Dem
 
Kubernetes Config Management Landscape
Kubernetes Config Management LandscapeKubernetes Config Management Landscape
Kubernetes Config Management LandscapeTomasz Tarczyński
 
Big Data-Driven Applications with Cassandra and Spark
Big Data-Driven Applications  with Cassandra and SparkBig Data-Driven Applications  with Cassandra and Spark
Big Data-Driven Applications with Cassandra and SparkArtem Chebotko
 
GraphTour - Closing Keynote
GraphTour - Closing KeynoteGraphTour - Closing Keynote
GraphTour - Closing KeynoteNeo4j
 
OrientDB - the 2nd generation of (Multi-Model) NoSQL - Devoxx Belgium 2015
OrientDB - the 2nd generation  of  (Multi-Model) NoSQL - Devoxx Belgium 2015OrientDB - the 2nd generation  of  (Multi-Model) NoSQL - Devoxx Belgium 2015
OrientDB - the 2nd generation of (Multi-Model) NoSQL - Devoxx Belgium 2015Luigi Dell'Aquila
 
Querying Graphs with GraphQL
Querying Graphs with GraphQLQuerying Graphs with GraphQL
Querying Graphs with GraphQLjexp
 
GraphTour - Albelli: Running Neo4j on a large scale image platform
GraphTour - Albelli: Running Neo4j on a large scale image platformGraphTour - Albelli: Running Neo4j on a large scale image platform
GraphTour - Albelli: Running Neo4j on a large scale image platformNeo4j
 
GraphTour - Neo4j Database Overview
GraphTour - Neo4j Database OverviewGraphTour - Neo4j Database Overview
GraphTour - Neo4j Database OverviewNeo4j
 
Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)Patrick Baumgartner
 

What's hot (20)

Building Community APIs using GraphQL, Neo4j, and Kotlin
Building Community APIs using GraphQL, Neo4j, and KotlinBuilding Community APIs using GraphQL, Neo4j, and Kotlin
Building Community APIs using GraphQL, Neo4j, and Kotlin
 
Practical Graph Algorithms with Neo4j
Practical Graph Algorithms with Neo4jPractical Graph Algorithms with Neo4j
Practical Graph Algorithms with Neo4j
 
Graphs & Neo4j - Past Present Future
Graphs & Neo4j - Past Present FutureGraphs & Neo4j - Past Present Future
Graphs & Neo4j - Past Present Future
 
Full Stack Development with Neo4j and GraphQL
Full Stack Development with Neo4j and GraphQLFull Stack Development with Neo4j and GraphQL
Full Stack Development with Neo4j and GraphQL
 
Building a Knowledge Graph using NLP and Ontologies
Building a Knowledge Graph using NLP and OntologiesBuilding a Knowledge Graph using NLP and Ontologies
Building a Knowledge Graph using NLP and Ontologies
 
GraphTour - Neo4j Platform Overview
GraphTour - Neo4j Platform OverviewGraphTour - Neo4j Platform Overview
GraphTour - Neo4j Platform Overview
 
Full Stack Graph in the Cloud
Full Stack Graph in the CloudFull Stack Graph in the Cloud
Full Stack Graph in the Cloud
 
This Week in Neo4j - 24th November 2018
This Week in Neo4j - 24th November 2018This Week in Neo4j - 24th November 2018
This Week in Neo4j - 24th November 2018
 
Neo4j-Databridge: Enterprise-scale ETL for Neo4j
Neo4j-Databridge: Enterprise-scale ETL for Neo4jNeo4j-Databridge: Enterprise-scale ETL for Neo4j
Neo4j-Databridge: Enterprise-scale ETL for Neo4j
 
No Sql in Enterprise Java Applications
No Sql in Enterprise Java ApplicationsNo Sql in Enterprise Java Applications
No Sql in Enterprise Java Applications
 
Data pipelines observability: OpenLineage & Marquez
Data pipelines observability:  OpenLineage & MarquezData pipelines observability:  OpenLineage & Marquez
Data pipelines observability: OpenLineage & Marquez
 
Kubernetes Config Management Landscape
Kubernetes Config Management LandscapeKubernetes Config Management Landscape
Kubernetes Config Management Landscape
 
Neo4j graph database
Neo4j graph databaseNeo4j graph database
Neo4j graph database
 
Big Data-Driven Applications with Cassandra and Spark
Big Data-Driven Applications  with Cassandra and SparkBig Data-Driven Applications  with Cassandra and Spark
Big Data-Driven Applications with Cassandra and Spark
 
GraphTour - Closing Keynote
GraphTour - Closing KeynoteGraphTour - Closing Keynote
GraphTour - Closing Keynote
 
OrientDB - the 2nd generation of (Multi-Model) NoSQL - Devoxx Belgium 2015
OrientDB - the 2nd generation  of  (Multi-Model) NoSQL - Devoxx Belgium 2015OrientDB - the 2nd generation  of  (Multi-Model) NoSQL - Devoxx Belgium 2015
OrientDB - the 2nd generation of (Multi-Model) NoSQL - Devoxx Belgium 2015
 
Querying Graphs with GraphQL
Querying Graphs with GraphQLQuerying Graphs with GraphQL
Querying Graphs with GraphQL
 
GraphTour - Albelli: Running Neo4j on a large scale image platform
GraphTour - Albelli: Running Neo4j on a large scale image platformGraphTour - Albelli: Running Neo4j on a large scale image platform
GraphTour - Albelli: Running Neo4j on a large scale image platform
 
GraphTour - Neo4j Database Overview
GraphTour - Neo4j Database OverviewGraphTour - Neo4j Database Overview
GraphTour - Neo4j Database Overview
 
Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)
 

Viewers also liked

Graph Database Prototyping made easy with Graphgen
Graph Database Prototyping made easy with GraphgenGraph Database Prototyping made easy with Graphgen
Graph Database Prototyping made easy with GraphgenGraphAware
 
2017-01-08-scaling tribalknowledge
2017-01-08-scaling tribalknowledge2017-01-08-scaling tribalknowledge
2017-01-08-scaling tribalknowledgeChristopher Williams
 
Relevant Search Leveraging Knowledge Graphs with Neo4j
Relevant Search Leveraging Knowledge Graphs with Neo4jRelevant Search Leveraging Knowledge Graphs with Neo4j
Relevant Search Leveraging Knowledge Graphs with Neo4jGraphAware
 
Real-Time Recommendations and the Future of Search
Real-Time Recommendations and the Future of SearchReal-Time Recommendations and the Future of Search
Real-Time Recommendations and the Future of SearchGraphAware
 
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...Christophe Willemsen
 
Neo4j as a Key Player in Human Capital Management (HCM), GraphAware
Neo4j as a Key Player in Human Capital Management (HCM), GraphAwareNeo4j as a Key Player in Human Capital Management (HCM), GraphAware
Neo4j as a Key Player in Human Capital Management (HCM), GraphAwareNeo4j
 

Viewers also liked (7)

Graph Database Prototyping made easy with Graphgen
Graph Database Prototyping made easy with GraphgenGraph Database Prototyping made easy with Graphgen
Graph Database Prototyping made easy with Graphgen
 
2017-01-08-scaling tribalknowledge
2017-01-08-scaling tribalknowledge2017-01-08-scaling tribalknowledge
2017-01-08-scaling tribalknowledge
 
Relevant Search Leveraging Knowledge Graphs with Neo4j
Relevant Search Leveraging Knowledge Graphs with Neo4jRelevant Search Leveraging Knowledge Graphs with Neo4j
Relevant Search Leveraging Knowledge Graphs with Neo4j
 
Power of Polyglot Search
Power of Polyglot SearchPower of Polyglot Search
Power of Polyglot Search
 
Real-Time Recommendations and the Future of Search
Real-Time Recommendations and the Future of SearchReal-Time Recommendations and the Future of Search
Real-Time Recommendations and the Future of Search
 
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
Chatbots and Voice Conversational Interfaces with Amazon Alexa, Neo4j and Gra...
 
Neo4j as a Key Player in Human Capital Management (HCM), GraphAware
Neo4j as a Key Player in Human Capital Management (HCM), GraphAwareNeo4j as a Key Player in Human Capital Management (HCM), GraphAware
Neo4j as a Key Player in Human Capital Management (HCM), GraphAware
 

Similar to Webinar about Spring Data Neo4j 4

Object Graph Mapping with Spring Data Neo4j 3 - Nicki Watt & Michael Hunger @...
Object Graph Mapping with Spring Data Neo4j 3 - Nicki Watt & Michael Hunger @...Object Graph Mapping with Spring Data Neo4j 3 - Nicki Watt & Michael Hunger @...
Object Graph Mapping with Spring Data Neo4j 3 - Nicki Watt & Michael Hunger @...Neo4j
 
Scaling 100PB Data Warehouse in Cloud
Scaling 100PB Data Warehouse in CloudScaling 100PB Data Warehouse in Cloud
Scaling 100PB Data Warehouse in CloudChangshu Liu
 
Jump Start into Apache® Spark™ and Databricks
Jump Start into Apache® Spark™ and DatabricksJump Start into Apache® Spark™ and Databricks
Jump Start into Apache® Spark™ and DatabricksDatabricks
 
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Flink Forward
 
Microservices and modularity with java
Microservices and modularity with javaMicroservices and modularity with java
Microservices and modularity with javaDPC Consulting Ltd
 
GraphQL is actually rest
GraphQL is actually restGraphQL is actually rest
GraphQL is actually restJakub Riedl
 
Tamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptxTamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptxTamir Dresher
 
Dev sum - Beyond REST with GraphQL in .Net
Dev sum - Beyond REST with GraphQL in .NetDev sum - Beyond REST with GraphQL in .Net
Dev sum - Beyond REST with GraphQL in .NetIrina Scurtu
 
Apache Tajo on Swift
Apache Tajo on SwiftApache Tajo on Swift
Apache Tajo on SwiftJihoon Son
 
[OpenStack Day in Korea 2015] Track 2-6 - Apache Tajo on Swift
[OpenStack Day in Korea 2015] Track 2-6 - Apache Tajo on Swift[OpenStack Day in Korea 2015] Track 2-6 - Apache Tajo on Swift
[OpenStack Day in Korea 2015] Track 2-6 - Apache Tajo on SwiftOpenStack Korea Community
 
WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...
WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...
WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...WSO2
 
Reactive database access with Slick3
Reactive database access with Slick3Reactive database access with Slick3
Reactive database access with Slick3takezoe
 
Utilizing the open ntf domino api
Utilizing the open ntf domino apiUtilizing the open ntf domino api
Utilizing the open ntf domino apiOliver Busse
 
Machine learning services with SQL Server 2017
Machine learning services with SQL Server 2017Machine learning services with SQL Server 2017
Machine learning services with SQL Server 2017Mark Tabladillo
 
LDP4j: A framework for the development of interoperable read-write Linked Da...
LDP4j: A framework for the development of interoperable read-write Linked Da...LDP4j: A framework for the development of interoperable read-write Linked Da...
LDP4j: A framework for the development of interoperable read-write Linked Da...Nandana Mihindukulasooriya
 
Lambda at Weather Scale - Cassandra Summit 2015
Lambda at Weather Scale - Cassandra Summit 2015Lambda at Weather Scale - Cassandra Summit 2015
Lambda at Weather Scale - Cassandra Summit 2015Robbie Strickland
 
Introduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R ShinyIntroduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R Shinyanamarisaguedes
 
Unifying Frontend and Backend Development with Scala - ScalaCon 2021
Unifying Frontend and Backend Development with Scala - ScalaCon 2021Unifying Frontend and Backend Development with Scala - ScalaCon 2021
Unifying Frontend and Backend Development with Scala - ScalaCon 2021Taro L. Saito
 
GraphQL - The new "Lingua Franca" for API-Development
GraphQL - The new "Lingua Franca" for API-DevelopmentGraphQL - The new "Lingua Franca" for API-Development
GraphQL - The new "Lingua Franca" for API-Developmentjexp
 

Similar to Webinar about Spring Data Neo4j 4 (20)

Object Graph Mapping with Spring Data Neo4j 3 - Nicki Watt & Michael Hunger @...
Object Graph Mapping with Spring Data Neo4j 3 - Nicki Watt & Michael Hunger @...Object Graph Mapping with Spring Data Neo4j 3 - Nicki Watt & Michael Hunger @...
Object Graph Mapping with Spring Data Neo4j 3 - Nicki Watt & Michael Hunger @...
 
Scaling 100PB Data Warehouse in Cloud
Scaling 100PB Data Warehouse in CloudScaling 100PB Data Warehouse in Cloud
Scaling 100PB Data Warehouse in Cloud
 
Jump Start into Apache® Spark™ and Databricks
Jump Start into Apache® Spark™ and DatabricksJump Start into Apache® Spark™ and Databricks
Jump Start into Apache® Spark™ and Databricks
 
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
 
Microservices and modularity with java
Microservices and modularity with javaMicroservices and modularity with java
Microservices and modularity with java
 
GraphQL is actually rest
GraphQL is actually restGraphQL is actually rest
GraphQL is actually rest
 
Tamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptxTamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptx
 
Dev sum - Beyond REST with GraphQL in .Net
Dev sum - Beyond REST with GraphQL in .NetDev sum - Beyond REST with GraphQL in .Net
Dev sum - Beyond REST with GraphQL in .Net
 
Apache Tajo on Swift
Apache Tajo on SwiftApache Tajo on Swift
Apache Tajo on Swift
 
[OpenStack Day in Korea 2015] Track 2-6 - Apache Tajo on Swift
[OpenStack Day in Korea 2015] Track 2-6 - Apache Tajo on Swift[OpenStack Day in Korea 2015] Track 2-6 - Apache Tajo on Swift
[OpenStack Day in Korea 2015] Track 2-6 - Apache Tajo on Swift
 
WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...
WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...
WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...
 
Reactive database access with Slick3
Reactive database access with Slick3Reactive database access with Slick3
Reactive database access with Slick3
 
Utilizing the open ntf domino api
Utilizing the open ntf domino apiUtilizing the open ntf domino api
Utilizing the open ntf domino api
 
Machine learning services with SQL Server 2017
Machine learning services with SQL Server 2017Machine learning services with SQL Server 2017
Machine learning services with SQL Server 2017
 
Spark sql meetup
Spark sql meetupSpark sql meetup
Spark sql meetup
 
LDP4j: A framework for the development of interoperable read-write Linked Da...
LDP4j: A framework for the development of interoperable read-write Linked Da...LDP4j: A framework for the development of interoperable read-write Linked Da...
LDP4j: A framework for the development of interoperable read-write Linked Da...
 
Lambda at Weather Scale - Cassandra Summit 2015
Lambda at Weather Scale - Cassandra Summit 2015Lambda at Weather Scale - Cassandra Summit 2015
Lambda at Weather Scale - Cassandra Summit 2015
 
Introduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R ShinyIntroduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R Shiny
 
Unifying Frontend and Backend Development with Scala - ScalaCon 2021
Unifying Frontend and Backend Development with Scala - ScalaCon 2021Unifying Frontend and Backend Development with Scala - ScalaCon 2021
Unifying Frontend and Backend Development with Scala - ScalaCon 2021
 
GraphQL - The new "Lingua Franca" for API-Development
GraphQL - The new "Lingua Franca" for API-DevelopmentGraphQL - The new "Lingua Franca" for API-Development
GraphQL - The new "Lingua Franca" for API-Development
 

More from GraphAware

Unparalleled Graph Database Scalability Delivered by Neo4j 4.0
Unparalleled Graph Database Scalability Delivered by Neo4j 4.0Unparalleled Graph Database Scalability Delivered by Neo4j 4.0
Unparalleled Graph Database Scalability Delivered by Neo4j 4.0GraphAware
 
Social media monitoring with ML-powered Knowledge Graph
Social media monitoring with ML-powered Knowledge GraphSocial media monitoring with ML-powered Knowledge Graph
Social media monitoring with ML-powered Knowledge GraphGraphAware
 
To be or not to be.
To be or not to be. To be or not to be.
To be or not to be. GraphAware
 
It Depends (and why it's the most frequent answer to modelling questions)
It Depends (and why it's the most frequent answer to modelling questions)It Depends (and why it's the most frequent answer to modelling questions)
It Depends (and why it's the most frequent answer to modelling questions)GraphAware
 
How Boston Scientific Improves Manufacturing Quality Using Graph Analytics
How Boston Scientific Improves Manufacturing Quality Using Graph AnalyticsHow Boston Scientific Improves Manufacturing Quality Using Graph Analytics
How Boston Scientific Improves Manufacturing Quality Using Graph AnalyticsGraphAware
 
When privacy matters! Chatbots in data-sensitive businesses
When privacy matters! Chatbots in data-sensitive businessesWhen privacy matters! Chatbots in data-sensitive businesses
When privacy matters! Chatbots in data-sensitive businessesGraphAware
 
Graph-Powered Machine Learning
Graph-Powered Machine LearningGraph-Powered Machine Learning
Graph-Powered Machine LearningGraphAware
 
Signals from outer space
Signals from outer spaceSignals from outer space
Signals from outer spaceGraphAware
 
Neo4j-Databridge: Enterprise-scale ETL for Neo4j
Neo4j-Databridge: Enterprise-scale ETL for Neo4jNeo4j-Databridge: Enterprise-scale ETL for Neo4j
Neo4j-Databridge: Enterprise-scale ETL for Neo4jGraphAware
 
Graph-Powered Machine Learning
Graph-Powered Machine Learning Graph-Powered Machine Learning
Graph-Powered Machine Learning GraphAware
 
(Big) Data Science
 (Big) Data Science (Big) Data Science
(Big) Data ScienceGraphAware
 
Modelling Data in Neo4j (plus a few tips)
Modelling Data in Neo4j (plus a few tips)Modelling Data in Neo4j (plus a few tips)
Modelling Data in Neo4j (plus a few tips)GraphAware
 
Intro to Neo4j (CZ)
Intro to Neo4j (CZ)Intro to Neo4j (CZ)
Intro to Neo4j (CZ)GraphAware
 
Modelling Data as Graphs (Neo4j)
Modelling Data as Graphs (Neo4j)Modelling Data as Graphs (Neo4j)
Modelling Data as Graphs (Neo4j)GraphAware
 
GraphAware Framework Intro
GraphAware Framework IntroGraphAware Framework Intro
GraphAware Framework IntroGraphAware
 
Advanced Neo4j Use Cases with the GraphAware Framework
Advanced Neo4j Use Cases with the GraphAware FrameworkAdvanced Neo4j Use Cases with the GraphAware Framework
Advanced Neo4j Use Cases with the GraphAware FrameworkGraphAware
 
Recommendations with Neo4j (FOSDEM 2015)
Recommendations with Neo4j (FOSDEM 2015)Recommendations with Neo4j (FOSDEM 2015)
Recommendations with Neo4j (FOSDEM 2015)GraphAware
 
Machine Learning Powered by Graphs - Alessandro Negro
Machine Learning Powered by Graphs - Alessandro NegroMachine Learning Powered by Graphs - Alessandro Negro
Machine Learning Powered by Graphs - Alessandro NegroGraphAware
 
Knowledge Graphs and Chatbots with Neo4j and IBM Watson - Christophe Willemsen
Knowledge Graphs and Chatbots with Neo4j and IBM Watson - Christophe WillemsenKnowledge Graphs and Chatbots with Neo4j and IBM Watson - Christophe Willemsen
Knowledge Graphs and Chatbots with Neo4j and IBM Watson - Christophe WillemsenGraphAware
 
The power of polyglot searching
The power of polyglot searchingThe power of polyglot searching
The power of polyglot searchingGraphAware
 

More from GraphAware (20)

Unparalleled Graph Database Scalability Delivered by Neo4j 4.0
Unparalleled Graph Database Scalability Delivered by Neo4j 4.0Unparalleled Graph Database Scalability Delivered by Neo4j 4.0
Unparalleled Graph Database Scalability Delivered by Neo4j 4.0
 
Social media monitoring with ML-powered Knowledge Graph
Social media monitoring with ML-powered Knowledge GraphSocial media monitoring with ML-powered Knowledge Graph
Social media monitoring with ML-powered Knowledge Graph
 
To be or not to be.
To be or not to be. To be or not to be.
To be or not to be.
 
It Depends (and why it's the most frequent answer to modelling questions)
It Depends (and why it's the most frequent answer to modelling questions)It Depends (and why it's the most frequent answer to modelling questions)
It Depends (and why it's the most frequent answer to modelling questions)
 
How Boston Scientific Improves Manufacturing Quality Using Graph Analytics
How Boston Scientific Improves Manufacturing Quality Using Graph AnalyticsHow Boston Scientific Improves Manufacturing Quality Using Graph Analytics
How Boston Scientific Improves Manufacturing Quality Using Graph Analytics
 
When privacy matters! Chatbots in data-sensitive businesses
When privacy matters! Chatbots in data-sensitive businessesWhen privacy matters! Chatbots in data-sensitive businesses
When privacy matters! Chatbots in data-sensitive businesses
 
Graph-Powered Machine Learning
Graph-Powered Machine LearningGraph-Powered Machine Learning
Graph-Powered Machine Learning
 
Signals from outer space
Signals from outer spaceSignals from outer space
Signals from outer space
 
Neo4j-Databridge: Enterprise-scale ETL for Neo4j
Neo4j-Databridge: Enterprise-scale ETL for Neo4jNeo4j-Databridge: Enterprise-scale ETL for Neo4j
Neo4j-Databridge: Enterprise-scale ETL for Neo4j
 
Graph-Powered Machine Learning
Graph-Powered Machine Learning Graph-Powered Machine Learning
Graph-Powered Machine Learning
 
(Big) Data Science
 (Big) Data Science (Big) Data Science
(Big) Data Science
 
Modelling Data in Neo4j (plus a few tips)
Modelling Data in Neo4j (plus a few tips)Modelling Data in Neo4j (plus a few tips)
Modelling Data in Neo4j (plus a few tips)
 
Intro to Neo4j (CZ)
Intro to Neo4j (CZ)Intro to Neo4j (CZ)
Intro to Neo4j (CZ)
 
Modelling Data as Graphs (Neo4j)
Modelling Data as Graphs (Neo4j)Modelling Data as Graphs (Neo4j)
Modelling Data as Graphs (Neo4j)
 
GraphAware Framework Intro
GraphAware Framework IntroGraphAware Framework Intro
GraphAware Framework Intro
 
Advanced Neo4j Use Cases with the GraphAware Framework
Advanced Neo4j Use Cases with the GraphAware FrameworkAdvanced Neo4j Use Cases with the GraphAware Framework
Advanced Neo4j Use Cases with the GraphAware Framework
 
Recommendations with Neo4j (FOSDEM 2015)
Recommendations with Neo4j (FOSDEM 2015)Recommendations with Neo4j (FOSDEM 2015)
Recommendations with Neo4j (FOSDEM 2015)
 
Machine Learning Powered by Graphs - Alessandro Negro
Machine Learning Powered by Graphs - Alessandro NegroMachine Learning Powered by Graphs - Alessandro Negro
Machine Learning Powered by Graphs - Alessandro Negro
 
Knowledge Graphs and Chatbots with Neo4j and IBM Watson - Christophe Willemsen
Knowledge Graphs and Chatbots with Neo4j and IBM Watson - Christophe WillemsenKnowledge Graphs and Chatbots with Neo4j and IBM Watson - Christophe Willemsen
Knowledge Graphs and Chatbots with Neo4j and IBM Watson - Christophe Willemsen
 
The power of polyglot searching
The power of polyglot searchingThe power of polyglot searching
The power of polyglot searching
 

Recently uploaded

Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 

Recently uploaded (20)

Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 

Webinar about Spring Data Neo4j 4

  • 1. GraphAware TM Building High Performance Applications
 with Spring Data Neo4j 4 Vince Bickers, GraphAware graphaware.com @graph_aware
  • 2. Agenda ● A bit about Neo4j and the Spring Data project ● A brief history of SDN ● SDN 4: Spring Data + Standalone Java OGM ● Conference Demo o Data model o Code o Live demo! ● Roadmap ● Q & A
  • 3. Neo4j is a Graph Database •Nodes & Edges (Relationships) •Index-free adjacency means super-fast traversals •Embedded Client and Remote Server •Schema-flexible! •Cypher Query Language
  • 4. When worlds collide… The impedance mismatch 

  • 5. Spring Data •Most active Spring Project •Consistent APIs to access both RDBMS and NoSQL stores •JPA, Neo4j, MongoDB, Redis, CouchBase… •Convenient abstractions for Spring developers
  • 6. Quick History of SD-Neo4j ● SDN 0.x - Rod and Emil wrote it, started Spring Data efforts ● SDN 1.x - Embedded Neo4j, Object Mapping, Templates ● SDN 2.x - Neo4j Server, SD-Repositories ● SDN 3.x - Neo4j 2.x with Label + Schema Index Support, etc.
  • 7. Now… Spring Data Neo4j 4.0 ● New and Shiny! o Complete rewrite o Neo4j Server only (for now, at least) o Sympathetic to typical business use cases o And … not just for Spring developers!
  • 8. Spring Data Neo4j 4 - Progress ● Development started Sep 2014 ● Milestone 1 released end Mar 2015 ● RC1 end-May 2015 ● GA … mid-June 2015

  • 9. Spring Data + Separate OGM ● Standalone Java OGM ● Spring+ o Template methods o Transactions o Repositories o Queries o Exception Translation o Conversion Services
  • 10. Approach ● Constraint: Cypher over HTTP ● Solution: Focus on performance!
  • 11. Core OGM - Features ● "Vampire" Metadata scanning (no reflection!) ● Optional annotations ● Mapping contexts scoped to “conversational” lifetimes: o Application, o HTTP session, o HTTP request, etc. ● "Smart" object-mapping ● Variable-depth persistence
  • 12. Variable-depth persistence If you're interested in loading this... ...you're often really interested in this
  • 13. Variable-depth persistence If your domain objects are connected….
 
 
 
 
 
 
 
 
 
 
 …you should be able to save them all at once - from any object.
  • 14. Conference Application Spring Data Neo4j 4.0 Spring Boot Angular.js

  • 15. Application architecture Straightforward Spring Boot application: ● RESTControllers ● … depending on Services ● …... depending on Spring Repositories ● to persist POJO Entity classes

  • 16. Entities and Relationships Entities (Labels) ● Speaker ● Conference ● Track ● Talk (Session) ● Timeslot
 Relationships ● PRESENTS ● REGISTERED_FOR ● IN_TRACK ● HAS_TRACK ● AT_TIMESLOT
  • 18. Preparing the data - CQL create (conference:Conference {name : 'GraphConnect 2015'}) create (track1:Track {name : 'Technical Track'}) create (track2:Track {name : 'Business Track'}) create (track3:Track {name : 'Practitioner Track'}) create (track4:Track {name : 'Beginner Track'}) create (conference)<-[:REGISTERED_FOR]-(long:Speaker {name : 'Josh Long'}) create (conference)<-[:REGISTERED_FOR]-(gonzalez:Speaker {name : 'Ignasi Gonzalez'}) create (conference)<-[:REGISTERED_FOR]-(lopez:Speaker {name : 'Ivan Lopez'}) create (conference)<-[:REGISTERED_FOR]-(rodriguez:Speaker {name : 'Anton Rodriguez'}) …etc
  • 19. All the data loaded…
  • 20. Configuration: Spring Boot @SpringBootApplication @Import(PersistenceConfig.class) public class ConferenceApplication { public static void main(String[] args) { SpringApplication app = new SpringApplication(ConferenceApplication.class); app.setShowBanner(false); app.run(args); } }
  • 21. Configuration: Persistence @Configuration
 @EnableNeo4jRepositories(basepackages="app.conference.repository")
 @EnableTransactionManagement public class PersistenceConfig extends Neo4jConfiguration { @Bean public Neo4jServer neo4jServer() {
 return new RemoteServer("http://localhost:7474");
 } @Bean public SessionFactory getSessionFactory() {
 return new SessionFactory("app.conference.domain");
 } @Bean @Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
 public Session getSession() throws Exception {
 return super.getSession();
 }
 }
  • 22. Entities: Abstract Entity @JsonIdentifyInfo(generator=JSOGGenerator.class) public abstract class Entity { 
 @JsonProperty("id")
 @GraphId
 private Long id; private String name; }
  • 23. Entities: Speaker 
 public class Speaker extends Entity {
 @Relationship(type="PRESENTS")
 private Set<Talk> talks;
 }
  • 24. Entities: Talk @NodeEntity(label="Session") public class Talk extends Entity {
 @Relationship(type="AT_TIMESLOT")
 private Timeslot timeslot; @Relationship(type="IN_TRACK")
 private Track track; @Relationship(type="PRESENTS", direction=Relationship.INCOMING) 
 private Set<Speaker> presenters; }
  • 25. Repositories interface SpeakerRepository extends GraphRepository<Speaker> { 
 @Query("MATCH(s:Speaker)-[:PRESENTS]->() 
 return s, count(*) as hits ORDER BY hits DESC") Iterable<Map<String,Object>> speakersByNumberOfTalks(); }
  • 26. Services - abstraction 
 public abstract class GenericCRUDService<T> implements Service<T> { private static final int DEPTH_LIST = 0;
 private static final int DEPTH_ENTITY = 1; @Override
 public Iterable<T> findAll() {
 return getRepository().findAll(DEPTH_LIST);
 } 
 @Override
 public T find(Long id) {
 return getRepository().findOne(id, DEPTH_ENTITY);
 } public abstract GraphRepository<T> getRepository(); }
  • 27. Services - implementation @Service public class SpeakerService extends GenericCRUDService<Speaker> { @Autowired
 private SpeakerRepository repository; 
 @Override
 public GraphRepository<Speaker> getRepository() {
 return repository;
 } }
  • 28. Controllers - abstraction @RequestMapping(value = "/api") public abstract class Controller<T> { public Iterable<T> list() {
 return getService().findAll();
 } public T create (T entity) {
 return getService().createOrUpdate(entity);
 }
 
 // … more controller methods here public abstract Service<T> getService(); }
  • 29. Controllers - implementation // controller methods get an @ResponseBody annotation by default, yay! @RestController
 public class TalkController extends Controller<Talk> { @Autowired private TalkService service; @RequestMapping(value="/talks", method = RequestMethod.GET)
 public Iterable<Talk> list() {
 return service.findAll();
 }
 }
  • 30. Front end: Angular js ● Very simple CRUD application ● Loosely based on jHipster angular templates ● Each JSON entity (track, speaker, etc) fully supported by 5 files: o config.js o servicefactory.js o controllers.js o list.html o detail.html
  • 32. Where next? Immediately after RC1: ● Project code split ● General release mid-June ● More features planned o Dynamic Properties o Support for Embedded Neo4j o Versioning (MVCC) o Automatic hooks to pre/post-save lifecycle events o Binary protocol …etc.

  • 33. Getting started Neo4j: http://neo4j.com/download SDN4 Conference Application: https://github.com/neo4j-examples/sdn4- conference Spring Data Neo4j (4) Current Release: http://maven.springframework.org/milestone/org/springframework/ data/spring-data-neo4j/4.0.0.M1 Latest Build: http://repo.spring.io/libs-snapshot/org/springframework/data/spring-data- neo4j/4.0.0.BUILD-SNAPSHOT Code: https://github.com/spring-projects/spring-data-neo4j/tree/4.0 Documentation: http://docs.spring.io/spring-data/neo4j/docs/4.0.0.M1
  • 34. GraphAware TM Getting help Luanne Misquitta
 Adam George
 Vince Bickers
 Want to track/raise an issue? ○ https://jira.spring.io/browse/DATAGRAPH 
 Got questions, or need some advice? ○ Check our blog:
 http://graphaware.com/blog/ ○ Stack Overflow is your friend graphaware.com @graph_aware