Bonjour
voici mon problème.
J'ai une table qui va contenir des volumes importants de données (pour l'instant je n'ai pas de volumetrie mais en tout cas les perspectives fonctionnelles ne laissent pas de doute)
Le problème c'est que dans l'application que je maintiens afin de faire des opérations unitaires de suppression ou de modification on utilise une requête qui lit toute la table (select * from maTable) et tout cela dans une magnifique boucle for.
la première étape a été d'enlever cette requete de chargement de toute la table de la boucle ...
Mais à mon avis ça ne suffira pas à l'avenir.
du coup je pense à utiliser un système de cache pour eviter de charger toute la table => d'où ehcache.
mais j'ai un doute sur le fonctionnement que j'ai implémenté
Je me suis basé sur le user guide de ehcache et je fais
je fais plusieurs tests basiques :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Element elementToCache = getMyCache().get("myKey"); if (elementToCache != null){ return (MyObject)elementToCache.getObjectValue(); } //ici je refais ma requete SQL getMyCache().put(new Element("myKey",_return)); //_return represente le retour de ma requete SQL
- je vérifie que la première fois on va bien chercher en base
- je vérifie que les fois suivantes on utilise le cache tant que l'on a pas dépassé le timeToLiveSeconds
- et je vérifie que une fois le timeToLiveSeconds dépassé on refais une requete en base
jusque là pas de problème
par contre là où j'ai des doutes est sur la cohérence des données et je ne sais pas comment la tester.
Imaginons que j'ai une requete qui supprime un objet => je récupere le contenu de mon cache, je fais mes traitements et je supprime
Imaginons que j'ai une seconde requete qui veut supprimer/modifier le même objet => je récupere le contenu de mon cache , je fais mes traitements et je supprime/modifie
Ma question est : est-ce que l'objet que je supprime de ma base à l'étape 1 est toujours dans le cache au moment de la deuxième requête ? ( on suppose que la durée de vie n'est pas dépassée)
en gros je voudrais savoir si il y a un méchanisme de synchronization automatique entre la base et le cache ?
N.B: l'application n'utilises pas d'ORM et on interroge la base en direct avec du JDBC ...
merci d'avance pour vos eclaircissements et si ma question n'est pas claire faites le moi savoir
Partager