我的应用程序有一个类似于在 Facebook 中发送好友请求的场景。
当用户 A 向用户 B 发送好友请求时,内部会创建一个新的好友请求文档。稍后当用户B也想向A发送好友请求时,系统会发现已经存在好友请求文档,因此他们应该是彼此的好友,不会创建新的好友请求文档。
我试图弄清楚当用户 A 和用户 B 同时向对方发送好友请求时的情况,这将创建 2 个好友请求文档并导致不确定的行为......
感谢您的建议..非常感谢!
编辑: 一些人建议使用请求队列来解决这个问题;然而, 我对使用队列感到困惑,因为我认为它会让我的其余 api 端点按顺序处理请求。使用队列不会失去多线程的所有好处吗?我不禁想象,如果我的服务因为这个问题而有数百万个请求排队等待一一执行,那该多糟糕。有没有人在生产中看到过类似的问题?
最佳答案
我的客户端也有类似的情况,它在数据库中有并发写入,我实现的是队列服务。
Create a request in the queue rather than writing in the database, a separate reader will
read one message from the queue at a time and check if it is valid to write it to
database, write only if there is no previous request.
您可以实现自己的队列,也可以使用 AWS-SQS、rabbitmq、MSMQ 等服务。
关于MongoDB 并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34348231/