201301 - Focus Neo4j
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

201301 - Focus Neo4j

on

  • 1,337 views

 

Statistics

Views

Total Views
1,337
Views on SlideShare
1,157
Embed Views
180

Actions

Likes
0
Downloads
25
Comments
0

1 Embed 180

http://mj89sp3sau2k7lj1eg3k40hkeppguj6j-a-sites-opensocial.googleusercontent.com 180

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

201301 - Focus Neo4j Presentation 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