在Google App Engine上组织实体组以进行编写

Jam*_*man 6 google-app-engine nosql google-cloud-datastore

我对Google App Engine高复制数据存储区(HRD)上的"实体组"感到有些困惑.Google文档提到HRD每个实体组只允许每秒写入1次.

这到底是什么意思?这是每个用户请求写1个还是每个实体写1个(我假设它与"表"的概念类似).

例如,如果我有一个"用户"实体和一个"发布"表.如果"Post"是"User"的祖先:

  1. 这是否意味着一个 "用户"可以每秒创建一个 "发布"
  2. ...或者它是否意味着对"Post"实体的所有写入都被限制为每秒写入1次而不管用户是什么?(即,无论提交帖子的用户数是多少,系统一次只能保存1个帖子)
  3. ...或者是否意味着单个"用户"实体不能同时创建超过1个"发布"(即使数千个其他用户创建"发布"实体)?

我有什么选择来缓解这个问题?同时制作"用户"和"发布"根实体是否合理?这是否允许我在1次写入限制之外创建多个"Post"实例?如果说1000个用户同时创建"发布"条目,我想避免任何潜在的问题.

Ril*_*ark 8

"实体组"是不是像"表".在appengine数据存储区中没有任何意味着"表".您应该只考虑实体和索引.

当您希望能够以事务方式执行操作时,您只能使用实体组.对于带有"帖子"的博客,如果您以事务方式添加或删除帖子可能无关紧要,因此它们不需要位于实体组中.

我的应用程序中有大约15种不同的实体,大约1.5M.每一个都是一个根实体,甚至是相关实体,我认为这是AppEngine的理想选择.据我所知,实体组的唯一目的是支持多个实体的原子操作 - 它们不是组织工具.

PS:关于你对实体组限制的问题(我认为现在对你来说基本上没有意义):写入限制是每个实体,而不是每个请求.1.实体不会创建其他实体.2.如果所有帖子都在同一个实体组中,那么是的,你每秒只能节省1个.3.如果每个用户都在自己的实体组中,您可以同时在每个相同的组中写一个帖子,每次多次,如您所愿.只是没有一个组可以每秒写一次以上.是的,我认为"用户"和"发布"都应该是根实体.

  • 别客气!我没有外部数据存储的经验.很难想象任何外部商店的延迟都不会超过他们可能拥有的任何其他性能优势.虽然我可以想象特色优势...... (2认同)
  • 只是澄清一下,限制是针对实体组的不同写入 - 但您可以通过一次调用在组内编写多个实体.请参阅[Google IO talk](http://www.google.com/events/io/2011/sessions/more-9s-please-under-the-covers-of-the-high-replication-datastore.html) . (2认同)