SlideShare a Scribd company logo
1 of 50
Download to read offline
/ 50
LONDON, 26 April 2016
1
LORENZO SPERANZONI | @inserpio
CEO @ LARUS Business Automation - GCE2016 BRONZE SPONSOR
GraphConnect Europe 2016
Explore the new
COUCHBASE and JDBC
integrations for Neo4j 3.0
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
AGENDA
✦ Let’s say Hi ( “Ciao” !! )
✦ Neo4j - Couchbase Connector
✦ JDBC Driver with BOLT for Neo4j 3.0
2
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
AGENDA
✦ Let’s say Hi ( “Ciao” !! )
✦ Neo4j - Couchbase Connector
✦ JDBC Driver with BOLT for Neo4j 3.0
3
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
WELCOME
AND
THANKS FOR COMING
TO THIS LIGHTNING TALK
4
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
5
[:WORKS_FOR { role: ‘CEO’ }]
Venice
[:BRONZE_SPONSOR]
Lorenzo Speranzoni
LARUS Business Automation
[:BASED_IN]
[:CERTIFIED_ON]
[:PARTNER_OF]
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
6
… this is a typical day in Venice George Clooney Wedding
BY THE WAY … … NOT THIS ONE DURING …
#*@!#!!
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
7
2016
Neo4j Contributors
20152011
First Spikes
( with neo4j 1.x !! )
2013
LARUS’ TRIP WITH NEO4J (quite a long and cool story)
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
8
CONSULTING
[:DELIVERS]
TRAININGS
SUPPORT
[:DELIVERS]
[:DELIVERS] [:FOR]
[:ON]
[:ON]
[:ADOPTED]
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
AGENDA
✦ Let’s say Hi ( “Ciao” !! )
✦ Neo4j - Couchbase Connector
✦ JDBC Driver with BOLT for Neo4j 3.0
9
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
The new Neo4j - Couchbase Connector
10
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
KEY ASPECTS
✦ BI-DIRECTIONAL
✦ CONFIGURABLE
11
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
https://developer.spotify.com/web-api/console/get-album
12
CASESTUDY
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
https://developer.spotify.com/web-api/console/get-album [ RESPONSE ]
13
CASESTUDY
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
BASIC JSON 2 GRAPH CONVERSION RULES
PLEASE NOTE.
✦ Most of the following approaches come from William Lion’s (@lionwj)

