SlideShare uma empresa Scribd logo
1 de 46
Persistance polyglotte avec
Spring Data
                        Spring User Group FR
                                29 sept. 2011
Qui sommes nous?

 Olivier Mallassi
          @omallassi
 Michel Domenjoud
         @mdomenjoud
 Laurent Dutheil
         @laurentdutheil




                           blog.octo.com

                                                         2
Sommaire

    Persistance polyglotte et NoSQL

    Overview Spring Data
            Les enjeux
            Les grandes fonctionnalités
            Les différents projets


    En pratique
            Focus Spring Data Graph – Neo4J
            Cross-store en pratique avec Spring Data Graph




© OCTO Technology 2011                                                   3
© OCTO Technology 2011   4
Près de 40 ans de bases relationnelles
© OCTO Technology 2011                         5
Le confort des bases relationnelles

    Un système relationnel peut suffire dans la plupart des cas
          •    Stockage structuré
          •    Recherches
          •    Reporting
          •    …

    Mais des quantités de données et une complexité en
         augmentation exponentielle




© OCTO Technology 2011                                                    6
Et si on regardait un peu ailleurs?
© OCTO Technology 2011                                  7
Not Only SQL
                                 Une pléthore de technos pour gérer les données
                     Key/Value
                                                                 Graph




Document                            Column Oriented / Raw Data




  noSQL
© OCTO Technology 2011
                           aujourd’hui…                                           8
Un peu perdus?
© OCTO Technology 2011                    9
…Organisées en grandes catégories
                                                    basées sur la modélisation de la donnée


                                Key/Value

                   {attr1, …}
                                Document

                                Column Oriented

                                Graph

                                Flat file, Géographique, XML, Object…
   Une classification qui a des limites
             Ne prend pas en compte les patterns précédents (Cassandra & HBase)
             Les trade-offs sur ACID (durabilité…)
© OCTO Technology 2011                                                                        10
Les bases « graph »




