2

Pythonを搭載したGoogleAppEngineで、競合状態の問題の解決策を探しています。つまり、複数のユーザーが同時に特定のカウンターをインクリメントしようとしています。そのうちの2つを見つけました。トランザクションで説明されているincrement_counter()とcompare-and-setでのbump_counter()です。私の質問:1)両方とも競合状態の問題を完全に解決していますか?2)もしそうなら、どちらが良いですか?

さらに、コードがどのように問題を解決するのかわからないので、誰かがそれらのそれぞれについてもっと詳しく説明することができますか?たとえば、1)increment_counter()トランザクション中に、別のユーザーがカウンターを更新すると、トランザクションは失敗しますか?2)同様に、compare-and-setのbump_counter()中に、別のユーザーがカウンターを更新すると、client.cas()は失敗しますか?

4

1 に答える 1

3
  1. はい、どちらも競合状態を解消できます。

  2. 1つ目はデータストア、2つ目はmemcacheを使用しています。したがって、それらを比較することはできません。Memcacheは揮発性であり、いつでも削除できます。永続的なデータの保存には使用しないでください。したがって、この点では、データストアトランザクションの方が優れています。また、トランザクションは一連のエンティティの原子性を保証できますが、compare_and_setは1つのmemcache値でのみ原子性を保証します。

  3. トランザクションはブロッキングを行いません。彼らが衝突を検出した場合、彼らは失敗し、あなたはそれをロールバックして自分でもう一度繰り返す必要があります。

  4. memcacheの同上:自分で手順を繰り返す必要があります。

于 2013-02-14T06:54:15.910 に答える