これを行う良い方法はないと思いますが、そうしなければならない場合、Appengine のデータストアに set 操作をどのように実装しますか?
たとえば、整数の 2 つのコレクションが与えられた場合、交差操作と除外操作 (B にはない A のすべての項目) で良好なパフォーマンスを得るには、それらをデータストアにどのように格納しますか?
これを行う良い方法はないと思いますが、そうしなければならない場合、Appengine のデータストアに set 操作をどのように実装しますか?
たとえば、整数の 2 つのコレクションが与えられた場合、交差操作と除外操作 (B にはない A のすべての項目) で良好なパフォーマンスを得るには、それらをデータストアにどのように格納しますか?
データストアAPIには組み込みのセット操作はありません。2つの選択肢があります。
小さいセット(数百のアイテム)の場合セットAとセットBの両方に対してキーのみのクエリを実行し、アプリケーションコードで共通部分を実行することで解決できる場合があります。「小さい」の正確な定義は、アプリケーションによって異なります。
大きなセット(数百万のアイテム)の場合必要な交差点が事前にわかっている場合は、新しいレコードを挿入するたびにそれらを計算できます。たとえば、2つのセットAとBがあり、最終的にクエリを実行する必要があることがわかっているとします(AはBと交差します)。Aを挿入するときはいつでも、それがすでにBにあるかどうかを確認してください。ある場合は、この事実をどこかに記録します(別のエンティティタイプで、またはAまたはB自体のブールプロパティとして)。もちろん、Bについてもこれを行う必要があります。
オプション1を使用すると、さまざまなセットを作成できますが、各セットの大きさによって制限されます。
オプション2を使用すると、数百万のメンバーを含むセットを作成できますが、セットが数個を超える場合は、セットと演算子の可能なすべての順列を定義しようとすると扱いにくくなります。