Comment utiliser un cache ?
J'ai une grosse base (communes de france = 36000) et je voudrais faire un pré-tri par département, car l'opérateur ne travaille que sur un département. Je pense qu'il faudrait que j'utilise un cache afin de ne pas faire mes requêtes sur la base entière mais sur le cache.
Comment-faire ?
Explication et Conseils pour l'instruction Cache
En gros, l'instruction Cache récupére le fragment XML généré par l'instruction fille (dans l'exemple de RDM, le DBExtract).
Ce fragment est conservé en mémoire.
Voila comment ca se passe :
1er appel : on passe sur l'instruction Cache, qui vérifie si elle a déjà stocké un fragment XML en memoire. C'est le premier appel, donc pas de fragment. Elle execute donc l'instruction fille, le DBExtract. La requete est faite comme d'habitude et le fragment XML resultant de la requete est stocké en memoire, dans un objet global partagé (propriété Cache de XMLCollection pour ceux que ca interesse :))
2eme appel : on repasse par l'instruction Cache qui vérifie si elle a déjà stocké un fragment XML en memoire. Cette fois, c'est ok, elle a en mémoire le fragment. Elle reprend donc directement ce fragment et zou ! elle l'ajoute au document XML, sans exécuter l'instruction fille. On gagne donc le temps de l'extraction SQL.
Pour réinitialiser un cache, il suffit de passer dans l'URL le paramètre XMLC_ResetCache=1. Tous les caches présents dans le XMLGram sont réinitialisés.
Le paramètre important pour un Cache est Shared : ca permet de partager le Cache pour toutes les threads de l'application. C'est important, parce que sans ca, un XMLC_ResetCache peut réinitialiser le Cache d'une thread en laissant tranquille les autres threads, ce qui peut donner des comportements étranges :). Il faut aussi placer le paramètre XMLC_SharedCache=1 dans les InitParams
Les Cache sont paramètrables : ca permet de stocker en cache des fragments différents selon les paramètres. Par exemple, l'application est multilingue et la tables de références des pays est traduite (United Kingdom, Germany, France en anglais et Royaume-Unis, Allemagne et France en francais). Pour faire l'extraction de ces pays, on a un paramètre indiquant la langue choisie par l'utilisateur. Il faut alors dire que le Cache est fonction du paramètre. Ca permet de stocker le Fragment avec les noms en anglais et un autre fragment avec les noms en Francais.
En gros, tous les paramètres de la requete SQL fille doivent se trouver dans la collection des paramètres du Cache. (sous réserve, c'est un poil plus relatif que ca :))
Essayez de nommer tous les caches identiques de la meme maniere par exemple (Name=CacheCOUNTRIES pour tous les caches de la liste des pays). Ca permet de n'avoir qu'un seul fragment XML en mémoire et de le réinitialiser une fois pour toute.
Derniere chose : annexe XMLGram (http://www.xmlrad.com/Manual/Appendix13/index.htm)
et annexe InitParams/GlobalParams (http://www.xmlrad.com/Manual/Appendix14/index.htm)