从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关系的同步。它的缺点是你使用查询来反向关系;这些查询将最终一致;维护这些索引需要额外的费用。