ios - निरंतर प्रतिकृतियां एक-शॉट प्रतिकृति बनाम की लागत(टचडीबी और क्लाउडेंट का उपयोग करके)



nosql couchdb (1)

हमारे पास एक ऐसा ऐप है जो क्लाउडन्ट को रिमोट सर्वर के रूप में उपयोग करता है फिर भी, क्लाउडन्ट पिछले अनुभव से टचडीबी के निरंतर प्रतिकृति के साथ पूरी तरह से संगत नहीं है। इसलिए अब के लिए हमारा विकल्प एक फिक्स्ड फ़्रीक्वेंसी पर मैन्युअल रूप से एक शॉट की नकल ट्रिगर करना है। फिर भी, हम यह जानना चाहेंगे कि निरंतर प्रतिकृतियों की तुलना में उस दृष्टिकोण के लिए हमें अधिक पैसा खर्च करने जा रहे हैं, क्योंकि सतत प्रतिकृति लंबे समय तक उपयोग करते हैं और सर्वर को बार-बार पूछने की आवश्यकता नहीं होती है दूसरे शब्दों में, क्या एक शॉट ने बादलक के साथ प्रतिकृतियां खींचना लक्ष्य के रूप में हमें एक अनुरोध प्राप्त किया?

धन्यवाद, पॉल


मुझे लगता है कि आप जिस समस्या का उल्लेख करते हैं वह [1] है क्लाउगैंट की नकल CouchDB के साथ 100% संगत है। इस उदाहरण में, टचडीबी के लॉग्स से संकेत मिलता है कि आईओएस नेटवर्क स्टैक अधूरा जेएसओएन को टचडीबी पर पारित किया गया है। यह स्पष्ट नहीं है कि प्रतिकृति विफलता के लिए इस मामले में कौन दोषी था।

[1] https://github.com/couchbaselabs/TouchDB-iOS/issues/241

लागत प्रश्न के लिए, एक-शॉट पुल प्रतिकृति के परिणामस्वरूप प्रत्येक बार ऐसा होता है, जब भी दोहराने के लिए जरूरी अन्य अनुरोध होते हैं। यह _changes अनुरोध को आपके Cloudant खाते के विरूद्ध प्रकाश HTTP अनुरोध के रूप में गिना जाएगा।

हालांकि, यह अधिक या कम अनुरोधों के रूप में काम करता है, चाहे यह दूरस्थ सर्वर से आने वाले परिवर्तनों की संख्या पर निर्भर करता है

यह भी याद रखना महत्वपूर्ण है कि _changes कॉल की संख्या में शामिल अन्य कॉलों की संख्या के मुकाबले बहुत कम रिश्तेदार हैं (जैसे, परिवर्तनों की सामग्री स्वयं प्राप्त करना और विशेषकर अगर कई अनुलग्नक हैं)

हालांकि यह प्रश्न TouchDB के लिए विशिष्ट है, और मैं उस कोडबेस के विशिष्ट व्यवहार का उल्लेख करता हूं, यह उत्तर CouchDB प्रतिकृति प्रोटोकॉल [2] को बोलने वाले किसी भी दो प्रणालियों के बीच प्रतिकृति में शामिल अनुरोधों से संबंधित है।

[2] http://www.dataprotocols.org/en/latest/couchdb_replication.html

आइए एक अनुरुपित उदाहरण लेते हैं: प्रतिकृति के लिए स्रोत डेटाबेस के लिए 10 अपडेट प्रति सेकंड दूसरी विंडो, जहां एक टचडीबी डाटाबेस लक्ष्य है। चलो एक 5 मिनट का चुनाव बनाते हैं, एक निरंतर प्रतिकृति। कॉल-गिनती की सादगी के लिए, आइए चित्र से अटैचमेंट भी लेते हैं। हम यह भी मान लेंगे कि डिवाइस में एक निरंतर नेटवर्क कनेक्शन है।

निरंतर मामले के लिए, प्रत्येक 10 के टचडीबी को _changes फ़ीड में एक अपडेट प्राप्त होगा। यह बंद करने के लिए longpoll कनेक्शन का कारण बनता है टचडीबी फिर परिवर्तनों के माध्यम से चलाता है, स्रोत डेटाबेस से अपडेट का अनुरोध करता है; दूरस्थ सर्वर पर एक या अधिक अनुरोध प्राप्त करें जब ऐसा हो रहा है, तो टचडीबी को एक और longpoll अनुरोध longpoll होगा जो कि _changes । तो पांच मिनट की अवधि में, आप शायद 30 कॉलों के साथ-साथ एक्सचेंजों के साथ समाप्त हो जाएंगे, साथ ही दस्तावेजों को प्राप्त करने के लिए सभी कॉल और चेक चौकियां रिकॉर्ड करेंगी।

एक-शॉट प्रतिलेखन के साथ हर पांच मिनट की तुलना करें। आप एक अपडेट में 30 अपडेट्स की सूचना प्राप्त कर सकते हैं। टचडीबी एक ऑप्टिमाइज़ेशन [3] का कार्यान्वयन करता है जिससे 1-पुनरावृत्तियों के लिए अपडेट किए गए दस्तावेज़ प्राप्त करने के लिए यह _all_docs को कॉल करेगा, ताकि आप सभी 30 दस्तावेज़ प्राप्त करने के लिए एक कॉल के साथ समाप्त हो जाएंगे (निरंतर मामले में संभव नहीं है जैसा कि आपने एक परिवर्तन प्राप्त किया है )। उसके बाद आपके पास रिकॉर्ड करने के लिए चेकपॉइंट दस्तावेज़ हैं सबसे कम 5 एचटीटीपी कॉल्स पर, निरंतर मामले में लगभग एक तिहाई के बारे में, जैसा कि आप अतिरिक्त _changes अनुरोधों से बचा है

[3] https://github.com/couchbaselabs/TouchDB-iOS/wiki/Replication-Algorithm#performance

यह स्रोत डेटाबेस से आपके द्वारा अपेक्षित अद्यतनों की आवृत्ति से नीचे आता है। एक-शॉट की प्रतिकृति एक चिकनी मूल्य वक्र प्रदान करने की संभावना है क्योंकि आप अपने द्वारा किए गए अनुरोधों की संख्या के बेहतर नियंत्रण में हैं

एक और सवाल यह है कि नेटवर्क डिस्नेक्ट्स की वजह से अक्सर कनेक्शन छोड़ेगा जो मोबाइल उपकरणों के साथ नियमित रूप से होते हैं। टचडीबी की निरंतर प्रतिकृति हर बार जब उपयोगकर्ता उपयोगकर्ता लाइन पर आता है (अगर _replicator डेटाबेस के माध्यम से जोड़ा जाता है) का बैक अप होगा। यह अप्रत्याशित लागत का एक और स्रोत है

हालांकि, परिवर्तनों की अधिक तत्काल दृश्यता से लाभ निश्चित रूप से अनिश्चितता के लायक हो सकते हैं