Persistance polyglotte avec Spring Data

1,730 views
1,629 views

Published on

Présentation du projet Spring Data donnée au Spring User Group FR le 29/09/2011

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,730
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Persistance polyglotte avec Spring Data

  1. 1. Persistance polyglotte avecSpring Data Spring User Group FR 29 sept. 2011
  2. 2. Qui sommes nous? Olivier Mallassi @omallassi Michel Domenjoud @mdomenjoud Laurent Dutheil @laurentdutheil blog.octo.com 2
  3. 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
  4. 4. © OCTO Technology 2011 4
  5. 5. Près de 40 ans de bases relationnelles© OCTO Technology 2011 5
  6. 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. 7. Et si on regardait un peu ailleurs?© OCTO Technology 2011 7
  8. 8. Not Only SQL Une pléthore de technos pour gérer les données Key/Value GraphDocument Column Oriented / Raw Data noSQL© OCTO Technology 2011 aujourd’hui… 8
  9. 9. Un peu perdus?© OCTO Technology 2011 9
  10. 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. 11. Les bases « graph »© OCTO Technology 2011 11
  12. 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. 13. Les espaces de stockage « Key/value » Age:29 Neo Name : Thomas Anderson … Trinity YXpnYXplZw== YXpnYXpl Zw==© OCTO Technology 2011 13
  14. 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. 15. Les espaces de stockage « Column Oriented » 29 Age Neo Timestamp#1 Thomas name Anderson Timestamp#2© OCTO Technology 2011 15
  16. 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. 17. Les bases « Document » {« Age »: 29, Neo « Name » : « Thomas Anderson » « knows »:[{« name »: « Trinity » …© OCTO Technology 2011 17
  18. 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. 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 dusages pour les systèmes de stockage de données • Stockage • Recherche • Navigation • Reporting  La plupart des stores peuvent remplir ces fonctions, mais aucun nest parfaitement adapté à toutes les situations© OCTO Technology 2011 19
  20. 20. Persistance polyglotte : les enjeux  Complexité dutiliser 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 dagré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. 21. Spring Data© OCTO Technology 2011 21
  22. 22. Un cas d’usage simple « Les clients ayant acheté cet article ont également acheté… »© OCTO Technology 2011
  23. 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. 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. 25. Spring Data Les projets DB relationnelles JPA JDBC Extensions Key / Value Document Column Graph© OCTO Technology 2011 25
  26. 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. 27. Spring Data JPA Overview  Repository  Specifications  Entités auditables© OCTO Technology 2011 27
  28. 28. Spring Data Repository© OCTO Technology 2011 28
  29. 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. 30. Spring Data Graph  Support de Neo4J  Mapping d’entités  Repositories  Fonctions de recherche© OCTO Technology 2011 30
  31. 31. Sans Spring Data© OCTO Technology 2011 31
  32. 32. Configuration simple  Quelques dépendances Maven  Un peu de configuration Spring  Et cest parti! Quelques difficultés à compiler le projet dans l’IDE (AspectJ)© OCTO Technology 2011 32
  33. 33. Mapping d’entités© OCTO Technology 2011 33
  34. 34. Mapping d’entités AspectJ : Get/Set en lecture directe dans la base (ou cache)  Risqué en lecture  Performances© OCTO Technology 2011 34
  35. 35. Relations© OCTO Technology 2011 35
  36. 36. GraphRepository© OCTO Technology 2011 36
  37. 37. Recherches et parcours de graphes  Parcours avec @GraphTraversal  Pattern matching avec @Query et Cypher© OCTO Technology 2011 37
  38. 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. 39. Entités cross-store© OCTO Technology 2011 39
  40. 40. Entités cross-store© OCTO Technology 2011 40
  41. 41. Cross-store en pratique Repository© OCTO Technology 2011 41
  42. 42. Cross-store en pratique Repository© OCTO Technology 2011 42
  43. 43. Promesses tenues?© OCTO Technology 2011 43
  44. 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. 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. 46. Des questions ?© OCTO Technology 2011 46

×