mercredi 26 mars 2014

Jouons à cache-cache avec Java (première partie)

Mettre en cache un objet signifie qu'on espère le réutiliser à court ou moyen terme en s'épargnant le coût de sa reconstruction. Nous allons voir dans cet article une solution au demeurant louable visant à élaborer une stratégie d'éviction qui s'avère désastreuse : surtout, ne l'utilisez pas en production !

Principe et stratégie

Utiliser un cache est monnaie courante dans une application. Un cache permet de stocker en mémoire un objet susceptible d'être réutilisé, ce qui apporte son lot d'inconvénients : si on veut un cache efficace, il faut stocker suffisamment d'objets, mais si on stocke trop d'objets, on risque de saturer la mémoire. Le gain escompté doit être à la hauteur des sacrifices consentis en terme de volume de mémoire alloué mais aussi en terme de gestion du cache (l'objet mis en cache n'est-il pas périmé ? quelle clé utiliser pour le retrouver ? etc).
Toute la question réside dans l'adoption d'une sorte de compromis entre la taille du cache, la durée de rétention des objets, et dans l'application d'une politique d'éviction.

Parmi les stratégies les plus conventionnelles, on peut fixer une durée de rétention sur les objets, ou fixer un nombre maximum d'objets, ou de taille des objets à stocker, en supprimant les plus anciens une fois le quota atteint. Simple mais très souvent efficace. Google Guava est une librairie Java assez complète qui offre ce type de fonctionnalités, et permet également d'être notifié des entrées supprimées du cache.


Cache-sexe utilisé jadis dans l'île de Java
- Peut contenir un nombre limité d'objets -

mercredi 5 mars 2014

Semantic Mismatch : quoi donc est-ce ?

"Semantic Mismatch" ? C'est simplement le nom de ce blog.

Comme les articles porteront essentiellement sur l'IT, l'ingénierie des développements, le Web, les technologies et langages de programmation, les architectures, et tout le toutim, il me fallait un nom accrocheur en rapport.


Semantic Mismatch
ERR-01 : IncompatibleTypesException
Unable to cast VESSIE to LANTERNE
-- See log for details


J'ai d'abord songé à "Syntax Error", étant de la vieille école, mais je me suis dit que ce nom pouvait déjà être utilisé, et une rapide recherche avec mon moteur de recherche préféré m'a montré que je n'avais pas tort... Soit dit en passant que les blogs concernés n'ont rien à voir avec l'informatique...



Semantic Mismatch
ERR-03 : IllegalSizeException
YEUX cannot be bigger than VENTRE
-- See log for details


"Syntax Error" doit donc être modernisé, il me faut une autre idée... voyons, "Stack Overflow" c'est déjà pris (même si ce n'est pas un blog), il va falloir se démarquer ; allez, le Web sémantique est à la mode, avec le SPARQL, RDF et autres ontologies, il y a la moitié du titre. J'ai quand même aussi envie de rester sur la première idée véhiculée par "Syntax Error", à savoir le second terme : les problèmes, erreurs, et autres incompatibilités diverses étant bien ancrées dans l'informatique, il me faut un terme lié à cela. Il me vient à l'esprit une vieille querelle entre les partisans et les détracteurs de l'ORM, ces derniers utilisant un qualificatif spécifique pour montrer que le Mapping Objet-Relationnel est une aberration : c'est l'Impédance Mismatch !



Semantic Mismatch
ERR-02 : NoSuchMethodException
Unable to extract PENDULE
-- See log for details


Allez, on prend les deux termes et voilà : "Semantic Mismatch".
L'idée derrière laquelle la sémantique nous promet de joyeuses mésinterprétations ne me déplaît pas : voyez les résultats obtenus par vos outils de traduction préférés...

Vendu ! "Semantic Mismatch" est né !


Semantic Mismatch
ERR-04 : IncompatibleTimeZoneException
MIDI not found at 2PM
-- See log for details