57
NEO4J ET SON ECOSYSTÈME Sylvain ROUSSY Ingénieur conseil HINNOYA JUG Lyon : –Neo4j et son écosystème 15 Janvier 2013 – [email protected] Ingénieur conseil HINNOYA [email protected] @SylvainRoussy JUG Lyon : –Neo4j et son ecosystème 15 Janvier 2013 – [email protected]

201301 - Focus Neo4j

  • Upload
    lyonjug

  • View
    1.480

  • Download
    3

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 201301 - Focus Neo4j

NEO4J ET SON ECOSYSTÈME

Sylvain ROUSSYIngénieur conseil – HINNOYA

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Ingénieur conseil – HINNOYA

[email protected]@SylvainRoussy

JUG Lyon : – Neo4j et son ecosystème 15 Janvier 2013 –

[email protected]

Page 2: 201301 - Focus Neo4j

Plan

Qu’est-ce que NEO4j ?Qu’est qu’une BDD orientée « Graphe » ?Pourquoi utiliser une BDD orientée « Graphe » ?A propos de NEO4j…NEO4j avec Java

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

NEO4j avec JavaNEO4j sans JavaInterroger NEO4jIntégrer NEO4jS’abstraire de NEO4jOutillageConclusions

Page 3: 201301 - Focus Neo4j

QU’EST-CE QUE NEO4J ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 4: 201301 - Focus Neo4j

Qu’est-ce que NEO4j ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 5: 201301 - Focus Neo4j

Qu’est-ce que NEO4j ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected] 5

Page 6: 201301 - Focus Neo4j

Qu’est-ce que NEO4j ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected] 6

Page 7: 201301 - Focus Neo4j

Qu’est-ce que NEO4j ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected] 7

Page 8: 201301 - Focus Neo4j

Qu’est-ce que NEO4j ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected] 8

Page 9: 201301 - Focus Neo4j

Qu’est-ce que NEO4j ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected] 9

Page 10: 201301 - Focus Neo4j

Qu’est-ce que NEO4j ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected] 10

Page 11: 201301 - Focus Neo4j

QU’EST-CE QU’UNE BASE DE DONNÉES ORIENTÉE « GRAPHE »?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

DONNÉES ORIENTÉE « GRAPHE »?

Page 12: 201301 - Focus Neo4j

Base de données orientée « Graphe »

* Une base dont la structure est représentée sous forme de « graphe » (théorie des graphes)

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Ce graphe est basé sur des Nœuds et des Arcs

NEO4j : Node – RelationshipsBlueprints : Vertex – Edges

Page 13: 201301 - Focus Neo4j

Base de données orientée « Graphe »

* Dans cette structure de données, nous considérons que la relation est aussi importante que l’entité

La relation est identifiée par un nom (sémantique)

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 14: 201301 - Focus Neo4j

Quelques bases de données orientées « Graphe »

NEO4j (Java)Neo Technology

OrientDB (Java)Nuvela Base

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

DEX (C++)Sparsity Technologies

TinkerGraph (Java)TinkerPop

Page 15: 201301 - Focus Neo4j

POURQUOI UTILISER UNE BASE DE DONNÉES ORIENTÉE « GRAPHE »?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

DONNÉES ORIENTÉE « GRAPHE »?

Page 16: 201301 - Focus Neo4j

Reconnaître des structures

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 17: 201301 - Focus Neo4j

Reconnaître des structures

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 18: 201301 - Focus Neo4j

Reconnaître des structures

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 19: 201301 - Focus Neo4j

Reconnaître des structures

Quels sont, dans mon cercle d’amis, les victimes et les revendeurs de mes livres ?

Sylvain -> « PRETE » -> Ami

Ami -> « VENDS » -> Ami2

Ami2 -> « OFFRE » -> Sylvain

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Ami2 -> « OFFRE » -> Sylvain

Page 20: 201301 - Focus Neo4j

Cas d’utilisations

Où la relation est importante !� Réseaux sociaux (Viadeo, LinkedIn, etc.)

Où la reconnaissance de structure est importante !� Fraudes, Excellences

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

� Fraudes, Excellences� Mes amis qui n’en sont pas…

Où le chemin est important ! (Shortest Path, …)� Généalogie (Héritage)� Système d’information géographique� Séquence (Groupware, etc.)

Page 21: 201301 - Focus Neo4j

A PROPOS DE NEO4J

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

A PROPOS DE NEO4J

Page 22: 201301 - Focus Neo4j

A propos de NEO4j

Editeur : Neo Technology (créée en 2000 – Suède/USA)

