この質問に対する唯一の正解はありません。最適なソリューションは、主に、特定の時点でエンティティの何パーセントが削除された状態になる可能性があるかによって異なります。
1 つのオプションは、次のようなフィールドを保存し、@Index(IfTrue.class) boolean active;
このフィルターをすべてのクエリに追加することです。
ofy.load().type(Thing.class).filter("size >", 20).filter("active", true)
これの欠点は、追加のインデックスを追加する必要があることです。単一プロパティのインデックスで十分だった複数プロパティのインデックスが必要になる可能性があるため、おそらく複数のインデックスを追加する必要があります。
または、「削除済み」フラグを保存して、削除済みエンティティをクエリ結果から手動で除外することもできます。維持するインデックスは少なくなりますが、不要なレコードを引き戻すため、各クエリに余分なオーバーヘッドが追加されます。削除されたエントリがまばらである場合、これは問題になりません。
最後のトリック。おそらく最も便利なので、削除された日付をインデックスに保存するのが最善だと思うかもしれません。 @Index Date deleted;
これによりfilter("deleted", null)
、アクティブなアイテムを取得したり、日付スタンプでフィルター処理して、削除したい古いエンティティを取得したりできます。ただし、これにより、削除された日付がマルチプロパティ インデックスにインデックス化されるため、削除されたエンティティの割合が高い場合はインデックス サイズが大幅に増加する可能性があることに注意してください。この場合、@Index(IfNull.class) Date deleted;
map-reduce を使用して、十分に古いエンティティを消去することができます。