【发布时间】:2021-03-04 22:07:33
【问题描述】:
非常感谢您的时间和创造性的投入,也许可以指导我在我一直试图弄清楚的事情上大体方向。
我打算允许用户按订单操作集合。这是一个基于股票市场的应用程序,因此我认为以这种方式进行操作至关重要。当用户对股票下某种订单时,我需要它按订单执行,单个订单相当于股票集合中的一个文档。在前一个订单完成后,订单队列将可用于更多订单。我尝试实现一些手动锁定方法,但我仍然遇到订单执行的问题不是订单队列中的下一个订单。
var stringType = "locked";
var checkIt = await stocksLS.collection(data[5]).findOneAndUpdate({"editor": {$exists:false}},
{$set: {editor: [stringType]}},
{
sort:{"Price":1,"TS":1}
}
);
在这段 sn-p 代码中,data[5] 只是股票的股票代码,然后我锁定下一个最佳订单(按最低价格和最早时间戳排序)以确保订单在仅由一个用户。但是,如果多个用户同时执行一个订单,它显然只是开始执行未来的订单,这些订单离下一个最好的订单越来越远,这不是预期的(因为它们仍然没有根据这段代码锁定)。
我最好的解决方案是在订单执行时对所有文档加锁,然后让传入的订单尝试重复对订单队列集合进行排队,直到它附加锁为止。
可能有一个更好的解决方案来解决这一切,但这是我想出的最好的解决方案,因此我希望您能就此事提供意见,以获得更好的想法和解决方案的指导。非常感谢。
【问题讨论】:
标签: javascript database mongodb performance locking