エンティティグループの主な用途は、トランザクション内の複数のエンティティを更新する手段を提供することです。
それらを使用する必要がなかった場合は、あなたの祝福を数えてください。一貫性を保つために2つのエンティティを同時に更新する必要がないようにデータモデルを設計しているか、そうでなければ必要ですが幸運に恵まれています:)
InvoiceエンティティタイプとLineItemエンティティタイプがあると想像してください。1つの請求書に複数のLineItemを関連付けることができます。私の請求書エンティティには、LastUpdatedというフィールドがあります。LineItemが請求書に追加されるたびに、現在の日付をLastUpdatedフィールドに保存したいと思います。
私の更新関数は次のようになります(擬似コード)
invoice.lastUpdated = now()
lineitem = new lineitem()
invoice.put()
lineitem.put()
請求書のput()が成功し、明細のput()が失敗した場合はどうなりますか?請求書の日付には何かが更新されたことが示されますが、実際の更新(新しいLineItem)はありません。解決策は、両方のputs()をトランザクション内に配置することです。
別の解決策は、このデータをlastUpdatedフィールドに格納する代わりに、クエリを使用して最後に挿入されたLineItemの日付を見つけることです。ただし、これには、最後に広告申込情報が追加された時刻を知りたいときに、請求書とすべての広告申込情報の両方を取得する必要があり、貴重なデータストアの割り当てが必要になります。
ポスターのコメントに返信するために編集する
ああ。私はあなたの混乱を理解していると思います。上記の段落は、トランザクションが重要である理由を示しています。ただし、エンティティグループがトランザクションにどのように関連しているかがわからないため、エンティティグループについてはまだ気にしないと言います。ただし、db.run-in-transactionを使用している場合は、おそらく気付かないうちにエンティティグループを使用しています。すべてのトランザクションには1つのエンティティグループのみが含まれ、特定のトランザクションは同じグループに属するエンティティにのみ影響を与える可能性があります。ここを参照してください
「トランザクション内のすべてのデータストア操作は、同じエンティティグループ内のエンティティで操作する必要があります」。
取引ではどのようなことをしていますか?デフォルトで独自のエンティティグループにある1つのエンティティのみでトランザクションを使用する理由はたくさんあります。ただし、上記の例のように、2つ以上のエンティティの同期を維持する必要がある場合があります。InvoiceエンティティとLineItemエンティティが同じエンティティグループにない場合、それらへの変更をdb.run-in-transaction呼び出しでラップすることはできません。したがって、2つ以上のエンティティをトランザクションで操作する場合は、最初にそれらが同じグループにあることを確認する必要があります。それがなぜそれらが有用であるかをより明確にすることを願っています。