【问题标题】:MongoDB - Pessimistic Locking of a CollectionMongoDB - 集合的悲观锁定
【发布时间】: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


    【解决方案1】:

    如果要使用队列,请使用队列。一个真实的。使用您选择的语言 (JS) 查找队列库。

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 2010-09-12
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多