この質問に対して1つの正解はありません。最適なソリューションは、主に、特定の時点で削除された状態になる可能性のあるエンティティの割合に依存します。
1つのオプションは、@Index(IfTrue.class) boolean active;
のようなフィールドを保存し、すべてのクエリにこのフィルタを追加することです:
ofy.load().type(Thing.class).filter("size >", 20).filter("active", true)
これの欠点は、余分なインデックスを追加する必要があることである - あなたは今、マルチプロパティが必要な場合がありますので、おそらくいくつかの単一のプロパティのインデックスが十分にあるインデックス。
また、「削除済み」フラグを保存して、削除したエンティティをクエリ結果から手動で除外することもできます。維持するインデックスは少なくなりますが、不要なレコードを取り戻す際に、各クエリに余分なオーバーヘッドが加わります。あなたの削除されたエントリが疎である場合、これは問題ではありません。
最後のトリックです。おそらく最も有用なので、削除された日付をインデックスに保存することをお勧めします。@Index Date deleted;
これにより、アクティブなアイテムを取得することができます。また、削除する可能性のある古いエンティティを取得するためにdatestampでフィルタリングできます。ただし、削除されたエンティティの割合が高い場合は、削除された日付がマルチプロパティインデックスにインデックスを作成し、インデックスサイズが大幅に増加する可能性があることに注意してください。この場合、@Index(IfNull.class) Date deleted;
にしてmap-reduceを使用して、十分に古いエンティティをパージすることができます。
Datastoreは1つのみです。おそらく同じエンティティの種類を意味していました。 –
はい...私は同じエンティティの種類を意味しました。おかげでPeterが修正を受けました –