MongoDB - Neo4j Connector (http://neo4j.com/blog/neo4j-doc-manager-polyglot-
persistence-mongodb/)
✦ Don’t miss William’s session “NoSQL Polyglot Persistence: Tools and Integrations” here at
GCE2016 (4:30PM), for many more examples about managing multiple databases.
14
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
PRIMITIVE ATTRIBUTES …
15
album_type: “U2”
href: “https://api.spotify.com/v1/albums/586Z…”
id: “586ZRfgsIckfcKvHVcGM4V”
name: “The Joshua Tree”
popularity: 53
release_date: “1987-03-10”
release_date_precision: “day”
type: “album”
uri: “spotify:album:586ZRfgsIckfcKvHVcGM4V”
ALBUM
BECOME NODE’S ATTRIBUTES
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
ARRAY OF PRIMITIVE ATTRIBUTES …
16
album_type: “U2”
available_markets: [ “MX”, “US” ]
href: “https://api.spotify.com/v1/albums/586Z…”
id: “586ZRfgsIckfcKvHVcGM4V”
name: “The Joshua Tree”
popularity: 53
release_date: “1987-03-10”
release_date_precision: “day”
type: “album”
uri: “spotify:album:586ZRfgsIckfcKvHVcGM4V”
ALBUM
STILL BECOME NODE’S ATTRIBUTES
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
OBJECT ATTRIBUTES . . .
17
href: “https://api.spotify.com/v1/artists/51B…”
id: “51Blml2LZPmy7TTiAg47vQ”
name: “U2”
type: “artist”
uri: “spotify:album:51Blml2LZPmy7TTiAg47vQ”
ARTIST
BECOME CONNECTED NODES
name: “The Joshua Tree”
ALBUM
[ :ALBUM_ARTIST ]
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
ARRAY OF OBJECTS ATTRIBUTES …
18
ARTIST
AGAIN BECOME CONNECTED NODES
ALBUM
disc_number: 1
duration_ms: 337973
href: “https://api.spotify.com/v1/tracks/3zq…”
id: “3zqTlJtp7KTPrNUKNahvAo”
name: “Where The Streets Have No Name”
uri: “spotify:album:3zqTlJtp7KTPrNUKNahvAo”
track_number: 1
type: “track”
ITEM
TRACKS
ITEM
2
ITEM
3ITEM
11
ITEM
4
[:TRACKS_ITEM
S]
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
Neo4j - Couchbase Connector
COMPONENTS
(and a bit of noisy code)
19
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
Neo4j - Couchbase Connector Components
20
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
1. Couchbase Mutation Listener
public class CouchbaseEvent {
/**
* Wrapped {@link CouchbaseMessage}.
*/
private CouchbaseMessage message;
}
public class CouchbaseEventFilter {
/**
* Returns true if event is a {@link MutationMessage}.
*/
public static boolean accept(final CouchbaseEvent couchbaseEvent) {
return couchbaseEvent.getMessage() instanceof MutationMessage;
}
}
21
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
1. Couchbase Mutation Listener
public class CouchbaseEventHandler implements EventHandler<CouchbaseEvent> {
/**
* Handles {@link CouchbaseEvent}s that come into the response RingBuffer.
*/
@Override
public void onEvent(final CouchbaseEvent event, final long sequence, final boolean endOfBatch) throws Exception {
if (CouchbaseEventFilter.accept(event)) {
MutationMessage mutationMessage = (MutationMessage) event.getMessage();
ByteBuf jsonDocument = mutationMessage.content();
DocumentTransformer<String> remoteNeo4jTransformer = new RemoteNeo4jTransformer();
remoteNeo4jTransformer.transform(mutationMessage.key(), “COUCHBASE_DOCUMENT", asString(jsonDocument));
}
}
}
22
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
1. Couchbase Mutation Listener
public class CouchbaseMutationListener extends Thread {
/**
* Builds and starts the event consumer.
*/
public void buildDisruptor() {
Disruptor<CouchbaseEvent> disruptor = new Disruptor<CouchbaseEvent>(new CouchbaseEventFactory(), 32, Executors.newCachedThreadPool());
disruptor.handleExceptionsWith(new CouchbaseExceptionLogger());
disruptor.handleEventsWith(new CouchbaseEventHandler());
this.couchbaseEventBuffer = disruptor.start();
}
/**
* Connect this dispatcher to Couchbase.
*/
public void connect() {
this.couchbaseClusterFacade.send(new SeedNodesRequest(couchbaseNodes)).timeout(2, TimeUnit.SECONDS).toBlocking().single();
this.couchbaseClusterFacade.send(new OpenBucketRequest(this.couchbaseBucket, couchbasePassword)).timeout(2, TimeUnit.SECONDS).toBlocking().single();
}
}
23
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
2. Neo4j JSON Loader
public class JsonDocument {
private String id;
private String type;
private String content;
private JsonMappingStrategy mappingStrategy;
private List<JsonObjectDescriptor> objectDescriptors;
}
public enum JsonMappingStrategy {
ATTRIBUTE_BASED(“attribute”),
DOMAIN_DRIVEN(“domain”),
STORED_PROCEDURE(“stored procedure”),
}
24
public class JsonObjectDescriptor {
private String entityName;
private List<String> uniqueKeyAttributes;
private String typeAttribute;
}
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
2. Neo4j JSON Loader
@Path("/")
public class JsonLoaderRestController {
private final GraphDatabaseService graphDatabaseService;
public JsonLoaderRestController(@Context GraphDatabaseService graphDatabaseService) {
this.graphDatabaseService = graphDatabaseService;
}
@POST
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response loadJSON(JAXBElement<JsonDocument> jsonDocumentWrapper) {
JsonDocument jsonDocument = jsonDocumentWrapper.getValue();
JsonLoaderService loaderService = new DefaultJsonLoaderService(this.graphDatabaseService);
QueryStatistics queryStatistics = loaderService.save(jsonDocument);
return Response.ok(queryStatistics).build();
}
}
neo4j-server.properties
org.neo4j.server.thirdparty_jaxrs_classes=it.larusba.integration.neo4j.jsonloader.rest=/jsonloader
25
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
2. Neo4j JSON Loader
public class DefaultJsonLoaderService implements JsonLoaderService {
@Override
public JsonLoaderStatistics save(JsonDocument jsonDocument) throws JsonParseException, JsonMappingException, IOException {
JsonTransformer<String> jsonTransformer = JsonTransformerFactory.getInstance(jsonDocument.getMappingStrategy());
String cypher = jsonTransformer.transform(jsonDocument);
try (Transaction tx = this.graphDatabaseService.beginTx()) {
Result result = this.graphDatabaseService.execute(cypher);
jsonLoaderStatistics = new JsonLoaderStatistics(result.getQueryStatistics());
tx.success();
}
return jsonLoaderStatistics;
}
26
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
3. Neo4j Mutation Listener
public class Neo4jEventListener implements TransactionEventHandler<Void> {
private GraphDatabaseService db;
public Neo4jEventListener(GraphDatabaseService db) {
this.db = db;
}
public void afterCommit(TransactionData data, Void state) {
List<JsonDocument> jsonDocuments = buildJSONDocument(data);
if (CollectionUtils.isNotEmpty(jsonDocuments)) {
CouchbaseJSONLoader.upsert(jsonDocuments);
}
}
}
27
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
4. Couchbase JSON Loader
public class CouchbaseJSONLoader
public static void upsert(List<JsonDocument> jsonDocuments) {
Cluster cluster = CouchbaseCluster.create();
Bucket defaultBucket = cluster.openBucket();
for (JsonDocument jsonDocument : jsonDocuments) {
defaultBucket.upsert(jsonDocument);
}
cluster.disconnect();
}
}
28
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
Neo4j - Couchbase Connector
HOW ABOUT THE DOMAIN?
WOULDN’T BE COOL TO BE ABLE TO TRAIN
THE “JSON LOADER” WITH THE BUSINESS DOMAIN
YOUR WORKING ON?
29
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
HOW ABOUT THESE INTERESTING ATTRIBUTES ?
30
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
31
WHY DON’T WE USE “ID” ATTRIBUTES TO UNIQUELY IDENTIFY NODES?
We could use them on MERGE statements:
MERGE (album:ALBUM {id: ‘586ZRfgsIckfcKvHVcGM4V’})
MERGE (track:TRACK {id: ‘3zqTlJtp7KTPrNUKNahvAo’})
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
32
AND WHY DON’T WE USE “TYPE” ATTRIBUTES AS NODES’ LABELS?
MERGE (album:ALBUM {id: ‘586ZRfgsIckfcKvHVcGM4V’})
MERGE (track:TRACK {id: ‘3zqTlJtp7KTPrNUKNahvAo’})
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
DESCRIBE YOUR DOMAIN
i.e. instruct how the JSON 2 GRAPH transformer should behave
List<JsonObjectDescriptor> jsonObjectDescriptors = new ArrayList<JsonObjectDescriptor>();
jsonObjectDescriptors.add(new JsonObjectDescriptor("Album", Arrays.asList("id"), “type”));
jsonObjectDescriptors.add(new JsonObjectDescriptor("Artists", Arrays.asList("id"), “type"));
jsonObjectDescriptors.add(new JsonObjectDescriptor("Images", Arrays.asList("url"), null));
jsonObjectDescriptors.add(new JsonObjectDescriptor("Tracks", Arrays.asList("href"), null));
jsonObjectDescriptors.add(new JsonObjectDescriptor("Items", Arrays.asList("id"), “type”));
JsonDocument jsonDocument =
new JsonDocument("U2TheJoshuaTreeAlbum", "Album", spotifyTheJoshuaTreeAlbumDocument, JsonMappingStrategy.DOMAIN_DRIVEN, jsonObjectDescriptors);
33
key type json strategy descriptors
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
DOMAIN DRIVER JSON TRANSFORMER
public class DomainDrivenJsonTransformer implements JsonTransformer<String> {
@Override
public String transform(JsonDocument jsonDocument) throws JsonParseException, JsonMappingException, IOException {
34
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
35
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
36
“DOMAIN DRIVEN” TRANSFORMER

ALLOWS YOU TO RE-USE

“U2” and all other NODES
…
SO THAT YOU GET
A REAL BENEFIT
FROM RELATIONSHIPS
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
AGENDA
✦ Let’s say Hi ( “Ciao” !! )
✦ Neo4j - Couchbase Connector
✦ JDBC Driver with BOLT for Neo4j 3.0
37
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
38
The new JDBC Driver with BOLT
Neo4j 3.0
APPLICATION
JDBC
EMIL’S OPENING KEYNOTE
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
Neo4j JDBC Driver: A-TEAM
39
Project Leader
HTTP Protocol
Tester
BENOIT SIMARD
STEFAN ARMBRUSTER
MICHAEL HUNGER
Dev & Project Leader
RALF BECHER
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
KEY ASPECTS
✦ MAKE USE OF THE NEW B.O.L.T. PROTOCOL
✦ MODULAR DESING (bolt, http, in-memory, file)
✦ HEAVILY TESTED
✦ FOCUS ON PERFORMANCE
40
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
41
1. Make use of the new BOLT protocol
Neo4j 3.0
NEO4J-JDBC
BOLT module
neo4j-java-driver
APPLICATION
https://github.com/neo4j/neo4j-java-driver
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
42
2. Modular design
Neo4j 3.0
NEO4J-JDBC BOLT
HTTP
FILE
IN-MEMORY
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
3. Heavily tested
✦ ~300 unit tests
✦ ~50 integration tests
43
for ~60 classes
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
4. Focus on performance
✦ OLD: 30’20’’
✦ NEW: 17’11’’
44
30.000 CSV rows
WOW!
ALMOST HALF TIME
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
45
INTEGRATE NEO4J WITH ALL
YOUR FAVOURITE TOOLS AND PRODUCTS
Neo4j 3.0
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
Minimum Viable Snippet
// Make sure Neo4j Driver is registered
Class.forName(“it.larusba.neo4j.jdbc.bolt.BoltDriver”);
// Connect
Connection con = DriverManager.getConnection(“jdbc:bolt://localhost”);
// Query
try (Statement stmt = con.createStatement()) {
ResultSet rs = stmt.executeQuery(“MATCH (n:User) RETURN n.name”);
while (rs.next()) {
System.out.println(rs.getString(“n.name”));
}
}
con.close();
46
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
47
RC1
Neo4j Contrib
M5M3 M4
Neo4j 3.0 JDBC Driver RELEASE PLAN
HTTP PROTOCOL
java.sql.CallableStatement
FULLY RETRO-
COMPATIBILITY
BOLT
PROTOCOL
early autumn
PRODUCTION
READY
TODAY AT
GCE2016
early summer
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
HAVE FUN WITH US
✦ https://github.com/larusba/neo4j-jdbc
✦ https://github.com/larusba/neo4j-couchbase-connector
✦ https://github.com/larusba/neo4j-json-loader
48
/ 50
LONDON, 26 April 2016GraphConnect Europe 2016
EXPLORE THE NEW COUCHBASE & JDBC
INTEGRATIONS FOR NEO4J 3.0
COME AND TALK WITH THESE GUYS!!!
THEY DID ALL THIS STUFF &
THEY’RE IN THE ROOM :-)
✦ Mauro Roiter (@MauroRoiter)
✦ Marco Falcier (@mfalcier)
✦ Alberto D’Este (@ziotobia)
✦ Gianmarco Laggia (@glaggia)
49
/ 50
LONDON, 26 April 2016
50
LORENZO SPERANZONI | @inserpio
CEO @ LARUS Business Automation - GCE2016 BRONZE SPONSOR
GraphConnect Europe 2016
THANK YOU

More Related Content

Viewers also liked

GraphConnect Europe 2016 - How Go and Neo4j enabled the FT to Deliver at Spee...
GraphConnect Europe 2016 - How Go and Neo4j enabled the FT to Deliver at Spee...GraphConnect Europe 2016 - How Go and Neo4j enabled the FT to Deliver at Spee...
GraphConnect Europe 2016 - How Go and Neo4j enabled the FT to Deliver at Spee...Neo4j
 
GraphConnect Europe 2016 - Moving Graphs to Production at Scale - Ian Robinson
GraphConnect Europe 2016 - Moving Graphs to Production at Scale - Ian RobinsonGraphConnect Europe 2016 - Moving Graphs to Production at Scale - Ian Robinson
GraphConnect Europe 2016 - Moving Graphs to Production at Scale - Ian RobinsonNeo4j
 
GraphConnect Europe 2016 - Governing Multichannel Services with Graphs - Albe...
GraphConnect Europe 2016 - Governing Multichannel Services with Graphs - Albe...GraphConnect Europe 2016 - Governing Multichannel Services with Graphs - Albe...
GraphConnect Europe 2016 - Governing Multichannel Services with Graphs - Albe...Neo4j
 
GraphConnect Europe 2016 - Faster Lap Times with Neo4j - Srinivas Suravarapu
GraphConnect Europe 2016 - Faster Lap Times with Neo4j - Srinivas SuravarapuGraphConnect Europe 2016 - Faster Lap Times with Neo4j - Srinivas Suravarapu
GraphConnect Europe 2016 - Faster Lap Times with Neo4j - Srinivas SuravarapuNeo4j
 
GraphConnect Europe 2016 - Pushing the Evolution of Software Analytics with G...
GraphConnect Europe 2016 - Pushing the Evolution of Software Analytics with G...GraphConnect Europe 2016 - Pushing the Evolution of Software Analytics with G...
GraphConnect Europe 2016 - Pushing the Evolution of Software Analytics with G...Neo4j
 
GraphConnect Europe 2016 - Navigating All the Knowledge - James Weaver
GraphConnect Europe 2016 - Navigating All the Knowledge - James WeaverGraphConnect Europe 2016 - Navigating All the Knowledge - James Weaver
GraphConnect Europe 2016 - Navigating All the Knowledge - James WeaverNeo4j
 
Slides from GraphDay Santa Clara
Slides from GraphDay Santa ClaraSlides from GraphDay Santa Clara
Slides from GraphDay Santa ClaraNeo4j
 
Intro to Cypher for the SQL Developer
Intro to Cypher for the SQL DeveloperIntro to Cypher for the SQL Developer
Intro to Cypher for the SQL DeveloperNeo4j
 
GraphConnect Europe 2016 - Digitalization and Optimizing Business Performance...
GraphConnect Europe 2016 - Digitalization and Optimizing Business Performance...GraphConnect Europe 2016 - Digitalization and Optimizing Business Performance...
GraphConnect Europe 2016 - Digitalization and Optimizing Business Performance...Neo4j
 
GraphTalk Berlin - Neo4j und FirstSpirit
GraphTalk Berlin - Neo4j und FirstSpiritGraphTalk Berlin - Neo4j und FirstSpirit
GraphTalk Berlin - Neo4j und FirstSpiritNeo4j
 
GraphConnect Europe 2016 - NoSQL Polyglot Persistence: Tools and Integrations...
GraphConnect Europe 2016 - NoSQL Polyglot Persistence: Tools and Integrations...GraphConnect Europe 2016 - NoSQL Polyglot Persistence: Tools and Integrations...
GraphConnect Europe 2016 - NoSQL Polyglot Persistence: Tools and Integrations...Neo4j
 
GraphConnect Europe 2016 - Securely Deploying Neo4j into AWS - Benjamin Nussbaum
GraphConnect Europe 2016 - Securely Deploying Neo4j into AWS - Benjamin NussbaumGraphConnect Europe 2016 - Securely Deploying Neo4j into AWS - Benjamin Nussbaum
GraphConnect Europe 2016 - Securely Deploying Neo4j into AWS - Benjamin NussbaumNeo4j
 
GraphConnect Europe 2016 - IoT - where do Graphs fit with Business Requiremen...
GraphConnect Europe 2016 - IoT - where do Graphs fit with Business Requiremen...GraphConnect Europe 2016 - IoT - where do Graphs fit with Business Requiremen...
GraphConnect Europe 2016 - IoT - where do Graphs fit with Business Requiremen...Neo4j
 
GraphConnect Europe 2016 - Building Consumer Trust through Transparency, Comp...
GraphConnect Europe 2016 - Building Consumer Trust through Transparency, Comp...GraphConnect Europe 2016 - Building Consumer Trust through Transparency, Comp...
GraphConnect Europe 2016 - Building Consumer Trust through Transparency, Comp...Neo4j
 
GraphConnect Europe 2016 - Building a Repository of Biomedical Ontologies wit...
GraphConnect Europe 2016 - Building a Repository of Biomedical Ontologies wit...GraphConnect Europe 2016 - Building a Repository of Biomedical Ontologies wit...
GraphConnect Europe 2016 - Building a Repository of Biomedical Ontologies wit...Neo4j
 
Graph Processing with Apache TinkerPop
Graph Processing with Apache TinkerPopGraph Processing with Apache TinkerPop
Graph Processing with Apache TinkerPopJason Plurad
 
GraphConnect Europe 2016 - How the ICIJ Used Neo4j to Unravel the Panama Pape...
GraphConnect Europe 2016 - How the ICIJ Used Neo4j to Unravel the Panama Pape...GraphConnect Europe 2016 - How the ICIJ Used Neo4j to Unravel the Panama Pape...
GraphConnect Europe 2016 - How the ICIJ Used Neo4j to Unravel the Panama Pape...Neo4j
 
GraphConnect Europe 2016 - Semantic PIM: Using a Graph Data Model at Toy Manu...
GraphConnect Europe 2016 - Semantic PIM: Using a Graph Data Model at Toy Manu...GraphConnect Europe 2016 - Semantic PIM: Using a Graph Data Model at Toy Manu...
GraphConnect Europe 2016 - Semantic PIM: Using a Graph Data Model at Toy Manu...Neo4j
 
Neo4j GraphTalks - Semantische Netze
Neo4j GraphTalks - Semantische NetzeNeo4j GraphTalks - Semantische Netze
Neo4j GraphTalks - Semantische NetzeNeo4j
 
Neo4j GraphTalks - Einführung in Graphdatenbanken
Neo4j GraphTalks - Einführung in GraphdatenbankenNeo4j GraphTalks - Einführung in Graphdatenbanken
Neo4j GraphTalks - Einführung in GraphdatenbankenNeo4j
 

Viewers also liked (20)

GraphConnect Europe 2016 - How Go and Neo4j enabled the FT to Deliver at Spee...
GraphConnect Europe 2016 - How Go and Neo4j enabled the FT to Deliver at Spee...GraphConnect Europe 2016 - How Go and Neo4j enabled the FT to Deliver at Spee...
GraphConnect Europe 2016 - How Go and Neo4j enabled the FT to Deliver at Spee...
 
GraphConnect Europe 2016 - Moving Graphs to Production at Scale - Ian Robinson
GraphConnect Europe 2016 - Moving Graphs to Production at Scale - Ian RobinsonGraphConnect Europe 2016 - Moving Graphs to Production at Scale - Ian Robinson
GraphConnect Europe 2016 - Moving Graphs to Production at Scale - Ian Robinson
 
GraphConnect Europe 2016 - Governing Multichannel Services with Graphs - Albe...
GraphConnect Europe 2016 - Governing Multichannel Services with Graphs - Albe...GraphConnect Europe 2016 - Governing Multichannel Services with Graphs - Albe...
GraphConnect Europe 2016 - Governing Multichannel Services with Graphs - Albe...
 
GraphConnect Europe 2016 - Faster Lap Times with Neo4j - Srinivas Suravarapu
GraphConnect Europe 2016 - Faster Lap Times with Neo4j - Srinivas SuravarapuGraphConnect Europe 2016 - Faster Lap Times with Neo4j - Srinivas Suravarapu
GraphConnect Europe 2016 - Faster Lap Times with Neo4j - Srinivas Suravarapu
 
GraphConnect Europe 2016 - Pushing the Evolution of Software Analytics with G...
GraphConnect Europe 2016 - Pushing the Evolution of Software Analytics with G...GraphConnect Europe 2016 - Pushing the Evolution of Software Analytics with G...
GraphConnect Europe 2016 - Pushing the Evolution of Software Analytics with G...
 
GraphConnect Europe 2016 - Navigating All the Knowledge - James Weaver
GraphConnect Europe 2016 - Navigating All the Knowledge - James WeaverGraphConnect Europe 2016 - Navigating All the Knowledge - James Weaver
GraphConnect Europe 2016 - Navigating All the Knowledge - James Weaver
 
Slides from GraphDay Santa Clara
Slides from GraphDay Santa ClaraSlides from GraphDay Santa Clara
Slides from GraphDay Santa Clara
 
Intro to Cypher for the SQL Developer
Intro to Cypher for the SQL DeveloperIntro to Cypher for the SQL Developer
Intro to Cypher for the SQL Developer
 
GraphConnect Europe 2016 - Digitalization and Optimizing Business Performance...
GraphConnect Europe 2016 - Digitalization and Optimizing Business Performance...GraphConnect Europe 2016 - Digitalization and Optimizing Business Performance...
GraphConnect Europe 2016 - Digitalization and Optimizing Business Performance...
 
GraphTalk Berlin - Neo4j und FirstSpirit
GraphTalk Berlin - Neo4j und FirstSpiritGraphTalk Berlin - Neo4j und FirstSpirit
GraphTalk Berlin - Neo4j und FirstSpirit
 
GraphConnect Europe 2016 - NoSQL Polyglot Persistence: Tools and Integrations...
GraphConnect Europe 2016 - NoSQL Polyglot Persistence: Tools and Integrations...GraphConnect Europe 2016 - NoSQL Polyglot Persistence: Tools and Integrations...
GraphConnect Europe 2016 - NoSQL Polyglot Persistence: Tools and Integrations...
 
GraphConnect Europe 2016 - Securely Deploying Neo4j into AWS - Benjamin Nussbaum
GraphConnect Europe 2016 - Securely Deploying Neo4j into AWS - Benjamin NussbaumGraphConnect Europe 2016 - Securely Deploying Neo4j into AWS - Benjamin Nussbaum
GraphConnect Europe 2016 - Securely Deploying Neo4j into AWS - Benjamin Nussbaum
 
GraphConnect Europe 2016 - IoT - where do Graphs fit with Business Requiremen...
GraphConnect Europe 2016 - IoT - where do Graphs fit with Business Requiremen...GraphConnect Europe 2016 - IoT - where do Graphs fit with Business Requiremen...
GraphConnect Europe 2016 - IoT - where do Graphs fit with Business Requiremen...
 
GraphConnect Europe 2016 - Building Consumer Trust through Transparency, Comp...
GraphConnect Europe 2016 - Building Consumer Trust through Transparency, Comp...GraphConnect Europe 2016 - Building Consumer Trust through Transparency, Comp...
GraphConnect Europe 2016 - Building Consumer Trust through Transparency, Comp...
 
GraphConnect Europe 2016 - Building a Repository of Biomedical Ontologies wit...
GraphConnect Europe 2016 - Building a Repository of Biomedical Ontologies wit...GraphConnect Europe 2016 - Building a Repository of Biomedical Ontologies wit...
GraphConnect Europe 2016 - Building a Repository of Biomedical Ontologies wit...
 
Graph Processing with Apache TinkerPop
Graph Processing with Apache TinkerPopGraph Processing with Apache TinkerPop
Graph Processing with Apache TinkerPop
 
GraphConnect Europe 2016 - How the ICIJ Used Neo4j to Unravel the Panama Pape...
GraphConnect Europe 2016 - How the ICIJ Used Neo4j to Unravel the Panama Pape...GraphConnect Europe 2016 - How the ICIJ Used Neo4j to Unravel the Panama Pape...
GraphConnect Europe 2016 - How the ICIJ Used Neo4j to Unravel the Panama Pape...
 
GraphConnect Europe 2016 - Semantic PIM: Using a Graph Data Model at Toy Manu...
GraphConnect Europe 2016 - Semantic PIM: Using a Graph Data Model at Toy Manu...GraphConnect Europe 2016 - Semantic PIM: Using a Graph Data Model at Toy Manu...
GraphConnect Europe 2016 - Semantic PIM: Using a Graph Data Model at Toy Manu...
 
Neo4j GraphTalks - Semantische Netze
Neo4j GraphTalks - Semantische NetzeNeo4j GraphTalks - Semantische Netze
Neo4j GraphTalks - Semantische Netze
 
Neo4j GraphTalks - Einführung in Graphdatenbanken
Neo4j GraphTalks - Einführung in GraphdatenbankenNeo4j GraphTalks - Einführung in Graphdatenbanken
Neo4j GraphTalks - Einführung in Graphdatenbanken
 

Similar to GraphConnect Europe 2016 - Enterprise Data Integration with a new JDBC Driver for Neo4j 3.0 - Lorenzo Speranzoni

Don't panic! - Postgres introduction
Don't panic! - Postgres introductionDon't panic! - Postgres introduction
Don't panic! - Postgres introductionFederico Campoli
 
Dmytro Safonov "Open-Source Map Viewers"
Dmytro Safonov  "Open-Source Map Viewers"Dmytro Safonov  "Open-Source Map Viewers"
Dmytro Safonov "Open-Source Map Viewers"LogeekNightUkraine
 
NoSQL Matters 2013 - Introduction to Map Reduce with Couchbase 2.0
NoSQL Matters 2013 - Introduction to Map Reduce with Couchbase 2.0NoSQL Matters 2013 - Introduction to Map Reduce with Couchbase 2.0
NoSQL Matters 2013 - Introduction to Map Reduce with Couchbase 2.0Tugdual Grall
 
Swift 2.2 Design Patterns CocoaConf Austin 2016
Swift 2.2 Design Patterns CocoaConf Austin 2016Swift 2.2 Design Patterns CocoaConf Austin 2016
Swift 2.2 Design Patterns CocoaConf Austin 2016Carl Brown
 
OpenACC Monthly Highlights - March 2018
OpenACC Monthly Highlights - March 2018OpenACC Monthly Highlights - March 2018
OpenACC Monthly Highlights - March 2018NVIDIA
 
RESTful OSGi middleware for NoSQL databases with Docker
RESTful OSGi middleware for NoSQL databases with DockerRESTful OSGi middleware for NoSQL databases with Docker
RESTful OSGi middleware for NoSQL databases with DockerBertrand Delacretaz
 
Advanced Spark and Tensorflow Meetup - London - Nov 15, 2016 - Deploy Spark M...
Advanced Spark and Tensorflow Meetup - London - Nov 15, 2016 - Deploy Spark M...Advanced Spark and Tensorflow Meetup - London - Nov 15, 2016 - Deploy Spark M...
Advanced Spark and Tensorflow Meetup - London - Nov 15, 2016 - Deploy Spark M...Chris Fregly
 
Last Month in PHP - April 2016
Last Month in PHP - April 2016Last Month in PHP - April 2016
Last Month in PHP - April 2016Eric Poe
 
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOVirtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOPaolo Cristofaro
 
OpenACC Monthly Highlights April 2017
OpenACC Monthly Highlights  April 2017OpenACC Monthly Highlights  April 2017
OpenACC Monthly Highlights April 2017NVIDIA
 
Erp 2.50 openbravo environment installation openbravo-wiki
Erp 2.50 openbravo environment installation   openbravo-wikiErp 2.50 openbravo environment installation   openbravo-wiki
Erp 2.50 openbravo environment installation openbravo-wikiyaranusa
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKJosé Paumard
 
OSMC 2013 | Log- und Eventmanagement by Bernd Erk
OSMC 2013 |  Log- und Eventmanagement by Bernd ErkOSMC 2013 |  Log- und Eventmanagement by Bernd Erk
OSMC 2013 | Log- und Eventmanagement by Bernd ErkNETWAYS
 

Similar to GraphConnect Europe 2016 - Enterprise Data Integration with a new JDBC Driver for Neo4j 3.0 - Lorenzo Speranzoni (20)

SFScon19 - Alexander Jacob - openEO
SFScon19 - Alexander Jacob - openEOSFScon19 - Alexander Jacob - openEO
SFScon19 - Alexander Jacob - openEO
 
Don't panic! - Postgres introduction
Don't panic! - Postgres introductionDon't panic! - Postgres introduction
Don't panic! - Postgres introduction
 
Pg big fast ugly acid
Pg big fast ugly acidPg big fast ugly acid
Pg big fast ugly acid
 
Roslyn
RoslynRoslyn
Roslyn
 
Dmytro Safonov "Open-Source Map Viewers"
Dmytro Safonov  "Open-Source Map Viewers"Dmytro Safonov  "Open-Source Map Viewers"
Dmytro Safonov "Open-Source Map Viewers"
 
NoSQL Introduction
NoSQL IntroductionNoSQL Introduction
NoSQL Introduction
 
NoSQL Introduction
NoSQL IntroductionNoSQL Introduction
NoSQL Introduction
 
NoSQL Matters 2013 - Introduction to Map Reduce with Couchbase 2.0
NoSQL Matters 2013 - Introduction to Map Reduce with Couchbase 2.0NoSQL Matters 2013 - Introduction to Map Reduce with Couchbase 2.0
NoSQL Matters 2013 - Introduction to Map Reduce with Couchbase 2.0
 
Swift 2.2 Design Patterns CocoaConf Austin 2016
Swift 2.2 Design Patterns CocoaConf Austin 2016Swift 2.2 Design Patterns CocoaConf Austin 2016
Swift 2.2 Design Patterns CocoaConf Austin 2016
 
Open stack nova reverse engineer
Open stack nova reverse engineerOpen stack nova reverse engineer
Open stack nova reverse engineer
 
OpenACC Monthly Highlights - March 2018
OpenACC Monthly Highlights - March 2018OpenACC Monthly Highlights - March 2018
OpenACC Monthly Highlights - March 2018
 
RESTful OSGi middleware for NoSQL databases with Docker
RESTful OSGi middleware for NoSQL databases with DockerRESTful OSGi middleware for NoSQL databases with Docker
RESTful OSGi middleware for NoSQL databases with Docker
 
SFScon 2020 - Peter Hopfgartner - Open Data de luxe
SFScon 2020 - Peter Hopfgartner - Open Data de luxeSFScon 2020 - Peter Hopfgartner - Open Data de luxe
SFScon 2020 - Peter Hopfgartner - Open Data de luxe
 
Advanced Spark and Tensorflow Meetup - London - Nov 15, 2016 - Deploy Spark M...
Advanced Spark and Tensorflow Meetup - London - Nov 15, 2016 - Deploy Spark M...Advanced Spark and Tensorflow Meetup - London - Nov 15, 2016 - Deploy Spark M...
Advanced Spark and Tensorflow Meetup - London - Nov 15, 2016 - Deploy Spark M...
 
Last Month in PHP - April 2016
Last Month in PHP - April 2016Last Month in PHP - April 2016
Last Month in PHP - April 2016
 
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOVirtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
 
OpenACC Monthly Highlights April 2017
OpenACC Monthly Highlights  April 2017OpenACC Monthly Highlights  April 2017
OpenACC Monthly Highlights April 2017
 
Erp 2.50 openbravo environment installation openbravo-wiki
Erp 2.50 openbravo environment installation   openbravo-wikiErp 2.50 openbravo environment installation   openbravo-wiki
Erp 2.50 openbravo environment installation openbravo-wiki
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
OSMC 2013 | Log- und Eventmanagement by Bernd Erk
OSMC 2013 |  Log- und Eventmanagement by Bernd ErkOSMC 2013 |  Log- und Eventmanagement by Bernd Erk
OSMC 2013 | Log- und Eventmanagement by Bernd Erk
 

More from Neo4j

Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!Neo4j
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeNeo4j
 
Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)Neo4j
 
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdfNeo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdfNeo4j
 
Enabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge GraphsEnabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge GraphsNeo4j
 
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdfNeo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdfNeo4j
 
Neo4j_Jesus Barrasa_The Art of the Possible with Graph.pptx.pdf
Neo4j_Jesus Barrasa_The Art of the Possible with Graph.pptx.pdfNeo4j_Jesus Barrasa_The Art of the Possible with Graph.pptx.pdf
Neo4j_Jesus Barrasa_The Art of the Possible with Graph.pptx.pdfNeo4j
 
SWIFT: Maintaining Critical Standards in the Financial Services Industry with...
SWIFT: Maintaining Critical Standards in the Financial Services Industry with...SWIFT: Maintaining Critical Standards in the Financial Services Industry with...
SWIFT: Maintaining Critical Standards in the Financial Services Industry with...Neo4j
 
Deloitte & Red Cross: Talk to your data with Knowledge-enriched Generative AI
Deloitte & Red Cross: Talk to your data with Knowledge-enriched Generative AIDeloitte & Red Cross: Talk to your data with Knowledge-enriched Generative AI
Deloitte & Red Cross: Talk to your data with Knowledge-enriched Generative AINeo4j
 
Ingka Digital: Linked Metadata by Design
Ingka Digital: Linked Metadata by DesignIngka Digital: Linked Metadata by Design
Ingka Digital: Linked Metadata by DesignNeo4j
 
Discover Neo4j Aura_ The Future of Graph Database-as-a-Service Workshop_3.13.24
Discover Neo4j Aura_ The Future of Graph Database-as-a-Service Workshop_3.13.24Discover Neo4j Aura_ The Future of Graph Database-as-a-Service Workshop_3.13.24
Discover Neo4j Aura_ The Future of Graph Database-as-a-Service Workshop_3.13.24Neo4j
 
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxGraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxNeo4j
 
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxEmil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxNeo4j
 
Identification of insulin-resistance genes with Knowledge Graphs topology and...
Identification of insulin-resistance genes with Knowledge Graphs topology and...Identification of insulin-resistance genes with Knowledge Graphs topology and...
Identification of insulin-resistance genes with Knowledge Graphs topology and...Neo4j
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNeo4j
 
EY: Graphs as Critical Enablers for LLM-based Assistants- the Case of Custome...
EY: Graphs as Critical Enablers for LLM-based Assistants- the Case of Custome...EY: Graphs as Critical Enablers for LLM-based Assistants- the Case of Custome...
EY: Graphs as Critical Enablers for LLM-based Assistants- the Case of Custome...Neo4j
 
GraphSummit London Feb 2024 - ABK - Neo4j Product Vision and Roadmap.pptx
GraphSummit London Feb 2024 - ABK - Neo4j Product Vision and Roadmap.pptxGraphSummit London Feb 2024 - ABK - Neo4j Product Vision and Roadmap.pptx
GraphSummit London Feb 2024 - ABK - Neo4j Product Vision and Roadmap.pptxNeo4j
 
The Art of the Possible with Graph by Dr Jim Webber Neo4j.pptx
The Art of the Possible with Graph by Dr Jim Webber Neo4j.pptxThe Art of the Possible with Graph by Dr Jim Webber Neo4j.pptx
The Art of the Possible with Graph by Dr Jim Webber Neo4j.pptxNeo4j
 
KUBRICK Graphs: A journey from in vogue to success-ion
KUBRICK Graphs: A journey from in vogue to success-ionKUBRICK Graphs: A journey from in vogue to success-ion
KUBRICK Graphs: A journey from in vogue to success-ionNeo4j
 
SKY Paradigms, change and cake: the steep curve of introducing new technologies
SKY Paradigms, change and cake: the steep curve of introducing new technologiesSKY Paradigms, change and cake: the steep curve of introducing new technologies
SKY Paradigms, change and cake: the steep curve of introducing new technologiesNeo4j
 

More from Neo4j (20)

Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG time
 
Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)
 
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdfNeo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
 
Enabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge GraphsEnabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge Graphs
 
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdfNeo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
 
Neo4j_Jesus Barrasa_The Art of the Possible with Graph.pptx.pdf
Neo4j_Jesus Barrasa_The Art of the Possible with Graph.pptx.pdfNeo4j_Jesus Barrasa_The Art of the Possible with Graph.pptx.pdf
Neo4j_Jesus Barrasa_The Art of the Possible with Graph.pptx.pdf
 
SWIFT: Maintaining Critical Standards in the Financial Services Industry with...
SWIFT: Maintaining Critical Standards in the Financial Services Industry with...SWIFT: Maintaining Critical Standards in the Financial Services Industry with...
SWIFT: Maintaining Critical Standards in the Financial Services Industry with...
 
Deloitte & Red Cross: Talk to your data with Knowledge-enriched Generative AI
Deloitte & Red Cross: Talk to your data with Knowledge-enriched Generative AIDeloitte & Red Cross: Talk to your data with Knowledge-enriched Generative AI
Deloitte & Red Cross: Talk to your data with Knowledge-enriched Generative AI
 
Ingka Digital: Linked Metadata by Design
Ingka Digital: Linked Metadata by DesignIngka Digital: Linked Metadata by Design
Ingka Digital: Linked Metadata by Design
 
Discover Neo4j Aura_ The Future of Graph Database-as-a-Service Workshop_3.13.24
Discover Neo4j Aura_ The Future of Graph Database-as-a-Service Workshop_3.13.24Discover Neo4j Aura_ The Future of Graph Database-as-a-Service Workshop_3.13.24
Discover Neo4j Aura_ The Future of Graph Database-as-a-Service Workshop_3.13.24
 
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxGraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
 
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxEmil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
 
Identification of insulin-resistance genes with Knowledge Graphs topology and...
Identification of insulin-resistance genes with Knowledge Graphs topology and...Identification of insulin-resistance genes with Knowledge Graphs topology and...
Identification of insulin-resistance genes with Knowledge Graphs topology and...
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4j
 
EY: Graphs as Critical Enablers for LLM-based Assistants- the Case of Custome...
EY: Graphs as Critical Enablers for LLM-based Assistants- the Case of Custome...EY: Graphs as Critical Enablers for LLM-based Assistants- the Case of Custome...
EY: Graphs as Critical Enablers for LLM-based Assistants- the Case of Custome...
 
GraphSummit London Feb 2024 - ABK - Neo4j Product Vision and Roadmap.pptx
GraphSummit London Feb 2024 - ABK - Neo4j Product Vision and Roadmap.pptxGraphSummit London Feb 2024 - ABK - Neo4j Product Vision and Roadmap.pptx
GraphSummit London Feb 2024 - ABK - Neo4j Product Vision and Roadmap.pptx
 
The Art of the Possible with Graph by Dr Jim Webber Neo4j.pptx
The Art of the Possible with Graph by Dr Jim Webber Neo4j.pptxThe Art of the Possible with Graph by Dr Jim Webber Neo4j.pptx
The Art of the Possible with Graph by Dr Jim Webber Neo4j.pptx
 
KUBRICK Graphs: A journey from in vogue to success-ion
KUBRICK Graphs: A journey from in vogue to success-ionKUBRICK Graphs: A journey from in vogue to success-ion
KUBRICK Graphs: A journey from in vogue to success-ion
 
SKY Paradigms, change and cake: the steep curve of introducing new technologies
SKY Paradigms, change and cake: the steep curve of introducing new technologiesSKY Paradigms, change and cake: the steep curve of introducing new technologies
SKY Paradigms, change and cake: the steep curve of introducing new technologies
 

Recently uploaded

Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarPrecisely
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 

Recently uploaded (20)

Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity Webinar
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
20230104 - machine vision
20230104 - machine vision20230104 - machine vision
20230104 - machine vision
 

GraphConnect Europe 2016 - Enterprise Data Integration with a new JDBC Driver for Neo4j 3.0 - Lorenzo Speranzoni

  • 1. / 50 LONDON, 26 April 2016 1 LORENZO SPERANZONI | @inserpio CEO @ LARUS Business Automation - GCE2016 BRONZE SPONSOR GraphConnect Europe 2016 Explore the new COUCHBASE and JDBC integrations for Neo4j 3.0
  • 2. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 AGENDA ✦ Let’s say Hi ( “Ciao” !! ) ✦ Neo4j - Couchbase Connector ✦ JDBC Driver with BOLT for Neo4j 3.0 2
  • 3. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 AGENDA ✦ Let’s say Hi ( “Ciao” !! ) ✦ Neo4j - Couchbase Connector ✦ JDBC Driver with BOLT for Neo4j 3.0 3
  • 4. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 WELCOME AND THANKS FOR COMING TO THIS LIGHTNING TALK 4
  • 5. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 5 [:WORKS_FOR { role: ‘CEO’ }] Venice [:BRONZE_SPONSOR] Lorenzo Speranzoni LARUS Business Automation [:BASED_IN] [:CERTIFIED_ON] [:PARTNER_OF]
  • 6. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 6 … this is a typical day in Venice George Clooney Wedding BY THE WAY … … NOT THIS ONE DURING … #*@!#!!
  • 7. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 7 2016 Neo4j Contributors 20152011 First Spikes ( with neo4j 1.x !! ) 2013 LARUS’ TRIP WITH NEO4J (quite a long and cool story)
  • 8. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 8 CONSULTING [:DELIVERS] TRAININGS SUPPORT [:DELIVERS] [:DELIVERS] [:FOR] [:ON] [:ON] [:ADOPTED]
  • 9. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 AGENDA ✦ Let’s say Hi ( “Ciao” !! ) ✦ Neo4j - Couchbase Connector ✦ JDBC Driver with BOLT for Neo4j 3.0 9
  • 10. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 The new Neo4j - Couchbase Connector 10
  • 11. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 KEY ASPECTS ✦ BI-DIRECTIONAL ✦ CONFIGURABLE 11
  • 12. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 https://developer.spotify.com/web-api/console/get-album 12 CASESTUDY
  • 13. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 https://developer.spotify.com/web-api/console/get-album [ RESPONSE ] 13 CASESTUDY
  • 14. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 BASIC JSON 2 GRAPH CONVERSION RULES PLEASE NOTE. ✦ Most of the following approaches come from William Lion’s (@lionwj)
 MongoDB - Neo4j Connector (http://neo4j.com/blog/neo4j-doc-manager-polyglot- persistence-mongodb/) ✦ Don’t miss William’s session “NoSQL Polyglot Persistence: Tools and Integrations” here at GCE2016 (4:30PM), for many more examples about managing multiple databases. 14
  • 15. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 PRIMITIVE ATTRIBUTES … 15 album_type: “U2” href: “https://api.spotify.com/v1/albums/586Z…” id: “586ZRfgsIckfcKvHVcGM4V” name: “The Joshua Tree” popularity: 53 release_date: “1987-03-10” release_date_precision: “day” type: “album” uri: “spotify:album:586ZRfgsIckfcKvHVcGM4V” ALBUM BECOME NODE’S ATTRIBUTES
  • 16. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 ARRAY OF PRIMITIVE ATTRIBUTES … 16 album_type: “U2” available_markets: [ “MX”, “US” ] href: “https://api.spotify.com/v1/albums/586Z…” id: “586ZRfgsIckfcKvHVcGM4V” name: “The Joshua Tree” popularity: 53 release_date: “1987-03-10” release_date_precision: “day” type: “album” uri: “spotify:album:586ZRfgsIckfcKvHVcGM4V” ALBUM STILL BECOME NODE’S ATTRIBUTES
  • 17. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 OBJECT ATTRIBUTES . . . 17 href: “https://api.spotify.com/v1/artists/51B…” id: “51Blml2LZPmy7TTiAg47vQ” name: “U2” type: “artist” uri: “spotify:album:51Blml2LZPmy7TTiAg47vQ” ARTIST BECOME CONNECTED NODES name: “The Joshua Tree” ALBUM [ :ALBUM_ARTIST ]
  • 18. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 ARRAY OF OBJECTS ATTRIBUTES … 18 ARTIST AGAIN BECOME CONNECTED NODES ALBUM disc_number: 1 duration_ms: 337973 href: “https://api.spotify.com/v1/tracks/3zq…” id: “3zqTlJtp7KTPrNUKNahvAo” name: “Where The Streets Have No Name” uri: “spotify:album:3zqTlJtp7KTPrNUKNahvAo” track_number: 1 type: “track” ITEM TRACKS ITEM 2 ITEM 3ITEM 11 ITEM 4 [:TRACKS_ITEM S]
  • 19. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 Neo4j - Couchbase Connector COMPONENTS (and a bit of noisy code) 19
  • 20. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 Neo4j - Couchbase Connector Components 20
  • 21. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 1. Couchbase Mutation Listener public class CouchbaseEvent { /** * Wrapped {@link CouchbaseMessage}. */ private CouchbaseMessage message; } public class CouchbaseEventFilter { /** * Returns true if event is a {@link MutationMessage}. */ public static boolean accept(final CouchbaseEvent couchbaseEvent) { return couchbaseEvent.getMessage() instanceof MutationMessage; } } 21
  • 22. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 1. Couchbase Mutation Listener public class CouchbaseEventHandler implements EventHandler<CouchbaseEvent> { /** * Handles {@link CouchbaseEvent}s that come into the response RingBuffer. */ @Override public void onEvent(final CouchbaseEvent event, final long sequence, final boolean endOfBatch) throws Exception { if (CouchbaseEventFilter.accept(event)) { MutationMessage mutationMessage = (MutationMessage) event.getMessage(); ByteBuf jsonDocument = mutationMessage.content(); DocumentTransformer<String> remoteNeo4jTransformer = new RemoteNeo4jTransformer(); remoteNeo4jTransformer.transform(mutationMessage.key(), “COUCHBASE_DOCUMENT", asString(jsonDocument)); } } } 22
  • 23. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 1. Couchbase Mutation Listener public class CouchbaseMutationListener extends Thread { /** * Builds and starts the event consumer. */ public void buildDisruptor() { Disruptor<CouchbaseEvent> disruptor = new Disruptor<CouchbaseEvent>(new CouchbaseEventFactory(), 32, Executors.newCachedThreadPool()); disruptor.handleExceptionsWith(new CouchbaseExceptionLogger()); disruptor.handleEventsWith(new CouchbaseEventHandler()); this.couchbaseEventBuffer = disruptor.start(); } /** * Connect this dispatcher to Couchbase. */ public void connect() { this.couchbaseClusterFacade.send(new SeedNodesRequest(couchbaseNodes)).timeout(2, TimeUnit.SECONDS).toBlocking().single(); this.couchbaseClusterFacade.send(new OpenBucketRequest(this.couchbaseBucket, couchbasePassword)).timeout(2, TimeUnit.SECONDS).toBlocking().single(); } } 23
  • 24. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 2. Neo4j JSON Loader public class JsonDocument { private String id; private String type; private String content; private JsonMappingStrategy mappingStrategy; private List<JsonObjectDescriptor> objectDescriptors; } public enum JsonMappingStrategy { ATTRIBUTE_BASED(“attribute”), DOMAIN_DRIVEN(“domain”), STORED_PROCEDURE(“stored procedure”), } 24 public class JsonObjectDescriptor { private String entityName; private List<String> uniqueKeyAttributes; private String typeAttribute; }
  • 25. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 2. Neo4j JSON Loader @Path("/") public class JsonLoaderRestController { private final GraphDatabaseService graphDatabaseService; public JsonLoaderRestController(@Context GraphDatabaseService graphDatabaseService) { this.graphDatabaseService = graphDatabaseService; } @POST @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Response loadJSON(JAXBElement<JsonDocument> jsonDocumentWrapper) { JsonDocument jsonDocument = jsonDocumentWrapper.getValue(); JsonLoaderService loaderService = new DefaultJsonLoaderService(this.graphDatabaseService); QueryStatistics queryStatistics = loaderService.save(jsonDocument); return Response.ok(queryStatistics).build(); } } neo4j-server.properties org.neo4j.server.thirdparty_jaxrs_classes=it.larusba.integration.neo4j.jsonloader.rest=/jsonloader 25
  • 26. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 2. Neo4j JSON Loader public class DefaultJsonLoaderService implements JsonLoaderService { @Override public JsonLoaderStatistics save(JsonDocument jsonDocument) throws JsonParseException, JsonMappingException, IOException { JsonTransformer<String> jsonTransformer = JsonTransformerFactory.getInstance(jsonDocument.getMappingStrategy()); String cypher = jsonTransformer.transform(jsonDocument); try (Transaction tx = this.graphDatabaseService.beginTx()) { Result result = this.graphDatabaseService.execute(cypher); jsonLoaderStatistics = new JsonLoaderStatistics(result.getQueryStatistics()); tx.success(); } return jsonLoaderStatistics; } 26
  • 27. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 3. Neo4j Mutation Listener public class Neo4jEventListener implements TransactionEventHandler<Void> { private GraphDatabaseService db; public Neo4jEventListener(GraphDatabaseService db) { this.db = db; } public void afterCommit(TransactionData data, Void state) { List<JsonDocument> jsonDocuments = buildJSONDocument(data); if (CollectionUtils.isNotEmpty(jsonDocuments)) { CouchbaseJSONLoader.upsert(jsonDocuments); } } } 27
  • 28. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 4. Couchbase JSON Loader public class CouchbaseJSONLoader public static void upsert(List<JsonDocument> jsonDocuments) { Cluster cluster = CouchbaseCluster.create(); Bucket defaultBucket = cluster.openBucket(); for (JsonDocument jsonDocument : jsonDocuments) { defaultBucket.upsert(jsonDocument); } cluster.disconnect(); } } 28
  • 29. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 Neo4j - Couchbase Connector HOW ABOUT THE DOMAIN? WOULDN’T BE COOL TO BE ABLE TO TRAIN THE “JSON LOADER” WITH THE BUSINESS DOMAIN YOUR WORKING ON? 29
  • 30. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 HOW ABOUT THESE INTERESTING ATTRIBUTES ? 30
  • 31. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 31 WHY DON’T WE USE “ID” ATTRIBUTES TO UNIQUELY IDENTIFY NODES? We could use them on MERGE statements: MERGE (album:ALBUM {id: ‘586ZRfgsIckfcKvHVcGM4V’}) MERGE (track:TRACK {id: ‘3zqTlJtp7KTPrNUKNahvAo’})
  • 32. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 32 AND WHY DON’T WE USE “TYPE” ATTRIBUTES AS NODES’ LABELS? MERGE (album:ALBUM {id: ‘586ZRfgsIckfcKvHVcGM4V’}) MERGE (track:TRACK {id: ‘3zqTlJtp7KTPrNUKNahvAo’})
  • 33. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 DESCRIBE YOUR DOMAIN i.e. instruct how the JSON 2 GRAPH transformer should behave List<JsonObjectDescriptor> jsonObjectDescriptors = new ArrayList<JsonObjectDescriptor>(); jsonObjectDescriptors.add(new JsonObjectDescriptor("Album", Arrays.asList("id"), “type”)); jsonObjectDescriptors.add(new JsonObjectDescriptor("Artists", Arrays.asList("id"), “type")); jsonObjectDescriptors.add(new JsonObjectDescriptor("Images", Arrays.asList("url"), null)); jsonObjectDescriptors.add(new JsonObjectDescriptor("Tracks", Arrays.asList("href"), null)); jsonObjectDescriptors.add(new JsonObjectDescriptor("Items", Arrays.asList("id"), “type”)); JsonDocument jsonDocument = new JsonDocument("U2TheJoshuaTreeAlbum", "Album", spotifyTheJoshuaTreeAlbumDocument, JsonMappingStrategy.DOMAIN_DRIVEN, jsonObjectDescriptors); 33 key type json strategy descriptors
  • 34. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 DOMAIN DRIVER JSON TRANSFORMER public class DomainDrivenJsonTransformer implements JsonTransformer<String> { @Override public String transform(JsonDocument jsonDocument) throws JsonParseException, JsonMappingException, IOException { 34
  • 35. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 35
  • 36. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 36 “DOMAIN DRIVEN” TRANSFORMER
 ALLOWS YOU TO RE-USE
 “U2” and all other NODES … SO THAT YOU GET A REAL BENEFIT FROM RELATIONSHIPS
  • 37. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 AGENDA ✦ Let’s say Hi ( “Ciao” !! ) ✦ Neo4j - Couchbase Connector ✦ JDBC Driver with BOLT for Neo4j 3.0 37
  • 38. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 38 The new JDBC Driver with BOLT Neo4j 3.0 APPLICATION JDBC EMIL’S OPENING KEYNOTE
  • 39. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 Neo4j JDBC Driver: A-TEAM 39 Project Leader HTTP Protocol Tester BENOIT SIMARD STEFAN ARMBRUSTER MICHAEL HUNGER Dev & Project Leader RALF BECHER
  • 40. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 KEY ASPECTS ✦ MAKE USE OF THE NEW B.O.L.T. PROTOCOL ✦ MODULAR DESING (bolt, http, in-memory, file) ✦ HEAVILY TESTED ✦ FOCUS ON PERFORMANCE 40
  • 41. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 41 1. Make use of the new BOLT protocol Neo4j 3.0 NEO4J-JDBC BOLT module neo4j-java-driver APPLICATION https://github.com/neo4j/neo4j-java-driver
  • 42. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 42 2. Modular design Neo4j 3.0 NEO4J-JDBC BOLT HTTP FILE IN-MEMORY
  • 43. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 3. Heavily tested ✦ ~300 unit tests ✦ ~50 integration tests 43 for ~60 classes
  • 44. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 4. Focus on performance ✦ OLD: 30’20’’ ✦ NEW: 17’11’’ 44 30.000 CSV rows WOW! ALMOST HALF TIME
  • 45. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 45 INTEGRATE NEO4J WITH ALL YOUR FAVOURITE TOOLS AND PRODUCTS Neo4j 3.0
  • 46. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 Minimum Viable Snippet // Make sure Neo4j Driver is registered Class.forName(“it.larusba.neo4j.jdbc.bolt.BoltDriver”); // Connect Connection con = DriverManager.getConnection(“jdbc:bolt://localhost”); // Query try (Statement stmt = con.createStatement()) { ResultSet rs = stmt.executeQuery(“MATCH (n:User) RETURN n.name”); while (rs.next()) { System.out.println(rs.getString(“n.name”)); } } con.close(); 46
  • 47. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 47 RC1 Neo4j Contrib M5M3 M4 Neo4j 3.0 JDBC Driver RELEASE PLAN HTTP PROTOCOL java.sql.CallableStatement FULLY RETRO- COMPATIBILITY BOLT PROTOCOL early autumn PRODUCTION READY TODAY AT GCE2016 early summer
  • 48. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 HAVE FUN WITH US ✦ https://github.com/larusba/neo4j-jdbc ✦ https://github.com/larusba/neo4j-couchbase-connector ✦ https://github.com/larusba/neo4j-json-loader 48
  • 49. / 50 LONDON, 26 April 2016GraphConnect Europe 2016 EXPLORE THE NEW COUCHBASE & JDBC INTEGRATIONS FOR NEO4J 3.0 COME AND TALK WITH THESE GUYS!!! THEY DID ALL THIS STUFF & THEY’RE IN THE ROOM :-) ✦ Mauro Roiter (@MauroRoiter) ✦ Marco Falcier (@mfalcier) ✦ Alberto D’Este (@ziotobia) ✦ Gianmarco Laggia (@glaggia) 49
  • 50. / 50 LONDON, 26 April 2016 50 LORENZO SPERANZONI | @inserpio CEO @ LARUS Business Automation - GCE2016 BRONZE SPONSOR GraphConnect Europe 2016 THANK YOU