View
1.480
Download
3
Category
Preview:
DESCRIPTION
Citation preview
NEO4J ET SON ECOSYSTÈME
Sylvain ROUSSYIngénieur conseil – HINNOYA
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Ingénieur conseil – HINNOYA
sroussy@hinnoya.fr@SylvainRoussy
JUG Lyon : – Neo4j et son ecosystème 15 Janvier 2013 –
sroussy@hinnoya.fr
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 – sroussy@hinnoya.fr
NEO4j avec JavaNEO4j sans JavaInterroger NEO4jIntégrer NEO4jS’abstraire de NEO4jOutillageConclusions
QU’EST-CE QUE NEO4J ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Qu’est-ce que NEO4j ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Qu’est-ce que NEO4j ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 5
Qu’est-ce que NEO4j ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 6
Qu’est-ce que NEO4j ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 7
Qu’est-ce que NEO4j ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 8
Qu’est-ce que NEO4j ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 9
Qu’est-ce que NEO4j ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 10
QU’EST-CE QU’UNE BASE DE DONNÉES ORIENTÉE « GRAPHE »?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
DONNÉES ORIENTÉE « GRAPHE »?
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 – sroussy@hinnoya.fr
Ce graphe est basé sur des Nœuds et des Arcs
NEO4j : Node – RelationshipsBlueprints : Vertex – Edges
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 – sroussy@hinnoya.fr
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 – sroussy@hinnoya.fr
DEX (C++)Sparsity Technologies
TinkerGraph (Java)TinkerPop
POURQUOI UTILISER UNE BASE DE DONNÉES ORIENTÉE « GRAPHE »?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
DONNÉES ORIENTÉE « GRAPHE »?
Reconnaître des structures
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Reconnaître des structures
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Reconnaître des structures
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
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 – sroussy@hinnoya.fr
Ami2 -> « OFFRE » -> Sylvain
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 – sroussy@hinnoya.fr
� 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.)
A PROPOS DE NEO4J
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
A PROPOS DE 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 – sroussy@hinnoya.fr
30 Milliards de nœuds30 Milliards de relations64 Milliards de propriétés
www.neo4j.org« HEROKU »
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 – sroussy@hinnoya.fr
new EmbeddedGraphDatabase("/var/mydb");
� Server (JETTY)� REST API
NEO4J AVEC JAVA
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
NEO4J AVEC JAVA
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 – sroussy@hinnoya.fr
// Création d’un second nœud
Node node2 = graph.createNode();node1.setProperty("name", « 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 – sroussy@hinnoya.fr
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 – sroussy@hinnoya.fr
� relationship_auto_indexing=true� relationship_keys_indexable=name,age
Explicitement � Par le code (IndexManager)� Manuellement (Shell)� REST
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 – sroussy@hinnoya.fr
// RollBack
tx.failure ();
Fermeture de la transaction (relâchement des verrous)
tx.finish ();
NEO4J SANS JAVA
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
NEO4J SANS JAVA
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 – sroussy@hinnoya.fr
}
// Création d’un second noeud
POST http://localhost:7474/db/data/node Accept: application/jsonContent-Type: application/json
{"name" : « 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 – sroussy@hinnoya.fr
"type" : « EST"}
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 – sroussy@hinnoya.fr
Content-Type: application/json
INTERROGER NEO4J
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
INTERROGER 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 – sroussy@hinnoya.fr
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
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 – sroussy@hinnoya.fr
MATCH sylvain-[:PRETE]->ami-[:VENDS]->ami2-[:OFFRE]->sylvain
RETURN ami.Nom AS REVENDEUR, ami2.Nom AS VICTIME
CYPHER : Langage d’interrogation
CYPHER s’utilise depuis :
� Le code JAVA
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
� L’API REST
� La console d’administration Web
� Le Shell
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 – sroussy@hinnoya.fr
.relationships(VENDS, Direction.OUTGOING )
.relationships(OFFRE, Direction.OUTGOING )
.evaluator( Evaluators.toDepth( 5 ) )
.uniqueness (Uniqueness.RELATIONSHIP_PATH);
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 – sroussy@hinnoya.fr
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)
GREMLIN : Langage d’interrogation (Tinkerpop)
GREMLIN est GroovyNEO4J, Tinkergraph, DEX, OrientDB, etc.
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
INTÉGRER NEO4J (DAO)
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
INTÉGRER NEO4J (DAO)
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 – sroussy@hinnoya.fr
this.underlyingNode = personNode;
}
protected Node getUnderlyingNode() {
return underlyingNode;
}
public String getName() {
return (String)underlyingNode.getProperty( NAME );
} […]
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 – sroussy@hinnoya.fr
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
S’ABSTRAIRE DE NEO4J
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
S’ABSTRAIRE DE NEO4J
Tinkerpop
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
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 – sroussy@hinnoya.fr
Vertex v2 = blueGraph.addVertex(2);
v2.setProperty("name", "NEO4j");
Edge rel = blueGraph.addEdge(3, v1, v2, "EST");
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 – sroussy@hinnoya.fr
public void setLastName (String lastname);
@Adjacency (label = "KNOWS")public Iterable<FramePerson> getFriends ();
@Adjacency (label = "KNOWS")public void addFriend (FramesPerson friend);
}
OUTILLAGE
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
OUTILLAGE
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 – sroussy@hinnoya.fr
Console Web - Dashboard
http://monserveur_db:7474
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Console Web – Data browser
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Console Web – Console
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Neoclipse
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
POURQUOI NEO4J ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
POURQUOI 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 – sroussy@hinnoya.fr
• Version Advanced (AGPL)• Advanced monitoring
• Version Enterprise (AGPL)• Sauvegarde à chaud• HA
Documentation dense (+500 pages pour le manuel)
CONCLUSION
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
CONCLUSION
Conclusion
Représentation naturelle des relations
« Data driven »
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
« Data driven »
Savoir-faire en cours…
Merci de votre attention !
Questions ?
JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
Recommended