2011-10-31 9 views
2

私は選挙を実行するためのGAE Pythonアプリケーションで作業しています。私は各選挙のために選挙実体を持っています。各選挙には約2〜20名の候補者があり、候補者ごとに候補者があります。選挙は、各候補者の祖先も持つGAEエンティティの関係:祖先対参照小道。キーのリスト対

  1. 私は、3つの異なるエンティティ関係をモデル化するためのオプションを検討しています。

  2. Electionを参照する候補に参照プロパティを追加します。

  3. 候補リストの候補を含むElectionにリストプロパティを追加します。

候補者の数が比較的少ないため、すべてが機能するようです。私は現在高次のデータストアを使用しているので、最初のオプションを実行しています。私は強い一貫性が必要です。

私の選挙のアプリケーションでは、上記の3つのオプションのそれぞれについて賛否両論は何ですか?

答えて

2

書き込みレートとエンティティの数が両方とも低いため、これらのアプローチのいずれも正常に動作するはずです。最高のものは、アクセス方法によって異なります。トランザクション内の複数のエンティティを更新する必要がある場合は、エンティティグループ(祖先など)を使用します。あなたが選挙で候補者を自然に注文する必要がある場合、リストのプロパティはそれを提供します。それ以外の場合は、候補者から選挙への参照が最も自然な選択です。

または、NDBを使用して候補エンティティを選挙エンティティに埋め込むことができます。

+0

ありがとう、それはすべて意味がある。 NDBも面白く見えます。 –

+0

候補者が自然順序付けをしていて、トランザクション内の複数のエンティティを更新したいとします。祖先関係を持たず、リストのプロパティに候補エンティティを格納する理由は何ですか? –

+0

@ジェフ確かに、それはうまくいくでしょう。ただし、並べ替えキーを使用して並べ替えを行うことができる場合は、代わりにその並べ替えキーを使用する必要があります。 –

2

候補者は複数の選挙に参加することができ、選挙には複数の候補者が含まれることになります。 これはM2Mの関係であり、それを実装する唯一の効率的な方法は、App Engineでリストフィールドを使用することです。

候補者が複数の選挙に参加した場合、複数のエンティティを持つことを気にしない場合は、参照プロパティを使用できます。

もう一つのヒント: 維持心(5 /秒)でのデータストアの書き込み制限、代わりにその候補者のためのカウンタを更新するすべての「投票」アクション、あなたはsharded countersを使用するかtaskqueue with 5 tasks/sec upper limitで実行する新しいタスクを作成することができます。

+0

私は候補者が複数の選挙に参加することを許可していません。この場合、私は2つの候補オブジェクトを持っています。私は投票がランクされた投票を使用しているので、カウントを更新するためにカウンタを使用していません。代わりに、私は定期的にそれらを数えるためにすべての投票を集めます。また、投票はすべてスタンドアロンエンティティなので、書き込み制限について心配する必要はありません。 –

関連する問題