© OCTO Technology 2011                         11
Les bases « graph »
                                                                         en termes d’API


           Neo4j
       Transaction tx = myDb.beginTx();
       try
       {
                 Node architect = myDb.createNode();
                 Node smith = myDb.createNode();
                 smith.setProperty(« version », « 1.0 »);
                 Relationship relation = smith.createRelationshipTo(architect, …

                     relation.setProperty…

                     tx.success();
       }
       finally
                     tx.finish();




© OCTO Technology 2011                                                                     12
Les espaces de stockage « Key/value »




                                    Age:29
                           Neo      Name : Thomas Anderson
                                    …



                          Trinity   YXpnYXplZw== YXpnYXpl
                                    Zw==




© OCTO Technology 2011                                       13
Stockage « Key/Value »
                                                                          en termes d’API

           Voldemort
         StoreClientFactory factory = new SocketStoreClientFactory(numThreads,
             numThreads, maxQueuedRequests, maxConnectionsPerNode,
             maxTotalConnections, bootstrapUrl);

         try {
         StoreClient<String, Object> client = factory.getStoreClient("author");

         Map<String, Object> authorMap = new HashMap<String, Object>();

         authorMap.put("key", "key" + i);

         authorMap.put("firstName", "firstName" + i);
         authorMap.put("lastName", "lastName" + i);

         client.put("key" + i, authorMap);




© OCTO Technology 2011                                                                      14
Les espaces de stockage « Column Oriented »




                                                    29
                                      Age
                               Neo
                                      Timestamp#1


                                                    Thomas
                                      name          Anderson
                                      Timestamp#2




© OCTO Technology 2011                                                 15
Stockage « Column-oriented »
                                                                              en termes d’API

       Cassandra
    TTransport tr = new TSocket("192.168.216.128", 9160);

    TProtocol proto = new TBinaryProtocol(tr);
    tr.open();

    Cassandra.Client cassandraClient = new Cassandra.Client(proto);

    Map<String, List<ColumnOrSuperColumn>> insertClientDataMap = new HashMap<String,
    List<ColumnOrSuperColumn>>();

    List<ColumnOrSuperColumn> clientRowData = new ArrayList<ColumnOrSuperColumn>();

    ColumnOrSuperColumn columnOrSuperColumn = new ColumnOrSuperColumn();
    columnOrSuperColumn.setColumn(new Column("fullName".getBytes(UTF8),
               aCustomer.getName().getBytes(UTF8), timestamp));

    clientRowData.add(columnOrSuperColumn);

    insertClientDataMap.put("customers", clientRowData);

    cassandraClient.batch_insert("myBank", aCustomer.getName(),insertClientDataMap,
                          ConsistencyLevel.DCQUORUM);




    Il existe des APIs plus « abstraites » : Hector…
              Mécanismes de pool…



© OCTO Technology 2011                                                                          16
Les bases « Document »




                               {« Age »: 29,
                         Neo   « Name » : « Thomas Anderson »
                               « knows »:[{« name »: « Trinity »
                               …




© OCTO Technology 2011                                             17
Les bases « Document »
                                                                       en termes d’API

       MongoDB

    //requête portant sur les tous les documents avec attendees > 80

    BasicDBObject query = new BasicDBObject();
    query.put(« age », new BasicDBObject(« $gt », 80));

    DBCursor cur = coll.find(query);




© OCTO Technology 2011                                                                   18
Not Only SQL : Persistance polyglotte


    « NoSQL or Polyglot persistence, is all about choosing the right persistence
         tool for the right job »

    Différents cas d'usages pour les systèmes de stockage de données
     • Stockage
     • Recherche
     • Navigation
     • Reporting

    La plupart des stores peuvent remplir ces fonctions, mais aucun n'est
         parfaitement adapté à toutes les situations




© OCTO Technology 2011                                                              19
Persistance polyglotte : les enjeux

    Complexité d'utiliser des systèmes hétérogènes

    Des concepts, des formats de stockage et des langages de
         manipulation des données différents

   Nécessité de développer les interactions au niveau applicatif

    Difficile de réaliser certaines opérations cross-stores
          • Requêtes ensemblistes, fonctions d'agrégation
          • Partition ou réplication du modèle de données
          • Homogénéité des performances, de la dispo, du partitionnement

© OCTO Technology 2011                                                      20
Spring Data




© OCTO Technology 2011   21
Un cas d’usage simple




                          « Les clients ayant acheté cet
                         article ont également acheté… »
© OCTO Technology 2011
Un cas d’usage simple




                                              Achats liés (2)
         Client          Commande   P1                          P2


                                         Achats liés (10)

                          Produit                                    P4
                                     P3




© OCTO Technology 2011                                                    23
Spring Data
                                                  Les enjeux

       Faciliter la mise en œuvre d’une persistance polyglotte

    Simplification

    Productivité et qualité

    Approche commune

    Abstraction



© OCTO Technology 2011                                           24
Spring Data
                                       Les projets

   DB relationnelles
                         JPA   JDBC Extensions


   Key / Value                              Document




   Column                                        Graph
© OCTO Technology 2011                                   25
Spring Data
                             Des frameworks intégrés à Spring

    Intégration à Spring

    Une couche d’abstraction
    Faciliter les opérations cross-store




© OCTO Technology 2011                                          26
Spring Data JPA
                                Overview

    Repository

    Specifications

    Entités auditables




© OCTO Technology 2011                      27
Spring Data
                          Repository




© OCTO Technology 2011                 28
Spring Data Document

        Support de MongoDB
        MongoTemplate
        Mapping d’entités @Document
        Repository
        Requêtes
        Cross-store persistence avec une base JPA « maître »




© OCTO Technology 2011                                            29
Spring Data Graph

        Support de Neo4J
        Mapping d’entités
        Repositories
        Fonctions de recherche




© OCTO Technology 2011                                30
Sans Spring Data




© OCTO Technology 2011                      31
Configuration simple

    Quelques dépendances Maven



    Un peu de configuration Spring



    Et c'est parti!

                         Quelques difficultés à compiler le projet dans l’IDE (AspectJ)


© OCTO Technology 2011                                                                    32
Mapping d’entités




© OCTO Technology 2011                       33
Mapping d’entités




                         AspectJ : Get/Set en lecture
                         directe dans la base (ou cache)
                               Risqué en lecture
                               Performances



© OCTO Technology 2011                                     34
Relations




© OCTO Technology 2011               35
GraphRepository




© OCTO Technology 2011                     36
Recherches et parcours de graphes

    Parcours avec @GraphTraversal




    Pattern matching avec @Query et Cypher



© OCTO Technology 2011                                       37
Gestion des entités

    Opérations directement sur l’entité




    Etat des entités
            Entité détachée à la création jusqu’au 1er persist
            Entité détachée hors transaction = pas d’écriture dans le graphe
            Pas d’état détaché complet : dans tous les cas, get = lecture


                                Risques de retour aux DTO et clonages
                                d’objets

© OCTO Technology 2011                                                          38
Entités cross-store




© OCTO Technology 2011                         39
Entités cross-store




© OCTO Technology 2011                         40
Cross-store en pratique
                                      Repository




© OCTO Technology 2011                             41
Cross-store en pratique
                                      Repository




© OCTO Technology 2011                             42
Promesses tenues?




© OCTO Technology 2011                       43
Spring Data Graph : Avantages et inconvénients

    Avantages:
            Intégration à la stack Spring
            Un code proche du domaine objet (mappings et pattern Repository)


    Inconvénients
            Certains choix de design inhabituels et parfois déroutants




© OCTO Technology 2011                                                          44
Pour conclure


    Surtout une surcouche aux API existantes

    Des devs Java facilités avec les technos NoSQL

    Des projets encore jeunes mais prometteurs




© OCTO Technology 2011                                            45
Des questions ?




© OCTO Technology 2011                     46

Mais conteúdo relacionado

Semelhante a Persistance polyglotte avec Spring Data

JUS 2011 - Manipulation de champs avec SALOME
JUS 2011 - Manipulation de champs avec SALOMEJUS 2011 - Manipulation de champs avec SALOME
JUS 2011 - Manipulation de champs avec SALOMEOpenCascade
 
Comptoir - Utiliser une solution d'edge Open Source pour améliorer l'inspecti...
Comptoir - Utiliser une solution d'edge Open Source pour améliorer l'inspecti...Comptoir - Utiliser une solution d'edge Open Source pour améliorer l'inspecti...
Comptoir - Utiliser une solution d'edge Open Source pour améliorer l'inspecti...OCTO Technology
 
Du texte à la connaissance : annotation sémantique et peuplement d'ontologie ...
Du texte à la connaissance : annotation sémantique et peuplement d'ontologie ...Du texte à la connaissance : annotation sémantique et peuplement d'ontologie ...
Du texte à la connaissance : annotation sémantique et peuplement d'ontologie ...Conférence IC 2009
 
OpenStack - open source au service du Cloud
OpenStack - open source au service du CloudOpenStack - open source au service du Cloud
OpenStack - open source au service du CloudLINAGORA
 
Architectures techniques NoSQL
Architectures techniques NoSQLArchitectures techniques NoSQL
Architectures techniques NoSQLOCTO Technology
 
OpenStack & DevOps, l'Open Source au service du Cloud
OpenStack & DevOps, l'Open Source au service du CloudOpenStack & DevOps, l'Open Source au service du Cloud
OpenStack & DevOps, l'Open Source au service du CloudMichel-Marie Maudet
 
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Paris, France
 
OpenStack 2014 - Entre projet et stratégie
OpenStack 2014 - Entre projet et stratégieOpenStack 2014 - Entre projet et stratégie
OpenStack 2014 - Entre projet et stratégieSavoir-faire Linux
 
Présentation Big Data et REX Hadoop
Présentation Big Data et REX HadoopPrésentation Big Data et REX Hadoop
Présentation Big Data et REX HadoopJoseph Glorieux
 
Petit-déjeuner OCTO Technology : Calculez vos indicateurs en temps réel ave...
Petit-déjeuner OCTO Technology :  Calculez vos indicateurs en temps réel ave...Petit-déjeuner OCTO Technology :  Calculez vos indicateurs en temps réel ave...
Petit-déjeuner OCTO Technology : Calculez vos indicateurs en temps réel ave...OCTO Technology
 
Morning with MongoDB Paris 2012 - Octo
Morning with MongoDB Paris 2012 - OctoMorning with MongoDB Paris 2012 - Octo
Morning with MongoDB Paris 2012 - OctoMongoDB
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Laurent Guérin
 
Meetup MongoDB Montpellier 20181120
Meetup MongoDB Montpellier 20181120Meetup MongoDB Montpellier 20181120
Meetup MongoDB Montpellier 20181120Bertrand THOMAS
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven DesignDNG Consulting
 
Les grilles transactionnelles, enfin des solutions pour l’informatique de ges...
Les grilles transactionnelles, enfin des solutions pour l’informatique de ges...Les grilles transactionnelles, enfin des solutions pour l’informatique de ges...
Les grilles transactionnelles, enfin des solutions pour l’informatique de ges...Marc Bojoly
 
La Data Virtualization par Orano : cas d'usage à la Hague et démo de Denodo
La Data Virtualization par Orano : cas d'usage à la Hague et démo de DenodoLa Data Virtualization par Orano : cas d'usage à la Hague et démo de Denodo
La Data Virtualization par Orano : cas d'usage à la Hague et démo de DenodoDenodo
 
Audition France Stratégie du 9 mars 2017 "Blockchain : les cas d'usage à l'ép...
Audition France Stratégie du 9 mars 2017 "Blockchain : les cas d'usage à l'ép...Audition France Stratégie du 9 mars 2017 "Blockchain : les cas d'usage à l'ép...
Audition France Stratégie du 9 mars 2017 "Blockchain : les cas d'usage à l'ép...Nabil Bouzerna
 
Trading dans le Cloud en gardant les pieds sur terre!
Trading dans le Cloud en gardant les pieds sur terre!Trading dans le Cloud en gardant les pieds sur terre!
Trading dans le Cloud en gardant les pieds sur terre!Francis Otshudi
 
Stage de fin d’études – dotcloud
Stage de fin d’études – dotcloudStage de fin d’études – dotcloud
Stage de fin d’études – dotcloudJoffrey Fu Hrer
 

Semelhante a Persistance polyglotte avec Spring Data (20)

JUS 2011 - Manipulation de champs avec SALOME
JUS 2011 - Manipulation de champs avec SALOMEJUS 2011 - Manipulation de champs avec SALOME
JUS 2011 - Manipulation de champs avec SALOME
 
Comptoir - Utiliser une solution d'edge Open Source pour améliorer l'inspecti...
Comptoir - Utiliser une solution d'edge Open Source pour améliorer l'inspecti...Comptoir - Utiliser une solution d'edge Open Source pour améliorer l'inspecti...
Comptoir - Utiliser une solution d'edge Open Source pour améliorer l'inspecti...
 
Du texte à la connaissance : annotation sémantique et peuplement d'ontologie ...
Du texte à la connaissance : annotation sémantique et peuplement d'ontologie ...Du texte à la connaissance : annotation sémantique et peuplement d'ontologie ...
Du texte à la connaissance : annotation sémantique et peuplement d'ontologie ...
 
OpenStack - open source au service du Cloud
OpenStack - open source au service du CloudOpenStack - open source au service du Cloud
OpenStack - open source au service du Cloud
 
Architectures techniques NoSQL
Architectures techniques NoSQLArchitectures techniques NoSQL
Architectures techniques NoSQL
 
OpenStack & DevOps, l'Open Source au service du Cloud
OpenStack & DevOps, l'Open Source au service du CloudOpenStack & DevOps, l'Open Source au service du Cloud
OpenStack & DevOps, l'Open Source au service du Cloud
 
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
 
OpenStack 2014 - Entre projet et stratégie
OpenStack 2014 - Entre projet et stratégieOpenStack 2014 - Entre projet et stratégie
OpenStack 2014 - Entre projet et stratégie
 
Présentation Big Data et REX Hadoop
Présentation Big Data et REX HadoopPrésentation Big Data et REX Hadoop
Présentation Big Data et REX Hadoop
 
No Sql User Group Intro
No Sql User Group   IntroNo Sql User Group   Intro
No Sql User Group Intro
 
Petit-déjeuner OCTO Technology : Calculez vos indicateurs en temps réel ave...
Petit-déjeuner OCTO Technology :  Calculez vos indicateurs en temps réel ave...Petit-déjeuner OCTO Technology :  Calculez vos indicateurs en temps réel ave...
Petit-déjeuner OCTO Technology : Calculez vos indicateurs en temps réel ave...
 
Morning with MongoDB Paris 2012 - Octo
Morning with MongoDB Paris 2012 - OctoMorning with MongoDB Paris 2012 - Octo
Morning with MongoDB Paris 2012 - Octo
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
Meetup MongoDB Montpellier 20181120
Meetup MongoDB Montpellier 20181120Meetup MongoDB Montpellier 20181120
Meetup MongoDB Montpellier 20181120
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven Design
 
Les grilles transactionnelles, enfin des solutions pour l’informatique de ges...
Les grilles transactionnelles, enfin des solutions pour l’informatique de ges...Les grilles transactionnelles, enfin des solutions pour l’informatique de ges...
Les grilles transactionnelles, enfin des solutions pour l’informatique de ges...
 
La Data Virtualization par Orano : cas d'usage à la Hague et démo de Denodo
La Data Virtualization par Orano : cas d'usage à la Hague et démo de DenodoLa Data Virtualization par Orano : cas d'usage à la Hague et démo de Denodo
La Data Virtualization par Orano : cas d'usage à la Hague et démo de Denodo
 
Audition France Stratégie du 9 mars 2017 "Blockchain : les cas d'usage à l'ép...
Audition France Stratégie du 9 mars 2017 "Blockchain : les cas d'usage à l'ép...Audition France Stratégie du 9 mars 2017 "Blockchain : les cas d'usage à l'ép...
Audition France Stratégie du 9 mars 2017 "Blockchain : les cas d'usage à l'ép...
 
Trading dans le Cloud en gardant les pieds sur terre!
Trading dans le Cloud en gardant les pieds sur terre!Trading dans le Cloud en gardant les pieds sur terre!
Trading dans le Cloud en gardant les pieds sur terre!
 
Stage de fin d’études – dotcloud
Stage de fin d’études – dotcloudStage de fin d’études – dotcloud
Stage de fin d’études – dotcloud
 

Persistance polyglotte avec Spring Data

  • 1. Persistance polyglotte avec Spring Data Spring User Group FR 29 sept. 2011
  • 2. Qui sommes nous?  Olivier Mallassi @omallassi  Michel Domenjoud @mdomenjoud  Laurent Dutheil @laurentdutheil blog.octo.com 2
  • 3. Sommaire  Persistance polyglotte et NoSQL  Overview Spring Data  Les enjeux  Les grandes fonctionnalités  Les différents projets  En pratique  Focus Spring Data Graph – Neo4J  Cross-store en pratique avec Spring Data Graph © OCTO Technology 2011 3
  • 5. Près de 40 ans de bases relationnelles © OCTO Technology 2011 5
  • 6. Le confort des bases relationnelles  Un système relationnel peut suffire dans la plupart des cas • Stockage structuré • Recherches • Reporting • …  Mais des quantités de données et une complexité en augmentation exponentielle © OCTO Technology 2011 6
  • 7. Et si on regardait un peu ailleurs? © OCTO Technology 2011 7
  • 8. Not Only SQL Une pléthore de technos pour gérer les données Key/Value Graph Document Column Oriented / Raw Data noSQL © OCTO Technology 2011 aujourd’hui… 8
  • 9. Un peu perdus? © OCTO Technology 2011 9
  • 10. …Organisées en grandes catégories basées sur la modélisation de la donnée Key/Value {attr1, …} Document Column Oriented Graph Flat file, Géographique, XML, Object…  Une classification qui a des limites  Ne prend pas en compte les patterns précédents (Cassandra & HBase)  Les trade-offs sur ACID (durabilité…) © OCTO Technology 2011 10
  • 11. Les bases « graph » © OCTO Technology 2011 11
  • 12. Les bases « graph » en termes d’API Neo4j Transaction tx = myDb.beginTx(); try { Node architect = myDb.createNode(); Node smith = myDb.createNode(); smith.setProperty(« version », « 1.0 »); Relationship relation = smith.createRelationshipTo(architect, … relation.setProperty… tx.success(); } finally tx.finish(); © OCTO Technology 2011 12
  • 13. Les espaces de stockage « Key/value » Age:29 Neo Name : Thomas Anderson … Trinity YXpnYXplZw== YXpnYXpl Zw== © OCTO Technology 2011 13
  • 14. Stockage « Key/Value » en termes d’API Voldemort StoreClientFactory factory = new SocketStoreClientFactory(numThreads, numThreads, maxQueuedRequests, maxConnectionsPerNode, maxTotalConnections, bootstrapUrl); try { StoreClient<String, Object> client = factory.getStoreClient("author"); Map<String, Object> authorMap = new HashMap<String, Object>(); authorMap.put("key", "key" + i); authorMap.put("firstName", "firstName" + i); authorMap.put("lastName", "lastName" + i); client.put("key" + i, authorMap); © OCTO Technology 2011 14
  • 15. Les espaces de stockage « Column Oriented » 29 Age Neo Timestamp#1 Thomas name Anderson Timestamp#2 © OCTO Technology 2011 15
  • 16. Stockage « Column-oriented » en termes d’API Cassandra TTransport tr = new TSocket("192.168.216.128", 9160); TProtocol proto = new TBinaryProtocol(tr); tr.open(); Cassandra.Client cassandraClient = new Cassandra.Client(proto); Map<String, List<ColumnOrSuperColumn>> insertClientDataMap = new HashMap<String, List<ColumnOrSuperColumn>>(); List<ColumnOrSuperColumn> clientRowData = new ArrayList<ColumnOrSuperColumn>(); ColumnOrSuperColumn columnOrSuperColumn = new ColumnOrSuperColumn(); columnOrSuperColumn.setColumn(new Column("fullName".getBytes(UTF8), aCustomer.getName().getBytes(UTF8), timestamp)); clientRowData.add(columnOrSuperColumn); insertClientDataMap.put("customers", clientRowData); cassandraClient.batch_insert("myBank", aCustomer.getName(),insertClientDataMap, ConsistencyLevel.DCQUORUM);  Il existe des APIs plus « abstraites » : Hector…  Mécanismes de pool… © OCTO Technology 2011 16
  • 17. Les bases « Document » {« Age »: 29, Neo « Name » : « Thomas Anderson » « knows »:[{« name »: « Trinity » … © OCTO Technology 2011 17
  • 18. Les bases « Document » en termes d’API MongoDB //requête portant sur les tous les documents avec attendees > 80 BasicDBObject query = new BasicDBObject(); query.put(« age », new BasicDBObject(« $gt », 80)); DBCursor cur = coll.find(query); © OCTO Technology 2011 18
  • 19. Not Only SQL : Persistance polyglotte  « NoSQL or Polyglot persistence, is all about choosing the right persistence tool for the right job »  Différents cas d'usages pour les systèmes de stockage de données • Stockage • Recherche • Navigation • Reporting  La plupart des stores peuvent remplir ces fonctions, mais aucun n'est parfaitement adapté à toutes les situations © OCTO Technology 2011 19
  • 20. Persistance polyglotte : les enjeux  Complexité d'utiliser des systèmes hétérogènes  Des concepts, des formats de stockage et des langages de manipulation des données différents Nécessité de développer les interactions au niveau applicatif  Difficile de réaliser certaines opérations cross-stores • Requêtes ensemblistes, fonctions d'agrégation • Partition ou réplication du modèle de données • Homogénéité des performances, de la dispo, du partitionnement © OCTO Technology 2011 20
  • 21. Spring Data © OCTO Technology 2011 21
  • 22. Un cas d’usage simple « Les clients ayant acheté cet article ont également acheté… » © OCTO Technology 2011
  • 23. Un cas d’usage simple Achats liés (2) Client Commande P1 P2 Achats liés (10) Produit P4 P3 © OCTO Technology 2011 23
  • 24. Spring Data Les enjeux Faciliter la mise en œuvre d’une persistance polyglotte  Simplification  Productivité et qualité  Approche commune  Abstraction © OCTO Technology 2011 24
  • 25. Spring Data Les projets DB relationnelles JPA JDBC Extensions Key / Value Document Column Graph © OCTO Technology 2011 25
  • 26. Spring Data Des frameworks intégrés à Spring  Intégration à Spring  Une couche d’abstraction  Faciliter les opérations cross-store © OCTO Technology 2011 26
  • 27. Spring Data JPA Overview  Repository  Specifications  Entités auditables © OCTO Technology 2011 27
  • 28. Spring Data Repository © OCTO Technology 2011 28
  • 29. Spring Data Document  Support de MongoDB  MongoTemplate  Mapping d’entités @Document  Repository  Requêtes  Cross-store persistence avec une base JPA « maître » © OCTO Technology 2011 29
  • 30. Spring Data Graph  Support de Neo4J  Mapping d’entités  Repositories  Fonctions de recherche © OCTO Technology 2011 30
  • 31. Sans Spring Data © OCTO Technology 2011 31
  • 32. Configuration simple  Quelques dépendances Maven  Un peu de configuration Spring  Et c'est parti! Quelques difficultés à compiler le projet dans l’IDE (AspectJ) © OCTO Technology 2011 32
  • 33. Mapping d’entités © OCTO Technology 2011 33
  • 34. Mapping d’entités AspectJ : Get/Set en lecture directe dans la base (ou cache)  Risqué en lecture  Performances © OCTO Technology 2011 34
  • 37. Recherches et parcours de graphes  Parcours avec @GraphTraversal  Pattern matching avec @Query et Cypher © OCTO Technology 2011 37
  • 38. Gestion des entités  Opérations directement sur l’entité  Etat des entités  Entité détachée à la création jusqu’au 1er persist  Entité détachée hors transaction = pas d’écriture dans le graphe  Pas d’état détaché complet : dans tous les cas, get = lecture Risques de retour aux DTO et clonages d’objets © OCTO Technology 2011 38
  • 39. Entités cross-store © OCTO Technology 2011 39
  • 40. Entités cross-store © OCTO Technology 2011 40
  • 41. Cross-store en pratique Repository © OCTO Technology 2011 41
  • 42. Cross-store en pratique Repository © OCTO Technology 2011 42
  • 43. Promesses tenues? © OCTO Technology 2011 43
  • 44. Spring Data Graph : Avantages et inconvénients  Avantages:  Intégration à la stack Spring  Un code proche du domaine objet (mappings et pattern Repository)  Inconvénients  Certains choix de design inhabituels et parfois déroutants © OCTO Technology 2011 44
  • 45. Pour conclure  Surtout une surcouche aux API existantes  Des devs Java facilités avec les technos NoSQL  Des projets encore jeunes mais prometteurs © OCTO Technology 2011 45
  • 46. Des questions ? © OCTO Technology 2011 46