Google应用引擎实体组

Joe*_*oel 10 google-app-engine

据我所知,从应用引擎教程中,实体组仅用于交易目的:

"仅在事务需要时使用实体组"(来自教程)

存在于同一实体组中的定义是具有相同的根.在这种情况下,具有多于1个层次结构级别的用途是什么?也就是说,为什么我应该使用"A - > B - > C"(A是根,B是他的儿子,C是他的孙子)而不是"A - > B; A - > C"?(A,B和C仍然在同一个实体组中,因为A是它们的根).

如果实体组的唯一目的是使实体之间的事务成为可能,为什么我应该使用多于1个层次结构级别(我从Root获得什么 - >孙子链接)?

Jam*_*ley 17

当您进行查询时,可以使用ancestor()将查询限制为特定实体的子项 - 在您的示例中,您可以只查找后代B,如果它们都在顶层,则无法执行.

Google App Engine编程中的 Ancestor Queries还有更多内容

键和实体组文档也说:

实体组关系告诉App Engine将多个实体存储在分布式网络的同一部分中...组中的所有实体都存储在同一数据存储节点中

编辑:同一文档还列出了您不希望实体组变得过大的一些原因:

应用程序拥有的实体组越多 - 也就是说,根实体越多 - 数据存储区可以更有效地跨数据存储区节点分布实体组.更好的分发可以提高创建和更新数据的性能.此外,尝试同时更新同一实体组中的实体的多个用户将导致某些用户重试其事务,可能导致某些用户无法提交更改.不要将所有应用程序的实体放在一个根目录下.

组中实体的任何事务都将导致对同一实体组的任何其他写入失败.如果您有一个包含大量写入的大型实体组,则会导致大量争用,然后您的应用程序必须处理预期的写入失败.避免数据存储争用会详细介绍可用于最小化争用的策略.

  • 没错,这有点误导.我认为重点是在使用实体组之前要真正思考,不要只是认为这是一种很好的逻辑分组方式.有一些非交易性的好处,例如性能.Brett Slatkin在此处使用实体组提出了他称为"关系索引实体"的内容:http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html (3认同)