2010-06-21 6 views
2

J'utilise une file d'attente de tâches pour certaines mises à jour de données dans GAE.Faut-il verrouiller bigtable?

Mon look fichier queue.xml comme ci-dessous

<queue> 
    <name>data-processing</name> 
    <rate>20/s</rate> 
    </queue> 

Mon servlet de traitement de file d'attente crédit baisse de 1 pour chaque tâche. Lors du traitement, il faut vérifier la disponibilité du crédit et procéder plus loin seulement si le crédit est disponible.

Le crédit est stocké dans une table et mise à jour quand une tâche est terminée. Je vois les tâches comme des discussions et je m'inquiète du problème de la synchonisation.

si 2 ou plusieurs tâches table de crédit requête/mise à jour simultaniously? Ai-je besoin de créer un mécanisme de verrouillage? Si oui, alors comment?

Répondre

5

Oui, vous avez besoin de synchronisation. Vous mettez généralement à jour les crédits dans un schéma de lecture-modification-écriture: lisez d'abord les crédits disponibles, soustrayez-en un et écrivez les crédits restants. Si deux tâches le font en même temps, l'une peut remplacer le résultat de l'autre, ce qui entraîne le stockage d'un compte de crédit incorrect. (À moins qu'il n'y ait une instruction atomique pour cela, qui existe pour Memcache, mais pas pour le magasin de données, je crois).

Vous pouvez utiliser des transactions pour résoudre ce problème, voir http://code.google.com/appengine/docs/java/datastore/transactions.html

0

La file d'attente App tâche du moteur se charge de la comptabilité pour le taux d'exécution elle-même. Vous n'avez pas besoin de faire autre chose que de configurer queue.xml comme vous l'avez déjà fait.

Questions connexes