10個のbar_entitiesを持つfooレコードを検索し、これらの10個のエンティティのうち少なくとも2個を持つすべてのfooレコードを検索すると、45個の可能な等価値10!/(2!*(10-2)!)= 45が得られます。
これは、10_C_(2-1)= 10の読み込みで推測できます。 1回の読み取りにこれを削減するために
SELECT * from table WHERE bar="1" AND bar in ["2", "3", "4", "5", "6", "7", "8", "9", "0"]
SELECT * from table WHERE bar="2" AND bar in ["3", "4", "5", "6", "7", "8", "9", "0"]
SELECT * from table WHERE bar="3" AND bar in ["4", "5", "6", "7", "8", "9", "0"]
etc.
はfooのレコードが追加されたときに指定したレコードのすべての2つの組み合わせを持っていた別のテーブルを読み込むことが必要となります。
Say you had
foo_table
foo1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
foo2 [1, 3, 4]
foo3 [1, 2, a]
foo4 [b, 6, c]
foo_combo_2_table
Parent Combination
foo1 12
foo1 13
... and all 45 foo1 combinations each in its own row
foo2 13
foo2 14
foo2 34
foo3 12
foo3 1a
foo3 2a
etc.
Now you can do a
indexes = SELECT __KEY__ from foo_combo_2_table WHERE combination IN [12, 13, 14, 15, ... all 45]
keys = [k.parent() for k in indexes] # you would need to filter for duplicates
このようにして、インデックスの問題が爆発することはありません。
これらのそれぞれに対して3つまたは4つのエンティティを実行する場合は、foo_combo_n_tableを作成するか、10_C_(n-1)回の読み取りを行う必要があります。
答えは、エンティティの既知のリストとの照合を目的としている場合に役立ちますが、実際に質問している内容の例があります。 Fooのインスタンスを10個のバーキーbarsプロパティ。私は少なくとも2つの一致するバーキーを持つ他のすべてのFooエンティティを取得したい。 私がこの質問で言ったように、これは複数のデータストアの読み込みで行うことができますが、読み込みが1つだけで済むか、必要な読み込み回数が少なくて済むのは本当に素晴らしいことです。 – jamtoday