Más contenido relacionado
Similar a Persistance polyglotte avec Spring Data (20)
Persistance polyglotte avec Spring Data
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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