सामग्री पर जाएँ

समन्वय

bae का समन्वय coven का समन्वय है: bae अपनी टेबल और blobs घोषित करता है, और coven बाकी काम करता है। यह पेज वही यांत्रिकी बताता है जैसे वे bae पर लागू होती हैं; coven के अपने दस्तावेज हर हिस्से को पूरी गहराई में बताते हैं।

coven SQLite connection का मालिक है, इसलिए bae द्वारा कमिट किया गया हर लेखन उससे होकर गुजरता है। जब सिंक होने वाली टेबल बदलने वाला transaction कमिट होता है, coven उसी transaction में हर पंक्ति के बदलाव को उसके छुए columns के साथ दर्ज करता है, इसलिए कमिट हुआ बदलाव कभी नहीं खोता, भले ऐप एक पल बाद क्रैश हो जाए। कोई diffing नहीं, कोई dirty flags नहीं: पकड़ना connection की property है, और कोई लेखन छूट नहीं सकता। बदलाव उपकरण पर प्रतीक्षा करता है और भेजते समय ही एन्क्रिप्ट और हस्ताक्षरित होता है, इसलिए लिखने के लिए न कुंजी चाहिए न नेटवर्क।

क्लाउड घर में लाइब्रेरी का पूरा इतिहास ऑब्जेक्ट्स का एक क्रमांकित क्रम है। हर ऑब्जेक्ट में किसी एक उपकरण के बदलावों का समूह, एक एडमिन प्रविष्टि, किसी एक सदस्य के लिए sealed कुंजी, या एक snapshot घोषणा होती है। हर उपकरण उन्हें क्रम से लागू करता है और कभी कोई नहीं छोड़ता, इसलिए हर उपकरण इस पर सहमत होता है कि क्या और कब हुआ। उपकरण अगला ऑब्जेक्ट तभी जोड़ता है जब वह पहले के सभी लागू कर चुका हो।

एक सिंक पास उपकरण के आखिरी लागू किए गए ऑब्जेक्ट से आगे तब तक पढ़ता है जब तक कोई गायब न मिले, हर एक का हस्ताक्षर जांचकर उसे लागू करता है, इस उपकरण के कतार वाले बदलाव एक नए ऑब्जेक्ट के रूप में भेजता है, फिर वह काम करता है जो नई स्थिति मांगती है: एक्सेस साझा करना या हटाना, snapshots लेना, पुराना इतिहास मिटाना। शांत लाइब्रेरी पर एक पास दो अनुरोधों में होता है, उसका आकार चाहे जो हो।

पास स्थानीय बदलावों के बाद, idle timer पर, और Sync Now पर तुरंत चलते हैं। विफलताएं एक ही backoff योजना से फिर कोशिश करती हैं, और जो भी आगे नहीं बढ़ सकता वह बताता है कि किस चीज की प्रतीक्षा में है, जिसे bae अपनी सिंक स्थिति पंक्ति में दिखाता है।

दो उपकरणों पर अलग-अलग रहते हुए एक ही लाइब्रेरी edit होना सामान्य स्थिति है, अपवाद नहीं। जब उनके बदलाव मिलते हैं:

  • अलग पंक्तियों या अलग columns पर edits दोनों लागू होते हैं। Laptop पर रिलीज का year बदलना और desktop पर उसका label बदलना, दोनों नतीजे देता है।
  • उसी पंक्ति के उसी column पर संपादन timestamp से क्रमित होते हैं: बाद वाला संपादन जीतता है, निश्चित रूप से और हर उपकरण पर समान रूप से।
  • साथ-साथ हुए संपादनों पर delete जीतता है: किसी ऐसी पंक्ति पर किया गया संपादन जो बाद में हटा दी गई, चाहे जब पहुंचे, हारता है, इसलिए एक उपकरण पर हटाई गई रिलीज हटाई ही रहती है, भले दूसरे उपकरण ने उसी अंतराल में उसे संपादित किया हो।

coven हर बदले गए मान को खोया मान के रूप में रखता है; bae उनमें से कोई नहीं दिखाता और कोई नहीं हटाता, इसलिए कोई conflict UI नहीं है। पहुंचने का क्रम कोई भी हो, हर उपकरण एक ही नतीजे पर पहुंचता है।

जुड़ता या पुनर्स्थापित होता उपकरण इतिहास शुरू से replay नहीं करता। उपकरण snapshots लेते हैं, यानी क्रम के किसी एक बिंदु पर लाइब्रेरी की पूरी स्थिति, और जब लाइब्रेरी और हर निजी circle के पास एक snapshot हो जाता है, उससे पहले का इतिहास मिटा दिया जाता है। नया उपकरण नवीनतम snapshot लोड करता है, फिर केवल वह लागू करता है जो उसके बाद आया। जो उपकरण रखे गए इतिहास से ज्यादा समय दूर रहा, वह भी यही करता है और अपने न भेजे गए संपादन बचाए रखता है।

bae का schema एक ही migration है, और कोई उपकरण जो भी बदलाव भेजता है, उसमें वह schema version दर्ज होता है जिससे वह बना। जो उपकरण अपने से नए schema वाले बदलाव तक पहुंचता है, वह वहीं रुक जाता है और उसके आगे कुछ लागू नहीं करता, जब तक ऐप update न हो; कुछ खोता नहीं और कुछ गलत लागू नहीं होता।

Schema version से मोटी सीमा compatibility era है: हर binary में baked पिन की गई coven revision। दो builds केवल एक era के भीतर समन्वय करते हैं; coven wire-फ़ॉर्मैट टूटना नया era है और हर ऐप में major version bump है। Pre-1.0 में हर build era zero है और फ़ॉर्मैट migration के बिना बदलते हैं।

प्रदाता क्या देखता है

इस अनुभाग का लिंक

प्रदाता एन्क्रिप्टेड बदलाव, snapshots, सदस्यता रिकॉर्ड और फाइलें रखता है; वह ऑब्जेक्ट गिन सकता है, आकार और समय देख सकता है, और देख सकता है कि कौन-सा खाता हर ऑब्जेक्ट लिखता है, पर सामग्री में से कुछ नहीं पढ़ सकता। उपकरण द्वारा लाया गया हर ऑब्जेक्ट डेटाबेस तक पहुंचने से पहले हस्ताक्षर और सदस्यता, दोनों से सत्यापित होता है: संग्रहण एक निष्क्रिय, अविश्वसनीय डाकपेटी है। देखें एन्क्रिप्शन और पहचान और सदस्यता।