跟进my earlier question regarding GAE Datastore entity hierarchies,我仍然对何时使用 实体组 感到困惑。
举个简单的例子:
Company
都有一个或多个Employee
个实体Employee
无法移至另一个Company
,处理一个Company
的用户永远无法看到另一个Employee
的{{1}} 这看起来像我可以Company
Employee
的 子实体 ,但实际后果是什么?这是否会提高可扩展性,损害可扩展性或没有影响?
使用或不使用实体层次结构的其他优点/缺点是什么?
( 实体组 启用交易,但假设此示例我不需要交易。)
答案 0 :(得分:9)
如果您不需要交易,请不要使用实体组。在某些情况下,它们会降低速度,并且永远不会加快速度。他们唯一的好处是他们能够进行交易。
据我所知,使用实体组的最佳位置是许多用户不可能同时访问的数据,并且您经常希望包含在事务中。因此,如果您存储购物车的内容(可能只有该购物车的所有者经常处理),那么这些内容可能对实体组有利 - 能够对该数据使用交易会很好当您添加或更新实体时,如果您这样做,则不会将其他任何人锁定。
答案 1 :(得分:8)
尼克明确表示你不应该让这些小组变得更大,Best practices for writing scalable applications会讨论一些原因。
需要交易时使用实体组。在您给出的示例中,员工ReferenceProperty将获得类似的结果。
除了事务之外,实体组可以提供帮助,因为可以从父实体键入密钥提取和查询。但是,对于这些类型的用例,您可能需要考虑multitenancy。
最终,大型实体组可能会损害可扩展性,实体组中的实体会存储在同一平板电脑中。你塞进一个实体组的东西越多,你减少的工作量就越少 - 它需要连续完成。