12

我之前关于 GAE 数据存储实体层次结构的问题之后,我仍然对何时使用实体组感到困惑。

举个简单的例子:

  • 每个Company都有一个或多个Employee实体
  • anEmployee不能移动到另一个Company,与一个打交道的用户Company永远看不到Employee另一个的 s 。Company

这看起来像是我可以制作Employee子实体的情况Company,但实际后果是什么?这会提高可扩展性、损害可扩展性还是没有影响?使用或不使用实体层次结构的其他优点/缺点是什么?

实体组启用事务,但在此示例中假设我不需要事务)。

4

2 回答 2

11

如果您不需要事务,请不要使用实体组。在某些情况下,它们会减慢速度,而从不加快速度。它们唯一的好处是它们支持交易。

据我所知,使用实体组的最佳位置是许多用户不太可能同时访问的数据,并且您经常希望将其包含在事务中。因此,如果您存储了购物车的内容,可能只有该购物车的所有者会经常处理这些内容,这些内容可能对实体组有好处 - 能够为该数据使用事务会很好当您添加或更新实体时,您不会将任何其他人锁定在任何事情之外。

于 2010-12-01T17:11:41.793 回答
9

Nick 明确指出,您不应该让组变得超出必要的规模,编写可扩展应用程序的最佳实践有一些讨论原因。

需要事务时使用实体组。在您给出的示例中,员工的ReferenceProperty将获得类似的结果。

除了事务之外,实体组也很有帮助,因为键提取和查询可以从父实体中分离出来。但是,您可能需要为这些类型的用例考虑多租户。

最终,大型实体组可能会损害可伸缩性,实体组中的实体存储在同一个平板电脑中。你塞进一个实体组的东西越多,你就越能减少并行完成的工作量——它需要串行完成。

于 2010-12-01T17:10:34.920 回答