我正在使用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位用户在同一时间写入同一票证项目文档,我可以期望其中之一写入失败吗?
对于如何处理此问题,我将不胜感激。
答案 0 :(得分:1)
如果两个用户在同一时间将自己添加到同一故障单文档中,写入将总是失败吗?
是的。因此,如果您确定会有两个或更多用户试图在同一时间在单个文档中写入/更新数据的情况,那么我建议您注意这一限制,因为您可能会开始看到一些限制。写入操作失败。
我知道可以通过使用交易在一定程度上缓解这种情况
这是个好主意,但请注意,当客户端离线时,交易将失败。
如果6个用户在同一时间写入同一票证项目文档,我可以预期其中之一会失败吗?
如文档所述,事务将仅重新执行有限次数。但也请注意,如果使用transaction failure:
失败的事务将返回错误,并且不向数据库写入任何内容。
因此,您所要做的就是采取一些措施,以防万一交易失败。
答案 1 :(得分:0)
我正在研究相同的问题。 可能就像一个解决方案:将带“ ticket_id”字段的“付款人”移到单独的集合中? 因此,您将没有任何限制。