在Firestore上文档的最大写入率

时间:2019-02-15 22:12:24

标签: firebase google-cloud-firestore

我正在使用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位用户在同一时间写入同一票证项目文档,我可以期望其中之一写入失败吗?

对于如何处理此问题,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

  

如果两个用户在同一时间将自己添加到同一故障单文档中,写入将总是失败吗?

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

  

我知道可以通过使用交易在一定程度上缓解这种情况

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

  

如果6个用户在同一时间写入同一票证项目文档,我可以预期其中之一会失败吗?

如文档所述,事务将仅重新执行有限次数。但也请注意,如果使用transaction failure

  

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

因此,您所要做的就是采取一些措施,以防万一交易失败。

答案 1 :(得分:0)

我正在研究相同的问题。 可能就像一个解决方案:将带“ ticket_id”字段的“付款人”移到单独的集合中? 因此,您将没有任何限制。