我想知道事务( https://firebase.google.com/docs/firestore/manage-data/transactions )是否是在票务系统之类的系统中使用的可行工具,在该系统中,用户可能会尝试读取/写入同一个集合/文档,并且首先发出请求的人将首先得到处理第二个将被处理第二个等等。
如果不是,对于 firestore 的这种需求来说,什么是一个好的结构?
最佳答案
事务只是保证事务中涉及的文档之间原子一致的更新。它不保证这些事务完成的顺序,因为事务处理程序可能会在出现争用时重试。
由于您用 google-cloud-functions 标记了这个问题(但在您的问题中没有提及),听起来您可能正在考虑编写一个数据库触发器来处理传入的写入。 Cloud Functions 触发器也不保证负载下的任何排序。
按照 Firestore 和其他 Google Cloud 产品运行的规模进行的任何类型的订购都是 really difficult problem to solve (请阅读该链接以了解这一点)。没有一个简单的数据库结构可以强加更改的顺序。我建议您仔细考虑一下您的订购需求,并提出不同的解决方案。
您可以获得的最好的顺序指示可能是通过向各个文档添加服务器时间戳,但您仍然需要弄清楚如何处理它们。最简单的事情可能是让后端定期查询集合,按时间戳排序,并按该顺序批量处理事物。
关于google-cloud-firestore - Firebase/Firestore 事务是否会创建内部队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57859663/