201301 - Focus Neo4j

2 356 vues

Publié le

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 356
Sur SlideShare
0
Issues des intégrations
0
Intégrations
216
Actions
Partages
0
Téléchargements
71
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

201301 - Focus Neo4j

  1. 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. 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. 3. QU’EST-CE QUE NEO4J ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  4. 4. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  5. 5. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 5
  6. 6. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 6
  7. 7. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 7
  8. 8. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 8
  9. 9. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 9
  10. 10. Qu’est-ce que NEO4j ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr 10
  11. 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. 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. 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. 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. 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. 16. Reconnaître des structuresJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  17. 17. Reconnaître des structuresJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  18. 18. Reconnaître des structuresJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  19. 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. 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. 21. A PROPOS DE NEO4JJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  22. 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. 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. 24. NEO4J AVEC JAVAJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  25. 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. 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. 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. 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. 29. NEO4J SANS JAVAJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  30. 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. 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. 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. 33. INTERROGER NEO4JJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  34. 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. 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. 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. 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. 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. 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. 40. INTÉGRER NEO4J (DAO)JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  41. 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. 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. 43. S’ABSTRAIRE DE NEO4JJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  44. 44. TinkerpopJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  45. 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. 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. 47. OUTILLAGEJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  48. 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. 49. Console Web - Dashboard http://monserveur_db:7474JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  50. 50. Console Web – Data browserJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  51. 51. Console Web – ConsoleJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  52. 52. NeoclipseJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  53. 53. POURQUOI NEO4J ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  54. 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. 55. CONCLUSIONJUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr
  56. 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. 57. Merci de votre attention ! Questions ?JUG Lyon : – Neo4j et son écosystème 15 Janvier 2013 – sroussy@hinnoya.fr

×