मैं गलत था। CRDT ही भविष्य है।
(josephg.com)Google Wave के एक डेवलपर द्वारा Conflict-free Replicated Data Types पर चर्चा
→ CRDT : रियल-टाइम collaboration tools में simultaneous editing को support करने वाला data structure
-
Wave, OT(Operational Transform) पर आधारित था: सभी बदलावों की समय-क्रमानुसार सूची स्टोर करता था। यह रियल-टाइम git-rebase जैसा है
-
OT की समस्याओं में से एक यह है कि इसके लिए centralized server/DB की जरूरत होती है
→ शायद इसी वजह से Google Docs (जो OT-आधारित ही है) में जब बहुत सारे लोग किसी दस्तावेज़ पर आ जाते हैं, तो 'यह दस्तावेज़ overloaded है और संपादित नहीं किया जा सकता' जैसा संदेश दिखाई देता है?
→ दस्तावेज़ को विभाजित करके या DB transaction में retry loop के जरिए इससे बचा जा सकता है (serialization समस्या को DB पर शिफ्ट कर देना)
→ लेकिन यह परफेक्ट नहीं है। Wave में कई लोग एक साथ edit करते थे और यह काम तो करता था, लेकिन bugs बहुत थे। बहुत ज्यादा complex
- CRDT का उभार
→ Wave ने जो algorithm इस्तेमाल किया था, वह 1995 में आविष्कृत हुआ था। OT को ठीक से काम कराने पर लगातार research हुई, लेकिन CRDT ज्यादा promising है
→ CRDT अलग approach अपनाता है, जिससे central DB के बिना real-time editing संभव है
→ पहले जिन चीजों को समस्या माना जाता था—speed/capacity/features/complexity—उन सबमें सुधार हुआ है
-
speed : आज के CRDTs (Automerge / RGA or y.js / YATA) में
log(n)स्तर की lookup संभव है -
capacity : Martin की Columnar encoding से दस्तावेज़ को उसके मूल आकार के लगभग 1.5~2 गुना में स्टोर किया जा सकता है
-
features : सिद्धांत रूप से rewinding और replaying संभव हैं। बेशक, अभी तक किसी ने इसे implement नहीं किया है
-
complexity : implementation का आकार OT की तुलना में CRDT में थोड़ा बड़ा हो सकता है, लेकिन बहुत बड़ा अंतर नहीं है
→ ऊपर बताए गए सुधार जल्दी ही Automerge में उपलब्ध होने वाले हैं
- रियल-टाइम editing के संदर्भ में, दुख की बात है कि OT और उससे जुड़े काम अब शायद जरूरी नहीं रहेंगे
→ OT की सारी सुविधाएँ CRDT में डाली जा सकती हैं, लेकिन इसका उल्टा संभव नहीं है
→ OT का फायदा यह है कि वह centralized software के लिए उपयुक्त है, लेकिन distributed algorithms centralized तरीकों में भी अच्छी तरह काम करते हैं
→ WASM में चलने वाला high-quality CRDT, JS में बनी OT implementation से तेज़ होगा
- अब समय आ गया है कि lightweight और fast CRDT बनाए जाएँ
→ academic पक्ष लगभग पूरा हो चुका है, और अब शानदार (kick-ass) implementations की जरूरत है
10 टिप्पणियां
मैं Hong Youngtaek हूँ और Yorkie प्रोजेक्ट विकसित कर रहा हूँ.
कोलैबोरेटिव एडिटिंग ऐप्स के लिए document store Yorkie भी CRDT पर आधारित है.
https://github.com/yorkie-team/yorkie
मैं गलत था। CRDT ही भविष्य है.
OT के साथ undo/redo आसानी से मिल जाता है... लेकिन CRDT में snapshot के अलावा कोई तरीका ही नहीं है...
Automerge जैसे मामलों में, library खुद ही undo/redo को support करती है। Implement करने वाले के लिए यह मुश्किल हो सकता है, लेकिन library इस्तेमाल करने वाले के नज़रिए से तो ठीक है haha
https://www.notion.so/sihawn/CRDT-1dc1af26d60144c09eadd178e0ae6e0d
मैंने पूरा अनुवाद किया था, लेकिन उसे अपलोड करना भूल गया ;m; Papago को बेस बनाकर एक बार पढ़ते हुए सिर्फ अटपटे हिस्सों को ठीक किया है। अगर आप देखना चाहें कि कुल मिलाकर उसका एहसास कैसा है, तो ऊपर दिया गया लिंक देख लीजिए~
इसे कमेंट बॉक्स में पोस्ट करने के लिए... यह बहुत लंबा है ;m; इसलिए Notion लिंक के रूप में दे रहा हूँ.
सोचकर देखूं तो शायद Notion भी CRDT का इस्तेमाल कर रहा हो सकता है!
OT का उपयोग Google Wave/Google Docs/MS Office365 में किया जाता है
CRDT का उपयोग Figma/Apple Notes और Riak/Redis आदि में किया जाता है
मैं गलत था। CRDT ही भविष्य है.
Figma की multi-user तकनीक कैसे काम करती है https://hi.news.hada.io/topic?id=814
पोस्ट में लिंक किया गया Automerge डेवलपर Martin Kleppmann का वीडियो "CRDTs: The Hard Parts" सच में बहुत अच्छी तरह समझाता है।
शुरुआत में यह OT और CRDT की तुलना बहुत अच्छे से करके समझाता है। बाद का हिस्सा CRDT implementation के बारे में गहरी चर्चा है।
https://www.youtube.com/watch?v=x7drE24geUw
JS में collaborative tools बनाते समय इस्तेमाल होने वाली CRDT library
सहयोगी सिस्टम की ओर: OT algorithm से CRDT सिस्टम तक
https://deview.kr/2013/detail.nhn?topicSeq=66
घरेलू प्रस्तुतियों में यह लगभग अकेला ऐसा कंटेंट है जो CRDT पर बात करता है।
यह प्रस्तुति देने वाले Hyeon-geol ने मुख्य लेख में बताई गई RGA बनाई थी.
Yorkie ने भी list-type data type को RGA के आधार पर implement किया है.
https://github.com/yorkie-team/yorkie/issues/2