我已经阅读了一些关于Google数据存储区中多对多关系的问题和文章,但我仍然不确定哪种方式最适合我的情况:我有一个User
引用N CollectionOfThings
。 CollectionOfThings
可以引用M个用户。 M和N都非常小。我除了不超过5个。(我申请的性质)。几乎在每个请求中都提取用户对象。另一个对象没有。我需要从CollectionOfThings
所有用户的实例和用户CollectionOfThing
个实例的所有实例进行查询。
所以我看到可能的实现:
CollectionOfThings
有一个用户列表。 User
有一个CollectionOfThings
的集合。关系的两端都没有用@Load注释。如果我需要一个relatin部分的对象,我用ofy()加载它们.load()。keys();
我使用了一个关系对象,我可以查询ofy().... filter(" user",...),反之亦然。
现在最大的问题是:从数据存储读取操作的角度来看,最有效的方法是什么?
答案 0 :(得分:1)
从最简单/最简单的方法开始,您可以随时迁移。根据您的描述,我将从指向两个方向的Set<Ref>
字段开始。您可以使用@Load
组,以便默认情况下不会发生加载,但您仍然可以使用该工具。 确保在交易中更新关系的两端。
假设User
&lt; - &gt; CollectionOfThings
关系是对称双向的,另一个选择是仅保留一组键/ ref并且@Index它。这样做的好处是,您不需要事务来保持bidir关系同步。它的缺点是你使用查询来反向关系;那些查询最终会保持一致;维护这些索引需要额外的费用。