首页 > 解决方案 > Firestore 避免对同一个文档的两个请求

问题描述

我正在开发一个响应彩票的应用程序。大约有 10k 票通知文件。他们有字段 isAvailabe:true。它的工作原理是,当用户请求票时。我运行查询 where(isAvailable==true) 并将限制设置为 1。因此给用户一张票,然后更新 isAvailable:false。我的问题是当 100 名用户同时请求票时会发生什么,这将导致冲突。我想过使用事务来解决这个问题,但我仍然不确定。我应该采取什么方法?有更好的选择吗?

标签: javascriptfirebasegoogle-cloud-firestoretransactions

解决方案


每当您需要根据文档的当前值向文档写入内容,并且有可能多个用户同时执行冲突更新时,您将需要使用事务

在事务中,您可以组合读取和写入操作,服务器将确保只有在您读取数据后没有人修改数据时才提交写入。如果有人在您的代码运行事务时修改了数据,它将自动重试。

这正是您在此处遇到的情况,因此正如您已经预料到的那样,您确实应该使用事务。

如果您在实现此功能时遇到问题,我建议您使用最少的、完整/独立的代码发布一个新问题,我们任何人都可以运行该代码来重现您遇到的问题。


推荐阅读