26-04-2009, 10:27 PM
J'avais fait un système équivalent à l'époque intégré dans ezPDO, couplé avec APC.
L'idée était de mettre en cache les objets par ID (donc chaque objet était dans un cache indépendant) et de supprimer ce cache quand l'objet est modifié. Ajouter à ça une expiration du cache pour ne pas traumatiser la RAM et c'était plutôt très performant.
Dans ton cas le plus simple est de garder un cache par table : une config permet de désactiver le cache pour certaines tables, toutes tes méthodes qui font du SELECT provoquent une mise en cache, et toutes tes méthodes qui font du UPDATE, du INSERT ou du DELETE provoquent un vidage du cache de la table en question. Ainsi tu n'as pas à gérer manuellement le vidage de cache
Par contre comme on rentre dans le détail (je n'avais pas lu le code, sinon je t'aurais déjà décapité pour le coup de baser la clé de cache sur le nombre de requête, zOmg !), donc j'insiste au passage sur le fait d'être sûr que ce soit vraiment plus performant... Un accès à la base de données est bien souvent moins lent qu'un accès à un fichier (surtout s'il est lourd) et seule une mise en cache en RAM est vraiment intéressante. Ce n'est bien sûr pas vrai si la base a déjà tendance à être trop sollicitée et qu'il faut donc la délester de quelques requêtes.
Mais tout ça ce sont des questions d'optimisation, et... Early Optimization Is Evil !
L'idée était de mettre en cache les objets par ID (donc chaque objet était dans un cache indépendant) et de supprimer ce cache quand l'objet est modifié. Ajouter à ça une expiration du cache pour ne pas traumatiser la RAM et c'était plutôt très performant.
Dans ton cas le plus simple est de garder un cache par table : une config permet de désactiver le cache pour certaines tables, toutes tes méthodes qui font du SELECT provoquent une mise en cache, et toutes tes méthodes qui font du UPDATE, du INSERT ou du DELETE provoquent un vidage du cache de la table en question. Ainsi tu n'as pas à gérer manuellement le vidage de cache
Par contre comme on rentre dans le détail (je n'avais pas lu le code, sinon je t'aurais déjà décapité pour le coup de baser la clé de cache sur le nombre de requête, zOmg !), donc j'insiste au passage sur le fait d'être sûr que ce soit vraiment plus performant... Un accès à la base de données est bien souvent moins lent qu'un accès à un fichier (surtout s'il est lourd) et seule une mise en cache en RAM est vraiment intéressante. Ce n'est bien sûr pas vrai si la base a déjà tendance à être trop sollicitée et qu'il faut donc la délester de quelques requêtes.
Mais tout ça ce sont des questions d'optimisation, et... Early Optimization Is Evil !
Ressources [PHP][MySQL][prototype.js]