【问题标题】:Limit of 1 write per sec per a Single Entity Group?每个单个实体组每秒写入 1 次的限制?
【发布时间】:2017-12-22 11:32:47
【问题描述】:

我已经对此进行了足够的搜索,但还没有找到答案。所以我问。

根据Google cloud datastore doc

写入吞吐量限制约为每秒一个事务 在单个实体组内。

现在假设我有一个实体用户和另一个实体汽车。他们有共同的父母。所以 User+Car+Their_Parent 是一个实体组。对吧?

假设在数据存储区中,用户和汽车各有一百万个实例/行。

如果我触发事务查询以更新数据存储中的实例/行。

我的困惑是有多少实体组实例因应用 Google DataStore 的写入限制而被锁定?

A.用户 + 汽车(总共有 2000 万个实例)

B.只有 1 个用户 + 汽车实例? (1 个用户行和 1 个汽车行)

在数据库用语中,用户是一个实体种类/表。整个也是如此 表/种类因 1 个写入操作或仅一个实例/行而被锁定 1 次写操作被锁定?

如果 A 是这种情况,这是否意味着对于 1 次写入,所有 2000 万行 User+Car 实体都将被锁定?太疯狂了。如果我必须更新所有 2000 万行怎么办。如果写入操作仅更新 1 行,那么 2000 万行是否需要 2000 万秒才能避免任何争用?

【问题讨论】:

  • 好吧,由您来选择对您的应用有意义的实体祖先结构。此外 - 一些批处理是可能的,请参阅stackoverflow.com/questions/38277246/…
  • @DanCornilescu 我了解丹。我只想知道有多少实例被锁定。我已经编辑了我的问题。所有 2000 万个实体实例都被锁定以进行 1 次写入操作,或者只有一个实例被锁定以进行更新。
  • 整个组被“锁定”。你必须问自己的问题——这样的血统真的,真的需要吗?还是只是非常方便?一开始我也有点惊讶,但在稍微调整了我的祖先结构并与数据争用作斗争后,我意识到这些“限制”(还有其他限制)确实是高度可扩展设计的驱动力......

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


【解决方案1】:

一个实体组是一组通过祖先连接到一个实体的实体。 共同的根元素。将数据组织成实体组可以 限制可以执行的事务:

请参阅“Python”文档here。很惊讶它不在您的 Java 文档链接中

【讨论】:

  • 我明白这一点。我只想知道有多少实例被锁定。我已经编辑了我的问题。所有 2000 万个实体实例都被锁定以进行 1 次写入操作,或者只有一个实例被锁定,该实例将被更新。
【解决方案2】:

终于在这里找到答案data store article

在上面的示例中,每个组织都可能需要更新组织中任何人的记录。考虑一个场景,其中“团队”中有 1,000 人,每个人每秒可能对任何属性进行一次更新。因此,实体组中每秒可能有多达 1,000 次更新,由于更新限制,这一结果将无法实现。这说明选择考虑性能要求的适当实体组设计非常重要。这是在最终一致性和强一致性之间找到最佳平衡的挑战之一。

【讨论】:

  • 或者,您可以批量更新 1000 次,如果更新可以延迟,则只进行一次更新
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 2020-06-14
相关资源
最近更新 更多