【问题标题】:Maximum write rate to a document on FirestoreFirestore 上文档的最大写入速率
【发布时间】:2019-02-15 22:12:23
【问题描述】:

我正在使用 Firestore 实时计算每个用户在一件商品的成本中所占的份额。示例:

/tickets/100/ticket-item/1:
{
  name: 'Red Dead Redemption'
  price: '5000'
  payers (array of maps): [
    {
      name: 'John', 
      share: '1666'
    },
    {
      name: 'Jane', 
      share: '1667'
    },
    {
      name: 'Jack', 
      share: '1667'
    }
  ]
}

鉴于文档的最大写入速率为 1/秒,如果两个用户同时将自己添加到同一个工单项目文档,写入是否总是失败?

我知道可以通过使用事务在一定程度上缓解这种情况,但事务只会重新执行有限的次数。假设它最多重新执行 5 次。如果 6 个用户同时写入同一个票据项目文档,我可以预期其中一个写入失败吗?

我将不胜感激有关如何处理此问题的任何和所有建议。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    如果两个用户同时将自己添加到同一个工单项目文档中,写入是否总是失败?

    是的,它会的。因此,如果您确定您会遇到两个甚至更多用户会尝试在同一时间在单个文档中写入/更新数据的情况,我建议您注意此限制,因为您可能会开始看到一些的写入操作失败。

    我知道这可以通过使用事务在一定程度上得到缓解

    这是个好主意,但请注意,当客户端离线时,事务将失败。

    如果 6 位用户同时写入同一个工单项目文档,我可以预期其中一个写入失败吗?

    正如文档所述,交易只会重新执行有限的次数。但也请注意,如果是transaction failure

    失败的事务返回错误并且不会向数据库写入任何内容。

    所以你所要做的就是在交易失败的情况下采取一些措施。

    【讨论】:

    • 谢谢亚历克斯。我记得阅读有关事务重试次数的文档,但似乎再也找不到了。你知道它是否真的是 5 并且它是可配置的(如果这很重要,我正在使用 angularfire2)?
    • 我不记得它是否实际上是特定的重试次数,据我所知您无法配置它。但是一旦交易失败,您可以重新启动整个过程。
    【解决方案2】:

    我正在研究同样的问题。 可能就像一个解决方案:将“付款人”移动到带有ticket_id字段的单独集合中? 所以你不会有任何限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 2019-10-19
      • 2022-01-25
      相关资源
      最近更新 更多