澄清:我可以通过组成祖先密钥将所有用户的数据放在一个实体组中吗?

时间:2010-10-08 14:07:27

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

我想在单个事务中对用户的数据执行多项操作,但不需要在单个事务中更新多个用户的数据。我从http://code.google.com/appengine/docs/python/datastore/keysandentitygroups.html#Entity_Groups_Ancestors_and_Paths看到“对于实体组来说,一个好的经验法则是[实体组]的大小应该是单个用户的数据或更小的数据,”所以我认为正确的选择是使用构建与用户相关的其他实体的密钥时的单父密钥。

  1. 这看起来是个好主意吗?
  2. 代码是否容易?像KeyBuilder.setParent(theKeyOfMyUserEntity)?
  3. 之类的东西

2 个答案:

答案 0 :(得分:3)

1)如果没有关于数据的一些额外细节,很难评论。实体组应该注意几件事情;最大的是该组将存储在一起。这意味着如果您尝试执行许多(单独)更新,您可能会面临争用,从而限制应用程序的性能。

2)是的,编码很容易。 syntax非常接近您发布的内容。

还有其他交易选项。查看Nick Johnson的article分布式交易。如果您想要聚合的交易,您还应该查看Brett Slatkin关于high-throughput data pipelines的IO谈话。

答案 1 :(得分:2)

  1. 是的,将一些用户数据存储为用户实体的子实体似乎是合理的。

  2. 为什么需要手动创建密钥? db.Model()构造函数已经有一个方便的“父”参数,它将自动将父实体和子实体放在同一个实体组中。