2

それは良い習慣ですか?1 人のユーザーがリクエストを行い、データストアからエンティティを取得し、変更して保存します。別のユーザーが同じエンティティで同時にこれを行います。最初のユーザーの要求がまだ完了していない場合、2 番目のユーザーは最初のユーザーの変更を見ることができますか? 2人のユーザーに「同意」してもらいたい場合、どのパターンを使用すればよいですか? 最初は「はい」と言い、2 番目は「はい」と言い、取引が成立します。クライアント側からのポーリングを使用して監視する必要がありますか?

4

1 に答える 1

2

そのためには取引が必要です。

詳細と実践については、こちらをお読みください: https://developers.google.com/appengine/docs/python/datastore/overview

トランザクションは、最初にコミットしたものが勝つというロジックで発生します! しかし、再試行は可能です...

@db.transactional(retries=3)
def make_agreement_for_user_a(agreement):
    agreement = Agreement.get(agreement)
    if agreement.user_a:
        return "User A has already agreed"
    agreement.user_a = TRUE
    agreement.put()
    if agreement.user_b:
        return "Agreement complete"
    return "User A agreed"

@db.transactional(retries=3)
def make_agreement_for_user_b(agreement):
    agreement = Agreement.get(agreement)
    if agreement.user_b:
        return "User B has already agreed"
    agreement.user_b = TRUE
    agreement.put()
    if agreement.user_a:
        return "Agreement complete"
    return "User B agreed"

これは単なる例であり、最適化されておらず、既に合意があるかどうかを確認することもありません。後は君しだい

于 2012-12-25T13:59:34.563 に答える