Version stable à ce jour : 1.8.1 (14/12/2012)Version en cours de stabilisation : 1.9 M03

30 Milliards de nœuds

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

30 Milliards de nœuds30 Milliards de relations64 Milliards de propriétés

www.neo4j.org« HEROKU »

Page 23: 201301 - Focus Neo4j

A propos de NEO4j

Deux types d’utilisation :

� Embedded

GraphDatabaseService graph =

new EmbeddedGraphDatabase("/var/mydb");

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

new EmbeddedGraphDatabase("/var/mydb");

� Server (JETTY)� REST API

Page 24: 201301 - Focus Neo4j

NEO4J AVEC JAVA

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

NEO4J AVEC JAVA

Page 25: 201301 - Focus Neo4j

Créer des nœuds…

// Création d’un premier nœud

Node node1 = graph.createNode();node1.setProperty("name", "Base de données");

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

// Création d’un second nœud

Node node2 = graph.createNode();node1.setProperty("name", « NEO4j");

Page 26: 201301 - Focus Neo4j

… et créer des relations

// Création d'une relation "EST" du second noeud vers le premier

Relationship rel = node2.createRelationshipTo(node1, DynamicRelationshipType.withName("EST")) ;

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 27: 201301 - Focus Neo4j

Indexer des propriétés (Lucène)

Basé sur triplette : propriété, valeur, objet

Implicitement par configuration� node_auto_indexing=true� node_keys_indexable=name,age� relationship_auto_indexing=true

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

� relationship_auto_indexing=true� relationship_keys_indexable=name,age

Explicitement � Par le code (IndexManager)� Manuellement (Shell)� REST

Page 28: 201301 - Focus Neo4j

Utiliser les transactions (ACID)

// Ouverture et Commit d’une transaction

Transaction tx = graph.beginTx ();[…]tx.success ();

// RollBack

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

// RollBack

tx.failure ();

Fermeture de la transaction (relâchement des verrous)

tx.finish ();

Page 29: 201301 - Focus Neo4j

NEO4J SANS JAVA

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

NEO4J SANS JAVA

Page 30: 201301 - Focus Neo4j

Créer des nœuds…

// Création d’un premier noeud

POST http://localhost:7474/db/data/nodeAccept: application/jsonContent-Type: application/json

{"name" : "base de données"

}

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

}

// Création d’un second noeud

POST http://localhost:7474/db/data/node Accept: application/jsonContent-Type: application/json

{"name" : « NEO4j"

}

Page 31: 201301 - Focus Neo4j

… et créer des relations

// Création d’un premier noeud

POST http://localhost:7474/db/data/node/1/relationshipsAccept: application/jsonContent-Type: application/json

