数日前、私はトランザクションと冪等性について質問を投稿しましたが、あまり反応がありませんでした。
Google App Engine: (Python) データストア トランザクションと冪等性
今日、トランザクションはデータストアの機能であることに気付きましたが、ほとんどの場合、Memcache からデータを取得し、一連の作業を行ってから、memcacheとデータストアに保存しています。
データが memcache にない場合にのみ、データストアからデータを取得します。
関数をトランザクションに配置すると、別のリクエストが memcache から同じデータをプルするのを防ぐことができますか?
例は通常、次のようになります。
Begin Transaction
Get Data from Datastore
Do Work on data
Put data back in Datastore
私のコードでは、ほとんどの場合、このように見えます
Begin Transaction
Get data from Memcache
if not data:
Get data from Datastore
Do work on data
Put to Memcache
Put to Datastore
これは機能しますか?
トランザクション コードは、ブロック全体が同時に実行されるのを防止するのに十分なほどスマートですか? または、ロックはトランザクション関数の最初のデータストア操作から最後のデータストア操作までのみですか?
2 つの要求が memcache から同じデータをプルして作業を行っているが、データをデータストアに戻すときに衝突せず、後者の要求が最初の要求の変更を踏みにじる可能性はありますか?