Je ne sais pas comment gérer cela dans un magasin de données BigTable.Dans une banque de données BigTable, en ce qui concerne la concurrence, comment "verrouiller" une entité?
Imaginez l'exemple suivant (juste pour expliquer le concept L'exemple ne correspond pas à mon modèle de données réelles.):
- J'ai une entité de compteur qui assure le suivi du nombre de transactions dans mon dataStore. Supposons que le 'compte' actuel est 100.
- Maintenant, deux requêtes Web lisent cette valeur en même temps.
- Les deux requêtes Web ajoutent une nouvelle transaction
- Et enfin les deux mettent à jour le compteur (à 101).
La valeur du compteur est maintenant inexacte. Il devrait être 102.
Des suggestions sur la façon de gérer cette situation? Puis-je "verrouiller" le compteur pour m'assurer que la seconde requête Web ne l'a pas encore lue jusqu'à ce que la première requête Web soit terminée?
Merci Nick. Quand vous dites "insérer une transaction", voulez-vous dire exécuter une fonction dans db.run_in_transaction? Quand je fais une "lecture" dans ma fonction transactionnelle, va-t-elle "verrouiller" l'objet et lancer une erreur si un autre thread essaie d'accéder à une valeur qui est maintenant "obsolète"? Merci, je suis encore nouveau dans la façon dont bigTable gère les transactions :) – willem
Eh bien, vous avez appelé vos entités "Transactions", alors quand j'ai dit "insérer une transaction", je voulais dire "insérer une 'entité" de transaction ".Les lectures à l'intérieur des transactions sont transactionnelles, cependant, oui - seulement avec une concurrence optimiste plutôt qu'avec des verrous. –