12

GAE Datastore のエンティティ階層に関する以前の質問に続き、いつエンティティ グループを使用するかについてまだ混乱しています。

次の簡単な例を見てください。

  • すべてCompanyに 1 つ以上のEmployeeエンティティがあります
  • を別の に移動するEmployeeことはできずCompany、ある を処理するユーザーは別の の をCompany見ることはできませんEmployeeCompany

Employeeこれはの子エンティティを作成できるケースのように見えますCompanyが、実際にはどのような結果になるのでしょうか? これにより、スケーラビリティが向上しますか、スケーラビリティが損なわれますか、それとも影響はありませんか? エンティティ階層を使用する場合と使用しない場合のその他の利点/欠点は何ですか?

(エンティティ グループはトランザクションを有効にしますが、この例ではトランザクションは必要ないと仮定します)。

4

2 に答える 2

11

トランザクションが必要ない場合は、エンティティ グループを使用しないでください。場合によっては速度が低下し、速度が上がることはありません。それらの唯一の利点は、トランザクションを有効にすることです。

私が知る限り、エンティティ グループを使用するのに最適な場所は、多くのユーザーが同時にアクセスする可能性が低く、頻繁にトランザクションに含めたいと思うデータです。そのため、おそらくそのカートの所有者だけが頻繁に扱うショッピング カートのコンテンツを保存した場合、それらのコンテンツはエンティティ グループに適している可能性があります。そのデータに対してトランザクションを使用できると便利です。エンティティを追加または更新するときであり、そのときに他の人をロックアウトしていません。

于 2010-12-01T17:11:41.793 に答える
9

Nick は、グループを必要以上に大きくすべきではないと明確に述べました。

トランザクションが必要な場合は、エンティティ グループを使用します。あなたが与えた例では、従業員のReferencePropertyは同様の結果を達成します。

キーフェッチとクエリは親エンティティからキーオフできるため、トランザクションは別として、エンティティ グループが役立ちます。ただし、これらのタイプのユースケースではマルチテナンシーを検討することをお勧めします。

最終的に大きなエンティティ グループはスケーラビリティを損なう可能性があり、エンティティ グループ内のエンティティは同じタブレットに格納されます。1 つのエンティティ グループに多くのものを詰め込むほど、並行して実行できる作業の量が減ります。代わりに、順次実行する必要があります。

于 2010-12-01T17:10:34.920 に答える