9

पहले, यहाँ है Pymongo DocumentationMongoDB में पढ़ने के लिए अपने-खुद-लिखते स्थिरता

डिफ़ॉल्ट रूप से में क्या कहा जाता है, PyMongo प्रत्येक थ्रेड के लिए एक अनुरोध शुरू होता है। यह की गारंटी देता है ** आपके-लिखने की स्थिरता पढ़ें। एक अनुरोध के भीतर, धागा विशेष रूप से एक ही सॉकेट का उपयोग जारी रखेगा, और कोई अन्य थ्रेड इस सॉकेट का उपयोग नहीं करेगा, जब तक थ्रेड end_request() को कॉल नहीं करता है या यह समाप्त हो जाता है। उस बिंदु पर, सॉकेट को अन्य धागे द्वारा उपयोग के लिए कनेक्शन पूल में वापस कर दिया जाता है।

तो मोंगोब (जैसे असिनकॉन्गो, मोटर) के लिए एसिंक लाइब्रेरी का उपयोग करते समय, उपयोगकर्ता को कॉल अवरुद्ध करने या अंतिम स्थिरता में एक की तरह स्थिरता होगी?

उत्तर

6

इस प्रश्न के बारे में कुछ बिंदु हैं।

  1. आप पढ़ने के लिए के बाद से लिखने जब तक आप उपयोग कर रहे हैं स्थिरता की है, इसकी गारंटी नहीं कर रहे हैं या तो "safe=true", "w=1" (या अधिक) या अपने लिखने के साथ "j=true"। आप इन्हें सम्मिलित करें() या update() कमांड के हिस्से के रूप में शामिल कर सकते हैं, या अन्यथा कनेक्शन, डेटाबेस या संग्रह के लिए इन विकल्पों को सेट करने के लिए set_lasterror_options() का उपयोग करें।

  2. यदि आप माध्यमिक नोड्स से पढ़ते हैं, (उदाहरण के लिए प्राथमिक के अलावा एक रीडप्रिएंशन), ​​तो आपको पठन-बाद-लिखने वाले अर्थशास्त्र नहीं मिलेगा, लेकिन केवल अंतिम स्थिरता होगी।

  3. यदि आप प्राइमरी के रीडपेरेंस का उपयोग कर रहे हैं और आप उपयुक्त लेस्टरर विकल्प सेट कर रहे हैं, तो आपको उसी सॉकेट का उपयोग करने वाले सभी परिचालनों पर रीड-आफ-राइट सेमेन्टिक्स प्राप्त करने की गारंटी है, यानी धागा।

  4. यदि आप एकाधिक धागे का उपयोग कर रहे हैं, और आप माध्यमिक नोड्स से नहीं पढ़ रहे हैं, तो जब तक आप लिखने के बाद दूसरे धागे में पढ़ना जारी करते हैं, तब तक आपको पढ़ने के बाद पढ़ने की स्थिरता प्राप्त करने की गारंटी दी जाती है पहले धागे में। आप इसे आश्वस्त करने के लिए मानक थ्रेड सिंक्रनाइज़ेशन प्राइमेटिव का उपयोग कर सकते हैं।

+0

मुझे लगता है कि यह है कि आप सभी संभावनाओं दे: डी बवंडर के साथ MongoDB का उपयोग कर रहा है और तूफान में यह एक घटना पाश है, तो यह एक मुश्किल तरीके से धागे, तो asynch पुस्तकालयों के बारे में क्या (है कि न प्रयोग धागे) –

+1

प्राप्त करने के लिए है उम्म ... यह आपके द्वारा उपयोग की जा रही एसिंच लाइब्रेरी पर निर्भर करता है। वही नियम लागू होते हैं: GetLastError() कमांड सफलतापूर्वक लौटने के बाद आप जो भी लिखते हैं उसे पढ़ने की गारंटी दी जाती है। एक बार जब आप getLastError() से सफल वापसी प्राप्त कर लेते हैं, तो कोई भी थ्रेड जो एक खोज() शुरू करता है, लिखित डेटा देखेंगे। धागे के बीच सिंक्रनाइज़ेशन पाठक के लिए एक अभ्यास के रूप में छोड़ दिया जाता है। –

+0

मुझे लगता है कि यह सामान्य तरीका है क्योंकि यह सामान्य रूप से बात कर रहा है, इसलिए मुझे यह देखने के लिए कि मोटर या असिनमोंगो कैसे काम करता है: डी आपको फिर से धन्यवाद –

3

मैं मोटर का लेखक हूं और मुझे भी AsyncMongo के बारे में कुछ पता है।

http://emptysquare.net/motor/pymongo/api/motor/differences.html#acknowledged-writes

लघु जवाब: जो कुछ भी कोड आप एक कॉलबैक में निष्पादित डालने के लिए(), अद्यतन(), आदि, अगर उन प्रविष्ट करता है या अपडेट कर रहे हैं सुरक्षित, देखेंगे यहाँ सुरक्षित राईट के बारे में मोटर के दस्तावेज़ है के बाद मोंगो डीबी में डेटा लागू किया गया है। आपके द्वारा इस तरह के कॉलबैक में निष्पादित कोई भी कोड मोंगोडीबी ने परिवर्तन लागू करने से पहले या उसके बाद चलाया जा सकता है।

+0

धन्यवाद: डी वैसे, मोटर सभी अतुल्यकालिक तरीकों का उपयोग करने के अलावा सभी पिमोंगो प्रश्नों का उपयोग करेगा? –

+1

सही, यह इरादा है। =) –

+0

और मुझे इस इरादे से प्यार है;) –

संबंधित मुद्दे