【问题标题】:Entity group in transaction (contention)事务中的实体组(争用)
【发布时间】:2016-09-09 06:16:46
【问题描述】:

我正在读一本关于 GAE 的书。在关于交易的一章中,它说:

更新组中的实体可能会取消另一个进程对组中任何其他实体的更新。您应该设计您的数据模型,以便实体组不需要被许多用户同时更新。

如果同时更新的数量 单个组随着您的应用程序获得更多用户而增长。在这种情况下, 您通常希望将负载分散到多个实体组中,并且 作为用户群自动增加实体组的数量 成长。像这样的数据资源的可扩展划分称为 分片。

实体组的一个常用示例是留言板,其中留言板是属于该留言板的消息的祖先。

但是,如果更新消息(即对其进行编辑)会引起争用,并且随着用户群的增长而更频繁地导致争用,那么以董事会为祖先创建大量消息不是一个糟糕的设计吗?实体组的写入速率限制为每秒 1 次。这是否意味着看板中的任何消息每秒最多更新一次?

此外,仅将实体添加到组(即发布新消息)是否也算作“更新”并引起争用?

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

    是的,这样的设计可能会被认为是一种糟糕的设计,因为它不能很好地适应用户数量。我看不出哪些消息需要董事会作为祖先的充分理由。

    是的,在组中创建新实体算作一次实体组更新,所有更新都可能导致争用。

    附注:您可能会发现此说明很有用:https://stackoverflow.com/a/39309022/4495081(但对于有充分理由使用多实体组的设计)。

    【讨论】:

      猜你喜欢
      • 2012-06-03
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多