मैं कई समवर्ती प्रक्रियाओं में MongoDB में FindAndModify का उपयोग कर रहा हूं। संग्रह का आकार लगभग 3 मिलियन प्रविष्टियां है और जब तक मैं एक सॉर्टिंग विकल्प (अनुक्रमित फ़ील्ड द्वारा) पास नहीं करता तब तक सब कुछ विस्फोट की तरह काम करता है। एक बार मैं ऐसा करने के लिए प्रयास करें, निम्न चेतावनी लॉग के लिए पैदा की है:MongoDB FindAndModify सॉर्टिंग
warning: ClientCursor::yield can't unlock b/c of recursive lock ns: test_db.wengine_queue top:
{
opid: 424210,
active: true,
lockType: "write",
waitingForLock: false,
secs_running: 0,
op: "query",
ns: "test_db",
query: {
findAndModify: "wengine_queue",
query: {
locked: { $ne: 1 },
rule_completed: { $in: [ "", "0", null ] },
execute_at: { $lt: 1324381363 },
company_id: 23,
debug: 0,
system_id: "AK/AK1201"
},
update: {
$set: { locked: 1 }
},
sort: {
execute_at: -1
}
},
client: "127.0.0.1:60873",
desc: "conn",
threadId: "0x1541bb000",
connectionId: 1147,
numYields: 0
}
मैं क्वेरी अनुक्रमित से सभी चाबियाँ है, यहाँ वे हैं:
PRIMARY> db.wengine_queue.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"system_id" : 1,
"company_id" : 1,
"locked" : 1,
"rule_completed" : 1,
"execute_at" : -1,
"debug" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "system_id_1_company_id_1_locked_1_rule_completed_1_execute_at_-1_debug_1"
},
{
"v" : 1,
"key" : {
"debug" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "debug_1"
},
{
"v" : 1,
"key" : {
"system_id" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "system_id_1"
},
{
"v" : 1,
"key" : {
"company_id" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "company_id_1"
},
{
"v" : 1,
"key" : {
"locked" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "locked_1"
},
{
"v" : 1,
"key" : {
"rule_completed" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "rule_completed_1"
},
{
"v" : 1,
"key" : {
"execute_at" : -1
},
"ns" : "test_db.wengine_queue",
"name" : "execute_at_-1"
},
{
"v" : 1,
"key" : {
"thread_id" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "thread_id_1"
},
{
"v" : 1,
"key" : {
"rule_id" : 1
},
"ns" : "test_db.wengine_queue",
"name" : "rule_id_1"
}
]
वहाँ के आसपास कोई तरीका है इस?
यह केवल एक चेतावनी है जो कहता है कि अद्यतन उपज नहीं कर सकता है। क्या वास्तव में कुछ भी काम करना बंद कर देता है या क्या आप चेतावनी के बारे में चिंतित हैं? मोंगो डीबी/10gen के बारे में कुछ अलग राय है कि लॉग इन चेतावनी क्या होनी चाहिए और क्यों नहीं होना चाहिए ताकि आप चेतावनी के रूप में लॉग इन होने वाली कुछ चीजों के साथ समाप्त हो जाएं, शायद –
नहीं, सबकुछ ठीक काम करता है। मैं चेतावनी के बारे में चिंतित हूं और इसके प्रभावों के बारे में चिंतन है जब मेरा सेटअप उत्पादन (लगभग 50 मिलीलीटर दस्तावेज) – clops
पर अपेक्षाकृत निर्दोष है। मैं एक उत्तर पोस्ट करूंगा –