گوگل ڈاکس بیک وقت ہونے والی ترامیم کو کیسے سنبھالتا ہے
گوگل ڈاکس ایک ہی وقت میں بہت سے لوگوں کو ایک ہی دستاویز میں ترمیم کرنے کی اجازت دیتا ہے۔
کیا ہوتا ہے جب دو لوگ بالکل ایک ہی سیکنڈ میں ایک ہی لائن میں ترمیم کرتے ہیں؟
ایک عام نظام ڈیٹا کو پڑھنے، تبدیل کرنے اور محفوظ کرنے کے ذریعے کام کرتا ہے۔ اگر دو لوگ ایک ساتھ ڈیٹا محفوظ کریں، تو دوسرا شخص پہلے والے ڈیٹا کو ختم (overwrite) کر دیتا ہے۔ اس طرح پہلے شخص کا کام ضائع ہو جاتا ہے۔
گوگل ڈاکس Operational Transformation (OT) کا استعمال کرتے ہوئے اس سے بچتا ہے۔
جب بھی آپ ٹائپ کرتے ہیں، یہ پوری دستاویز نہیں بھیجتا، بلکہ صرف چھوٹی تبدیلیاں (operations) بھیجتا ہے۔
مثال کے طور پر:
- صارف A پوزیشن 6 پر "Beautiful" شامل کرتا ہے۔
- صارف B پوزیشن 6 پر "Amazing" شامل کرتا ہے۔
اگر سرور ان تبدیلیوں کو بغیر کسی تبدیلی کے لاگو کر دیتا، تو ایک ترمیم غائب ہو جاتی۔
اس کے بجائے، سرور ان آپریشنز (operations) کو تبدیل (transform) کر دیتا ہے۔
سرور دیکھتا ہے کہ صارف A نے پہلے دستاویز کو اپ ڈیٹ کیا۔ دستاویز کا سائز بڑھ گیا۔ جب سرور صارف B کی تبدیلی پر کارروائی کرتا ہے، تو وہ پوزیشن کو 6 سے بدل کر 16 کر دیتا ہے۔
حتمی متن بن جاتا ہے: Hello Beautiful Amazing World.
دونوں ترامیم برقرار رہتی ہیں۔
یہ نظام ان تکنیکی ستونوں پر انحصار کرتا ہے:
- مستقل کنکشن کے لیے WebSockets۔
- ورژن ٹریکنگ تاکہ معلوم ہو سکے کہ کون سی ترمیم کس ورژن سے آئی ہے۔
- تبدیلیوں کو براڈکاسٹ کرنے کے لیے ریئل ٹائم ایونٹ اسٹریمز (Real-time event streams)۔
گوگل ڈاکس دستاویز کو لاک نہیں کرتا۔ لاک کرنے سے ایک شخص کے ٹائپ کرنے کے دوران باقی سب کا کام رک جائے گا۔
اس کے بجائے، یہ ذہین طریقے سے ڈیٹا کو ضم (intelligent merging) کرتا ہے۔
یہ نظام آپ کے کرسر (cursor) کی پوزیشن کو بھی تبدیل کرتا ہے۔ اگر کوئی آپ کے سامنے متن شامل کرتا ہے، تو آپ کا کرسر آگے بڑھ جاتا ہے تاکہ آپ اپنی جگہ نہ کھوئیں ۔
اگرچہ گوگل ڈاکس OT استعمال کرتا ہے، لیکن Figma جیسے بہت سے نئے ٹولز Conflict-free Replicated Data Types (CRDT) استعمال کرتے ہیں۔ CRDTs صارفین کو مرکزی سرور کے بغیر تبدیلیوں کو ضم کرنے کی اجازت دیتے ہیں۔
اگر آپ سسٹم ڈیزائن کا مطالعہ کر رہے ہیں، تو ان نکات کو یاد رکھیں:
- کم لیٹنسی (low latency) کے لیے WebSockets کا استعمال کریں۔
- تنازعات کے حل (conflict resolution) کے لیے OT یا CRDT کا استعمال کریں۔
- تبدیلیوں پر نظر رکھنے کے لیے ورژن نمبرز کا استعمال کریں۔
- صارف کے تجربے کو بہتر بنانے کے لیے کرسرز کو سنک (sync) کریں۔
گوگل ڈاکس تنازعات کو روکتا نہیں ہے۔ یہ ترامیم کو تبدیل کر کے انہیں حل کرتا ہے تاکہ ہر کوئی ایک ہی نتیجہ دیکھ سکے۔
