2009-08-22 4 views
2

Si l'application demande un jeu de résultats similaire à celui qui a été récemment demandé, comment l'ORM peut-il garder la trace des résultats périmés et qui peuvent être réutilisés sans utiliser trop de ressources (mémoire) ou créer trop de complexité?Quelles stratégies un ORM peut-il utiliser pour mettre en cache des données tout en minimisant la complexité?

+0

Sauf si vous construisez vous-même un ORM, c'est une question étrange à poser. Qu'est-ce que vous essayez de faire exactement? – Juliet

+0

Veillez à examiner si votre ORM doit fonctionner sur plusieurs processus/machines ... la couche de mise en cache devient beaucoup plus difficile dans ce cas. –

Répondre

2

L'invalidation de cache est une question très délicate. Le cas de base que vous proposez semble être quelque chose qui est le plus facilement géré par le cache de requêtes de la base de données (les requêtes fréquentes conserveraient la requête dans le cache). Une fois que la stratégie de cache devient plus compliquée que cela, la plupart des gains proviendraient de la gestion manuelle de l'expiration du cache et du cache avec un stockage de cache de valeur-clé séparé.

Si ce genre de chose est la norme pour l'accès aux données de votre application et que vous essayez de nouvelles choses à la mode, les vues mapreduce de couchdb pourraient bien convenir. Au-delà de la mémoisation de base, j'ai tendance à voir la mise en cache au niveau ORM comme un plan assez difficile et médiocre.

+1

Je me référais directement à un cache en dehors du niveau ORM comme memcache (je fais du développement web), mais n'importe quel magasin de valeurs clés devrait fonctionner. Essentiellement, faire la mise en cache ORM automatiquement nécessiterait beaucoup de duplication des choses que la base de données devrait faire en ajoutant de l'architecture et des bogues. Dans la plupart des cas, les performances seraient mieux obtenues grâce à la mise en cache explicite au niveau de l'application et à une meilleure indexation de la base de données, etc. –

1

Lorsque j'ai besoin de savoir si les données locales sont synchronisées avec le serveur (distant), je garde une trace des transactions. Donc, avant de "rafraîchir" les données locales, je "interroge l'historique des transactions" et, si aucune transaction n'est survenue sur les données (distantes) concernées depuis la dernière "actualisation", elle est toujours synchronisée.

Mais je ne sais pas si c'est "minimiser la complexité".

Questions connexes