我对Google App Engine高复制数据存储区(HRD)上的“实体组”感到有些困惑。 Google文档提到HRD每个实体组只允许每秒写入1次。
这究竟是什么意思?这是每个用户请求写1个还是每个实体写1个(我假设它与“表”的概念类似)。
例如,如果我有“用户”实体和“发布”表。如果“Post”是“User”的祖先:
我可以选择哪种方法来缓解这种情况?同时制作“用户”和“发布”根实体是否合理?这是否允许我在1次写入限制之外创建多个“Post”实例?如果1000名用户同时创建“发布”条目,我想避免任何潜在的问题。
答案 0 :(得分:8)
“实体组”不,如“表格”。在appengine数据存储区中没有任何意味着“表”。你应该只考虑实体和索引。
如果您希望能够以事务方式执行操作,则只能使用实体组。对于带有“帖子”的博客,如果您以交易方式添加或删除帖子可能无关紧要,因此他们不需要在实体组中。
我的应用程序中有大约15种不同的实体,其中大约有1.5M。每一个都是一个根实体,甚至是相关实体,我认为这是AppEngine的理想选择。据我所知,实体组的唯一目的是支持多个实体的原子操作 - 它们不是组织工具。
PS:关于您对实体组限制的问题(我认为现在对您来说基本上没有意义):写入限制是每个实体,而不是每个请求。 1.实体不会创建其他实体。 2.如果所有帖子都在同一个实体组中,那么是的,你每秒只能节省1个。 3.如果每个用户都在自己的实体组中,您可以同时在每个相同的组中写一个帖子,每次多次,如您所愿。只是没有一个组可以每秒写一次以上。是的,我认为“用户”和“发布”都应该是根实体。
答案 1 :(得分:1)
使用实体组还可以使组内的数据高度一致。
例如,如果没有实体组,如果您创建帖子然后快速导航到最近的帖子列表,您可能不会立即看到新帖子。对于博客来说,这可能不是问题。
但是,如果您正在执行任务管理系统...您转到任务详细信息屏幕,关闭任务并导航您返回任务列表,该任务可能仍会显示为已打开。这是不可接受的。在这里,您需要实体组或其他方法来使您的任务列表与当前用户保持一致。
在某些数据模型中,可以轻松创建实体组。例如,假设您只能显示单个组的任务,那么将任务作为项目组的一部分可以解决问题。如果您的UI允许列出来自多个组的任务,则很难找到有效的模型。