javascript - Firestore 避免对同一个文档的两个请求
问题描述
我正在开发一个响应彩票的应用程序。大约有 10k 票通知文件。他们有字段 isAvailabe:true。它的工作原理是,当用户请求票时。我运行查询 where(isAvailable==true) 并将限制设置为 1。因此给用户一张票,然后更新 isAvailable:false。我的问题是当 100 名用户同时请求票时会发生什么,这将导致冲突。我想过使用事务来解决这个问题,但我仍然不确定。我应该采取什么方法?有更好的选择吗?
解决方案
每当您需要根据文档的当前值向文档写入内容,并且有可能多个用户同时执行冲突更新时,您将需要使用事务。
在事务中,您可以组合读取和写入操作,服务器将确保只有在您读取数据后没有人修改数据时才提交写入。如果有人在您的代码运行事务时修改了数据,它将自动重试。
这正是您在此处遇到的情况,因此正如您已经预料到的那样,您确实应该使用事务。
如果您在实现此功能时遇到问题,我建议您使用最少的、完整/独立的代码发布一个新问题,我们任何人都可以运行该代码来重现您遇到的问题。
推荐阅读
- laravel-nova - Laravel Nova 在产品创建/更新页面上按模式添加类别
- kubernetes - 如何在 helm 中将变量从父级传递给子级?
- mysql - 如何获取`where in statement`中提供的非现有值作为mysql中自定义提供的值?
- python - 使用xpath从scrapy shell获取空响应,而它在元素检查器中工作
- shell - 获取与 awk 中的单词匹配的列
- jquery - 选项卡和独立滚动位置
- html - HTML图像中属性和替代之间的区别
- node.js - 在更新期间省略集合中具有 null 的元素
- protractor - 使用 https 协议连接到本地服务器时量角器握手失败
- internet-explorer-11 - 将 SPFx Webpart 与 IE11、SharePoint 2016 和 Pannellum 一起使用