जैसा कि आप उल्लेख करते हैं कि वर्तमान में आप जो चाहते हैं उसे करने का कोई साफ तरीका नहीं है। इस समय आपके जैसे संचालन के लिए सबसे अच्छा तरीका यह है:
- पाठक उपयुक्त सीमा और छँटाई के साथ X दस्तावेज़ों का चयन करता है
- रीडर 1 द्वारा लौटाए गए दस्तावेज़ों को अपनी विशिष्ट रीडर आईडी के साथ चिह्नित करता है (
e.g. update({_id:{$in:[<result set ids>]}, state:"available", $isolated:1}, {$set:{readerId:<your reader's ID>, state:"processing"}}, false, true)
) - रीडर प्रसंस्करण के रूप में चिह्नित सभी दस्तावेजों का चयन करता है और इसकी अपनी रीडर आईडी है। इस बिंदु पर यह गारंटी है कि आपके पास परिणामी दस्तावेजों के सेट तक विशेष पहुंच है। अपनी प्रोसेसिंग के लिए
- 3 से परिणाम सेट करें।
ध्यान दें कि यह अत्यधिक समवर्ती स्थितियों में भी काम करता है क्योंकि एक पाठक कभी भी किसी अन्य पाठक द्वारा आरक्षित नहीं किए गए दस्तावेज़ों को आरक्षित नहीं कर सकता है (ध्यान दें कि चरण 2 केवल वर्तमान में उपलब्ध दस्तावेज़ों को आरक्षित कर सकता है, और लेखन परमाणु हैं)। यदि आप आरक्षण का समय समाप्त करने में सक्षम होना चाहते हैं तो मैं आरक्षण समय के साथ एक टाइमस्टैम्प भी जोड़ूंगा (उदाहरण के लिए उन परिदृश्यों के लिए जहां पाठक दुर्घटनाग्रस्त/असफल हो सकते हैं)।
संपादित करें:अधिक विवरण:
यदि लेखन में अपेक्षाकृत लंबा समय लगता है, तो सभी लेखन कार्य कभी-कभी लंबित संचालन के लिए उत्पन्न हो सकते हैं। इसका मतलब यह है कि चरण 2) चरण 1 द्वारा चिह्नित सभी दस्तावेज़ नहीं देख सकते हैं, जब तक कि आप निम्नलिखित कदम नहीं उठाते:
- उपयुक्त "w" (चिंता लिखें) मान का उपयोग करें, जिसका अर्थ 1 या उच्चतर है। यह सुनिश्चित करेगा कि जिस कनेक्शन पर राइट ऑपरेशन किया गया है, वह इसके पूरा होने की प्रतीक्षा करेगा, चाहे वह कुछ भी हो।
- सुनिश्चित करें कि आप चरण 2 में एक ही कनेक्शन पर पढ़ते हैं (केवल स्लेवओके सक्षम रीड के साथ प्रतिकृतियों के लिए प्रासंगिक) या थ्रेड ताकि वे अनुक्रमिक होने की गारंटी दे सकें। पूर्व को अधिकांश ड्राइवरों में "requestStart" और "requestDone" विधियों या समान (जावा प्रलेखन यहां
).
- अपने बहु-अपडेट में $isalated ध्वज जोड़ें ताकि यह सुनिश्चित हो सके कि इसे अन्य लेखन कार्यों के साथ इंटरलीव नहीं किया जा सकता है।
परमाणुता/अलगाव के संबंध में चर्चा के लिए टिप्पणियाँ भी देखें। मैंने गलत तरीके से मान लिया था कि बहु-अपडेट अलग-थलग थे। वे डिफ़ॉल्ट रूप से नहीं हैं, या कम से कम नहीं हैं।