MongoDB - Collection的悲观锁定



我将非常感谢你的时间和创造性的投入,也许在一些我一直想弄清楚的事情上给我一个大致的方向。

我打算允许用户按顺序操作集合。这是一个基于股票市场的应用程序,所以我决定以这种方式进行操作是至关重要的。当用户在股票上下某种订单时,我需要它逐个执行订单,单个订单相当于股票集合中的单个文档。在前一个订单完成后,订单队列将可用于更多订单。我已经尝试实现一些手动锁定方法,但我仍然遇到订单执行的订单不是订单队列中的下一个订单的问题。

var stringType = "locked";
var checkIt = await stocksLS.collection(data[5]).findOneAndUpdate({"editor": {$exists:false}},
{$set: {editor: [stringType]}},
{
sort:{"Price":1,"TS":1}
}
);

在这段代码中,data[5]只是股票的股票代码,然后我对下一个最佳订单(按最低价格和最早时间戳排序)抛出一个锁,以确保该订单仅由一个用户执行。然而,如果多个用户同时执行一个订单,它显然只是开始执行离下一个最佳订单越来越远的未来订单,这不是有意的(因为它们仍然没有根据此代码锁定)。

我的最佳解决方案是在执行订单时对所有文档加一个锁,然后让传入的订单尝试将订单队列集合反复排队,直到它附加一个锁。

可能有一个更好的解决方案,但这是我能想到的最好的解决方案,所以我将感谢您对此事的投入,以获得更好的想法和解决方案的指导。非常感谢。

如果你想使用队列,那就使用队列。一个真实的。用你选择的语言(JS)找到一个队列库。

你可以尝试实现一个队列,但与其使用一个已经存在的、经过调试的队列来对抗所有不可避免地出现的错误,不如使用一个已经存在的队列。

MongoDB不是队列,也没有在服务器端实现队列。

最新更新