从GAE数据存储中读取多对多对象的最有效方法

问题描述:

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

所以我看到可能的实现:

  • CollectionOfThings有用户的列表。 User有一个CollectionOfThings的集合。关系的两端不用@Load注释。如果我需要一个relatin零件的对象,我使用ofy()。load()。keys();我使用一个关系对象,我可以查询ofy().... filter(“user”,...),反之亦然。

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

从最简单/最简单的方法开始,您可以随时迁移。从你所描述的,我会开始Set<Ref>领域指向两个方向。您可以使用@Load组,以便默认情况下不会发生负载,但您仍然可以使用该设施。 确保更新交易中关系的两端。

另一种选择,假定User < - >CollectionOfThings关系是对称的双向的,是只保持在一侧上设置键/参考文献的和@index它。这具有的优点是您不需要交易就可以保持bidir关系的同步。它的缺点是你使用查询来反向关系;这些查询将最终一致;维护这些索引需要额外的费用。