簡體   English   中英

MongoDB - 集合的悲觀鎖定

[英]MongoDB - Pessimistic Locking of a 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 不是隊列,也沒有在服務器中實現隊列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM