何时在GAE的数据存储区中使用实体组

时间:2010-12-01 07:06:57

标签: google-app-engine google-cloud-datastore entity-groups

跟进my earlier question regarding GAE Datastore entity hierarchies,我仍然对何时使用 实体组 感到困惑。

举个简单的例子:

  • 每个Company都有一个或多个Employee个实体
  • Employee无法移至另一个Company,处理一个Company的用户永远无法看到另一个Employee的{​​{1}}

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

实体组 启用交易,但假设此示例我不需要交易。)

2 个答案:

答案 0 :(得分:9)

如果您不需要交易,请不要使用实体组。在某些情况下,它们会降低速度,并且永远不会加快速度。他们唯一的好处是他们能够进行交易。

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

答案 1 :(得分:8)

尼克明确表示你不应该让这些小组变得更大,Best practices for writing scalable applications会讨论一些原因。

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

除了事务之外,实体组可以提供帮助,因为可以从父实体键入密钥提取和查询。但是,对于这些类型的用例,您可能需要考虑multitenancy

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