我在将设置问题转换为高效的Google应用引擎数据存储解决方案时遇到问题。问题如下。我有一个实体定义两个对象之间的关系,即这样的东西:
struct Relation
{
Obj1 int
Obj2 int
// other data
}
现在我想以有效的方式执行以下查询:给定一组对象set = [obj1, obj2, obj3, obj4]
,我想找到E
的所有Relation实体(E.Obj1 ∈ set ∧ E.Obj2 ∈ set
)。请注意,我事先不知道该设置,因此我无法预先计算集合中的所有条目。有没有办法在数据存储区中表示此问题,以便我可以有效地检索属于给定集合的所有关系?
答案 0 :(得分:1)
等效的GQL查询是“SELECT * FROM Kind WHERE Obj1 IN:1 AND Obj2 IN:1”,将集合作为第一个参数传递。不幸的是,IN查询扩展到每个术语的一个查询,因此这里有一个组合的查询爆炸 - 在4个元素集的情况下有16个查询。用标准查询实际上没有办法避免这种情况。