201301 - Focus Neo4j

  • 1,216 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,216
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
32
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. NEO4J ET SON ECOSYSTÈME Sylvain ROUSSY Ingénieur conseil – HINNOYA sroussy@hinnoya.fr @SylvainRoussy JUG Lyon : – Neo4j et son ecosystème 15 Janvier 2013 – sroussy@hinnoya.frJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 2. 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 NEO4j sans Java Interroger NEO4j Intégrer NEO4j S’abstraire de NEO4j Outillage ConclusionsJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 3. QU’EST-CE QUE NEO4J ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 4. 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 5
  • 6. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 6
  • 7. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 7
  • 8. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 8
  • 9. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 9
  • 10. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 10
  • 11. 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
  • 12. Base de données orientée « Graphe »* Une base dont la structure est représentée sous forme de « graphe » (théorie des graphes) Ce graphe est basé sur des Nœuds et des Arcs NEO4j : Node – Relationships Blueprints : Vertex – EdgesJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 13. 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
  • 14. Quelques bases de données orientées « Graphe » NEO4j (Java) Neo Technology OrientDB (Java) Nuvela Base DEX (C++) Sparsity Technologies TinkerGraph (Java) TinkerPopJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 15. POURQUOI UTILISER UNE BASE DE DONNÉES ORIENTÉE « GRAPHE »?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 16. Reconnaître des structuresJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 17. Reconnaître des structuresJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 18. Reconnaître des structuresJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 19. 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 » -> SylvainJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 20. Cas d’utilisations Où la relation est importante ! Réseaux sociaux (Viadeo, LinkedIn, etc.) Où la reconnaissance de structure est importante ! 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.)JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 21. A PROPOS DE NEO4JJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 22. 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 30 Milliards de relations 64 Milliards de propriétés www.neo4j.org « HEROKU »JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 23. A propos de NEO4j Deux types d’utilisation : Embedded GraphDatabaseService graph = new EmbeddedGraphDatabase("/var/mydb"); Server (JETTY) REST APIJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 24. NEO4J AVEC JAVAJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 25. Créer des nœuds… // Création d’un premier nœud Node node1 = graph.createNode(); node1.setProperty("name", "Base de données"); // Création d’un second nœud Node node2 = graph.createNode(); node1.setProperty("name", « NEO4j");JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 26. … et créer des relations // Création dune 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
  • 27. 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 relationship_keys_indexable=name,age Explicitement Par le code (IndexManager) Manuellement (Shell) RESTJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 28. Utiliser les transactions (ACID) // Ouverture et Commit d’une transaction Transaction tx = graph.beginTx (); […] tx.success (); // RollBack tx.failure (); Fermeture de la transaction (relâchement des verrous) tx.finish ();JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 29. NEO4J SANS JAVAJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 30. Créer des nœuds… // Création d’un premier noeud POST http://localhost:7474/db/data/node Accept: application/json Content-Type: application/json { "name" : "base de données" } // Création d’un second noeud POST http://localhost:7474/db/data/node Accept: application/json Content-Type: application/json { "name" : « NEO4j" }JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 31. … et créer des relations // Création d’un premier noeud POST http://localhost:7474/db/data/node/1/relationships Accept: application/json Content-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
  • 32. Batch Transaction atomique POST http://localhost:7474/db/data/batch Accept: application/json Content-Type: application/jsonJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 33. INTERROGER NEO4JJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 34. CYPHER : Langage d’interrogation Langage d’interrogation propriétaire à NEO4j Proche de SQL Permet l’interrogation et la modification des données 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 à retournerJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 35. CYPHER : Langage d’interrogation Quels sont, dans mon cercle d’amis, les victimes et les revendeurs de mes livres ?START sylvain=node(0)MATCH sylvain-[:PRETE]->ami-[:VENDS]->ami2-[:OFFRE]->sylvainRETURN ami.Nom AS REVENDEUR, ami2.Nom AS VICTIMEJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 36. CYPHER : Langage d’interrogation CYPHER s’utilise depuis : Le code JAVA L’API REST La console d’administration Web Le ShellJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 37. Code Java : Utiliser un « traversier » (Traversal) TraversalDescription description = Traversal.description() .breadthFirst() .relationships (PRETE, Direction.OUTGOING ) .relationships(VENDS, Direction.OUTGOING ) .relationships(OFFRE, Direction.OUTGOING ) .evaluator( Evaluators.toDepth( 5 ) ) .uniqueness (Uniqueness.RELATIONSHIP_PATH);JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 38. Code Java : Utiliser un traversier (Traversal) Node sylvain = graph.getNodeById(0); for (Path position : description.traverse( sylvain ) ) { System.out.println ("Path :"+position.toString()); } 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)JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 39. GREMLIN : Langage d’interrogation (Tinkerpop) GREMLIN est Groovy NEO4J, Tinkergraph, DEX, OrientDB, etc.JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 40. INTÉGRER NEO4J (DAO)JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 41. En pure Java public class Person { static final String NAME = "name"; private final Node underlyingNode; Person( Node personNode ) { this.underlyingNode = personNode; } protected Node getUnderlyingNode() { return underlyingNode; } public String getName() { return (String)underlyingNode.getProperty( NAME ); } […]JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 42. Avec Spring DATA @NodeEntity public class Movie { @GraphId Long id; @Indexed(type = FULLTEXT, indexName = "search") String title; 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/neo4jJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 43. S’ABSTRAIRE DE NEO4JJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 44. TinkerpopJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 45. Tinkerpop : Blueprints Graph blueGraph = new Neo4jGraph("/var/mydb"); Vertex v1 = blueGraph.addVertex(1); v1.setProperty("name", "Base de données"); Vertex v2 = blueGraph.addVertex(2); v2.setProperty("name", "NEO4j"); Edge rel = blueGraph.addEdge(3, v1, v2, "EST");JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 46. Tinkerpop : Frames public interface FramesPerson extends VertexFrame { @Property ("lastname") public String getLastname (); @Property ("lastname") public void setLastName (String lastname); @Adjacency (label = "KNOWS") public Iterable<FramePerson> getFriends (); @Adjacency (label = "KNOWS") public void addFriend (FramesPerson friend); }JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 47. OUTILLAGEJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 48. Shell Permet la consultation d’une base en cours d’utilisation ! $> Neo4jShell -path /var/mydb -readonlyJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 49. Console Web - Dashboard http://monserveur_db:7474JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 50. Console Web – Data browserJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 51. Console Web – ConsoleJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 52. NeoclipseJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 53. POURQUOI NEO4J ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 54. Pourquoi NEO4j ? Support d’un éditeur : Neo Technology • Version communautaire (GPL) • Version Advanced (AGPL) • Advanced monitoring • Version Enterprise (AGPL) • Sauvegarde à chaud • HA Documentation dense (+500 pages pour le manuel)JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 55. CONCLUSIONJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 56. Conclusion Représentation naturelle des relations « Data driven » Savoir-faire en cours…JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  • 57. Merci de votre attention ! Questions ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr