我已经阅读了有关Google数据存储区中多对多关系的一些问题和文章,但是我仍然不确定哪种方法最有效:我有一个User引用了N CollectionOfThingsCollectionOfThings可以引用M个用户。 M和N都非常小。我除了不超过5。(我的应用程序的性质)。几乎在每个请求中都提取用户对象。另一个对象没有。我需要从所有用户的CollectionOfThings实例以及一个用户的CollectionOfThing实例的所有实例中查询。

所以我看到了可能的实现:


CollectionOfThings具有用户列表。 User具有CollectionOfThings的集合。关系的两端均未使用@Load注释。如果我需要一个相关部分的对象,则可以用ofy()。load()。keys();加载它们。
我使用一个可以查询ofy().... filter(“ user”,...)的关系对象,反之亦然。


现在最大的问题是:从数据存储读取操作的角度来看,最有效的方法是什么?

最佳答案

从最简单/最简单的方法开始,您以后总是可以迁移。根据您的描述,我将从两个方向指向的Set<Ref>字段开始。您可以使用@Load组,以使加载默认情况下不会发生,但是您仍然可以使用该工具。确保在事务中更新关系的两端。

假设User CollectionOfThings关系是对称双向的,另一种选择是仅将Set of key / refs保留在一侧,并@Index。这样做的好处是,您不需要进行交易即可使bidir关系保持同步。缺点是您使用查询来沿相反的方向跟踪关系。这些查询最终将保持一致;维护这些索引需要额外花费。

10-02 04:38