私のGAE構造との強い一貫性を達成するために私が持っているこの計画を実行したいと思います。現在、これが私が持っているものです(それは本当に簡単です、私は約束します):
クラス (プログラミング「クラス」ではなくクラスを意味するクラス) モデルと割り当てモデル、およびユーザー モデルがあります。現在、クラスには、ユーザー ID のインデックス付きリストである memberIds と呼ばれる整数リスト プロパティがあります。クラスには、割り当て ID の文字列リストもあります。
新しい割り当てが作成されるたびに、それぞれのクラス エンティティも更新され、新しい割り当て ID がそのリストに追加されます。
私がやりたいことは、ユーザーの新しい割り当てを取得することです。私がしているのは、すべてのクラスのクエリmemberId = currentUserId
です。返される各クラスには、割り当て ID のリストがあります。これらの ID を使用して、それぞれの割り当てをキーで取得します。このデータ モデルを使用して数か月が経過した後、これ (クラス クエリの部分) との強い一貫性が得られない可能性があることに気付きました。
ユーザー A が課題を投稿すると (その結果、ClassA が更新されます)、新しい課題をチェックインしたユーザー B は、その直後に ClassA への更新された変更をまだ確認していない可能性があります (そうですか?)。
これは望ましくありません。解決策の 1 つは、ユーザーの祖先クエリを使用することですが、私の場合はそれが不可能であり、エンティティ グループは 1 秒あたり 1 回の書き込みに制限されており、それで十分かどうかはわかりません。
新しい課題が投稿されるたびに、私たちはこれを行います:
- それぞれの Class エンティティを取得します
- クラスに課題IDを追加する
- このクラスのすべてのメンバーの ID を取得します
- メンバーであるすべてのユーザーをキーで取得します
- ユーザーエンティティには、ユーザーがメンバーであるクラスのリストがあります。(LocalStructuredProperty、辞書のようなもの:{"classId" : "242", "hasNewAssignment" : "Yes"} )。そのクラスにフラグを立てます
hasNewAssignment = YES
- ユーザーが新しい割り当てを取得したい場合、新しい割り当てがあり、私がメンバーであるグループを照会する代わりに、クラスのユーザーオブジェクトリストをチェックし、どのクラスに新しい割り当てがあるかを確認します。
- これらのクラスをキーで取得します (これまでのところ強い一貫性がありますよね?)
- クラスの割り当てリストを確認し、すべての割り当てをキーで取得します。
したがって、このプロセス全体を通して、私は一度も質問したことがありません。すべての結果は強い一貫性があるはずですよね? これは良い解決策ですか?私は物事を過度に複雑にしていますか?これにより、読み取り/書き込みコストが急増していますか? どう思いますか?