Question

Eh bien, je pense que j'ai un doute très basique ici:

Je développe une application sur GAE (Java) et l'exécution d'une requête à la datastore qui retourne beaucoup des entités, donc je dois le mettre en cache. J'utilisais memcache et cela fonctionnait très bien, mais si je continue la liste des entités dans une variable statique, la demande tout se passe comme deux fois plus rapide que d'utiliser memcache. Je pense que ce parce que je ne suis pas désérialisation les entités tout le temps.

Quel serait l'inconvénient d'utiliser une variable statique plutôt sur memcache? Je ne sais pas s'il pourrait y avoir plusieurs cas de mon application dans le nuage, et donc plusieurs instances de ma variable statique?

La liste des entités que je suis en train de cache sont les meilleurs messages (plus de score) de la semaine dernière. Je prends cette liste et choisissez 5 messages au hasard et leur montrer dans quelques pages.

Merci pour l'aide!

Était-ce utile?

La solution

App Engine échelles en créant de nouvelles instances de votre application en tant que le nombre d'utilisateurs augmente l'atteignent. Comme l'a dit drudru, les utilisateurs différents peuvent être servis par des instances différentes. En général, memcache est le plus rapide endroit pour stocker quelque chose que vous voulez être cohérent au niveau mondial. Cependant, dans votre cas il peut y avoir une certaine marge d'amélioration.

Vous mentionnez que vous avez une liste de messages et que vous choisissez au hasard 5 pour montrer aux utilisateurs. Est-il important si 2 différents utilisateurs voient un ensemble différent de 5? Si vous choisissez les aléatoires de toute façon, peut-être n'a pas d'importance. Ensuite, vous pouvez stocker la liste complète des postes memcache et tirer 5 les aléatoires sur memcache et de les stocker dans une variable statique.

En second lieu, qu'est-ce que vous memcaching exactement, et comment vous le tirant? Entreposez-vous un tas de postes à plein dans memcache, les faire tous, puis en choisissant 5? Peut-être vous pouvez simplement télécharger la liste des messages, choisissez 5, et seulement obtenir le 5 dont vous avez besoin? Si vous pensez que c'est le désérialisation qui est de vous ralentir, cela pourrait aider. Faites-vous tout traitement sur les postes après que vous les obtenez? Dans ce cas, les résultats pourraient de ce traitement sont mises en cache?

Autres conseils

Vous ne pouvez pas compter sur les variables statiques (ou toute autre chose dans la mémoire JVM) être autour lorsque la demande suivante frappe, parce que Google est libre de démarrer et d'arrêter des machines virtuelles quand ils se sentent comme ça. Des regards de celui-ci, ils semblent préférer commencer JVMs supplémentaires au lieu de threads supplémentaires dans la même machine virtuelle Java, ce qui aggrave ce problème.

Mais, vous devriez être en mesure d'utiliser des variables statiques comme une couche de cache, à condition que vous avez un moyen de charger les données d'un autre endroit si elle est parti.

Je voudrais aussi essayer de ne pas aller trop loin avec l'utilisation de la mémoire il y a, il doit y avoir un quota sur la quantité de mémoire que vous pouvez utiliser.

Oui, il n'y a aucune garantie que votre instance sera la même chose pour différents utilisateurs sur Internet. Vous pourriez finir par lire constamment ceci en statique dans le pire des cas. Le memcache a une plus grande garantie d'être disponible. Je voudrais simplement utiliser le memcache et votre application ne devrait pas avoir de problèmes à grande échelle dans l'avenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top