{"to" : "http://localhost:7474/db/data/node/0","type" : « EST"

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

"type" : « EST"}

Page 32: 201301 - Focus Neo4j

Batch

Transaction atomique

POST http://localhost:7474/db/data/batch

Accept: application/json

Content-Type: application/json

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Content-Type: application/json

Page 33: 201301 - Focus Neo4j

INTERROGER NEO4J

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

INTERROGER NEO4J

Page 34: 201301 - Focus Neo4j

CYPHER : Langage d’interrogation

Langage d’interrogation propriétaire à NEO4j

Proche de SQL

Permet l’interrogation et la modification des données

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Basé sur quatre éléments clés :

� START : nœud(s) ou relation(s) de départ

� MATCH : motif relationnel

� WHERE : restriction

� RETURN : éléments à retourner

Page 35: 201301 - Focus Neo4j

CYPHER : Langage d’interrogation

START sylvain=node(0)

MATCH sylvain-[:PRETE]->ami-[:VENDS]->ami2-[:OFFRE]->sylvain

Quels sont, dans mon cercle d’amis, les victimes et les revendeurs de mes livres ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

MATCH sylvain-[:PRETE]->ami-[:VENDS]->ami2-[:OFFRE]->sylvain

RETURN ami.Nom AS REVENDEUR, ami2.Nom AS VICTIME

Page 36: 201301 - Focus Neo4j

CYPHER : Langage d’interrogation

CYPHER s’utilise depuis :

� Le code JAVA

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

� L’API REST

� La console d’administration Web

� Le Shell

Page 37: 201301 - Focus Neo4j

Code Java : Utiliser un « traversier » (Traversal)

TraversalDescription description = Traversal.description()

.breadthFirst()

.relationships (PRETE, Direction.OUTGOING )

.relationships(VENDS, Direction.OUTGOING )

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

.relationships(VENDS, Direction.OUTGOING )

.relationships(OFFRE, Direction.OUTGOING )

.evaluator( Evaluators.toDepth( 5 ) )

.uniqueness (Uniqueness.RELATIONSHIP_PATH);

Page 38: 201301 - Focus Neo4j

Code Java : Utiliser un traversier (Traversal)

Node sylvain = graph.getNodeById(0);

for (Path position : description.traverse( sylvain ) )

{

System.out.println ("Path :"+position.toString());

}

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Path :(0)

Path :(0)--[PRETE,1]-->(2)

Path :(0)--[PRETE,1]-->(2)--[VENDS,2]-->(3)

Path :(0)--[PRETE,1]-->(2)--[VENDS,2]-->(3)--[OFFRE,3]-->(0)

Page 39: 201301 - Focus Neo4j

GREMLIN : Langage d’interrogation (Tinkerpop)

GREMLIN est GroovyNEO4J, Tinkergraph, DEX, OrientDB, etc.

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 40: 201301 - Focus Neo4j

INTÉGRER NEO4J (DAO)

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

INTÉGRER NEO4J (DAO)

Page 41: 201301 - Focus Neo4j

En pure Java

public class Person

{

static final String NAME = "name";

private final Node underlyingNode;

Person( Node personNode ) {

this.underlyingNode = personNode;

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

this.underlyingNode = personNode;

}

protected Node getUnderlyingNode() {

return underlyingNode;

}

public String getName() {

return (String)underlyingNode.getProperty( NAME );

} […]

Page 42: 201301 - Focus Neo4j

Avec Spring DATA

@NodeEntitypublic class Movie{ @GraphIdLong id;

@Indexed(type = FULLTEXT, indexName = "search") String title;

Person director;

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Person director;

@RelatedTo(type="ACTS_IN", direction = INCOMING) Set<Person> actors;

@RelatedToVia(type = "RATED") Iterable<Rating> ratings;

@Query("start movie=node({self}) match movie-->genre<--similar return similar")

Iterable<Movie> similarMovies; }

http://www.springsource.org/spring-data/neo4j

Page 43: 201301 - Focus Neo4j

S’ABSTRAIRE DE NEO4J

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

S’ABSTRAIRE DE NEO4J

Page 44: 201301 - Focus Neo4j

Tinkerpop

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 45: 201301 - Focus Neo4j

Tinkerpop : Blueprints

Graph blueGraph = new Neo4jGraph("/var/mydb");

Vertex v1 = blueGraph.addVertex(1);

v1.setProperty("name", "Base de données");

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Vertex v2 = blueGraph.addVertex(2);

v2.setProperty("name", "NEO4j");

Edge rel = blueGraph.addEdge(3, v1, v2, "EST");

Page 46: 201301 - Focus Neo4j

Tinkerpop : Frames

public interface FramesPerson extends VertexFrame{

@Property ("lastname")public String getLastname ();

@Property ("lastname")public void setLastName (String lastname);

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

public void setLastName (String lastname);

@Adjacency (label = "KNOWS")public Iterable<FramePerson> getFriends ();

@Adjacency (label = "KNOWS")public void addFriend (FramesPerson friend);

}

Page 47: 201301 - Focus Neo4j

OUTILLAGE

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

OUTILLAGE

Page 48: 201301 - Focus Neo4j

Shell

Permet la consultation d’une base en cours d’utilisation !

$> Neo4jShell -path /var/mydb -readonly

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 49: 201301 - Focus Neo4j

Console Web - Dashboard

http://monserveur_db:7474

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 50: 201301 - Focus Neo4j

Console Web – Data browser

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 51: 201301 - Focus Neo4j

Console Web – Console

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 52: 201301 - Focus Neo4j

Neoclipse

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

Page 53: 201301 - Focus Neo4j

POURQUOI NEO4J ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

POURQUOI NEO4J ?

Page 54: 201301 - Focus Neo4j

Pourquoi NEO4j ?

Support d’un éditeur : Neo Technology

• Version communautaire (GPL)

• Version Advanced (AGPL)

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

• Version Advanced (AGPL)• Advanced monitoring

• Version Enterprise (AGPL)• Sauvegarde à chaud• HA

Documentation dense (+500 pages pour le manuel)

Page 55: 201301 - Focus Neo4j

CONCLUSION

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

CONCLUSION

Page 56: 201301 - Focus Neo4j

Conclusion

Représentation naturelle des relations

« Data driven »

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]

« Data driven »

Savoir-faire en cours…

Page 57: 201301 - Focus Neo4j

Merci de votre attention !

Questions ?

JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – [email protected]