2009-09-06 4 views
3

J'ai un modèle MyModel (prolongeant le db.Model de Google), et je veux garder une trace du nombre de modèles qui ont été créés.Où placer le code pour auto-incrémenter un compteur partitionné sur Google App Engine/Django quand on crée un nouveau modèle?

Je pense que le code de la conversation d'E/S de Google sur Sharding Counters est assez bon, donc je l'utilise. Mais je ne suis pas sûr où je devrais appeler l'incrément lors de la création d'un nouveau code. (J'utilise Django, et j'ai gardé la disposition familière models.py, views.py, etc. pour les applications du projet.)

Il y a quelques possibilités qui semblent venir à l'esprit pour savoir où mettre le code incrémenter:

  1. surcharge du Model.put() pour qu'il incrémente le compteur lorsque le modèle est enregistré pour la première fois, et la surcharge de la même Model.delete() pour décrémenter le compteur

  2. Attacher une sorte d'écouteur aux sauvegardes/suppressions, et vérifier que la sauvegarde est d'un nouveau modèle (est-ce que GAE a de tels écouteurs?)

  3. Mettez le compteur incrémenter code dans la fonction view.py qui crée/supprime les modèles

je serais bien obligé des suggestions et réflexions quant à la façon de le faire mieux (et pros/contre de chaque option).

Merci d'avoir lu.

Best, Brian

+0

Plutôt que de créer un compteur de modèles, pourriez-vous utiliser l'API Datastore Statistics? http://code.google.com/appengine/docs/python/datastore/stats.html –

Répondre

2

Je propose l'approche (curieusement proche de "l'aspect de la programmation orientée") proposée par "Fan App Engine" here (essentiellement "mise en scène") et surtout here (montrant la bonne solution : pas de «patch de singe» mais plutôt l'utilisation de la fonctionnalité «hooks» intégrée d'App Engine. Les deux "Hacks" qu'il donne comme exemples sont assez proches de votre cas d'utilisation pour que vous n'ayez aucun problème à implémenter votre code - en effet ce n'est pas si loin de la solution "auditeur" que vous avez considéré sous point (2) , juste un peu plus général parce que "hooks" peut réellement "interférer" avec l'opération (pas que vous en ayez besoin ici) et être capable de fonctionner avant ou après l'opération elle-même (dans votre cas je suspecte "after" mieux, juste au cas où le put échoue en quelque sorte, auquel cas j'imagine que vous ne voulez pas le compter).

+0

Quelqu'un sait-il quand nous serons en mesure d'accéder au hook api de Java? –

Questions connexes