Google Docs एकाच वेळी होणारे बदल (Simultaneous Edits) कसे हाताळते
Google Docs एकाच वेळी अनेक लोकांना एकच दस्तऐवज संपादित करण्याची परवानगी देते.
जेव्हा दोन व्यक्ती अगदी एकाच सेकंदाला अगदी तीच ओळ संपादित करतात, तेव्हा काय होते?
एक मानक प्रणाली डेटा वाचणे, त्यात बदल करणे आणि तो जतन करणे या पद्धतीने काम करते. जर दोन व्यक्तींनी एकाच वेळी डेटा जतन केला, तर दुसरी व्यक्ती पहिल्या व्यक्तीचा डेटा ओव्हरराईट (overwrite) करते. यामुळे पहिल्या व्यक्तीचे काम निघून जाते.
Google Docs 'Operational Transformation' (OT) वापरून हे टाळते.
तुम्ही प्रत्येक वेळी टाईप केल्यावर ते संपूर्ण दस्तऐवज पाठवत नाही. त्याऐवजी ते लहान ऑपरेशन्स (operations) पाठवते.
उदाहरणार्थ:
- युजर A ६ व्या स्थानावर "Beautiful" शब्द टाकतो.
- युजर B ६ व्या स्थानावर "Amazing" शब्द टाकतो.
जर सर्व्हरने कोणताही बदल न करता हे लागू केले असते, तर एक संपादन (edit) गायब झाले असते.
त्याऐवजी, सर्व्हर या ऑपरेशन्समध्ये बदल (transform) करतो.
सर्व्हरला दिसते की युजर A ने प्रथम दस्तऐवज अपडेट केला आहे. यामुळे दस्तऐवजाची लांबी वाढते. जेव्हा सर्व्हर युजर B च्या बदलावर प्रक्रिया करतो, तेव्हा तो स्थान ६ वरून १६ मध्ये बदलतो.
अंतिम मजकूर असा होतो: Hello Beautiful Amazing World.
दोन्ही बदल कायम राहतात.
ही प्रणाली खालील तांत्रिक स्तंभांवर अवलंबून आहे:
- सततच्या कनेक्शनसाठी WebSockets.
- कोणते संपादन कोणत्या व्हर्जनमधून आले आहे हे जाणून घेण्यासाठी व्हर्जन ट्रॅकिंग (Version tracking).
- बदल प्रसारित करण्यासाठी रिअल-टाइम इव्हेंट स्ट्रीम्स (Real-time event streams).
Google Docs दस्तऐवज 'लॉक' करत नाही. जर दस्तऐवज लॉक केला असता, तर एक व्यक्ती टाईप करत असताना इतरांचे काम थांबले असते.
त्याऐवजी, ते 'intelligent merging' चा वापर करते.
ही प्रणाली तुमच्या कर्सरचे (cursor) स्थान देखील बदलते. जर कोणी तुमच्या पुढे मजकूर जोडला, तर तुमचा कर्सर पुढे सरकतो जेणेकरून तुमचे स्थान बदलणार नाही.
Google Docs OT वापरत असले तरी, Figma सारखी अनेक नवीन साधने 'Conflict-free Replicated Data Types' (CRDT) वापरतात. CRDT मुळे वापरकर्ते मध्यवर्ती सर्व्हरशिवाय बदल एकत्र (merge) करू शकतात.
जर तुम्ही सिस्टम डिझाइन (system design) शिकत असाल, तर या गोष्टी लक्षात ठेवा:
- कमी लॅटन्सीसाठी (low latency) WebSockets वापरा.
- संघर्षाचे निराकरण (conflict resolution) करण्यासाठी OT किंवा CRDT वापरा.
- बदल ट्रॅक करण्यासाठी व्हर्जन नंबर वापरा.
- युजर एक्सपिरियन्स सुधारण्यासाठी कर्सर सिंक (sync) करा.
Google Docs संघर्ष (conflicts) रोखत नाही. ते संपादन बदलून (transforming edits) त्यांचा निराकरण करते जेणेकरून सर्वांना एकच निकाल दिसेल.
