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

The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
(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
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
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)

The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
(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...
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
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