Google Docs એકસાથે થતા ફેરફારોને કેવી રીતે સંભાળે છે
Google Docs એક જ સમયે ઘણા લોકોને એક જ દસ્તાવેજમાં ફેરફાર કરવાની મંજૂરી આપે છે.
જ્યારે બે વ્યક્તિઓ બરાબર એક જ સેકન્ડમાં એક જ લાઇન પર ફેરફાર કરે ત્યારે શું થાય છે?
એક પ્રમાણભૂત સિસ્ટમ ડેટા વાંચવા, તેમાં ફેરફાર કરવા અને તેને સેવ કરવા દ્વારા કામ કરે છે. જો બે વ્યક્તિઓ એકસાથે સેવ કરે, તો બીજી વ્યક્તિ પહેલી વ્યક્તિના ડેટાને ઓવરરાઈટ (overwrite) કરી દે છે. પરિણામે, પહેલી વ્યક્તિનું કામ ગુમાવવું પડે છે.
Google Docs 'Operational Transformation (OT)' નો ઉપયોગ કરીને આ સમસ્યાથી બચે છે.
જ્યારે તમે ટાઇપ કરો છો ત્યારે તે દર વખતે આખો દસ્તાવેજ મોકલતું નથી. તે માત્ર નાના ઓપરેશન્સ (operations) મોકલે છે.
ઉદાહરણ તરીકે:
- યુઝર A પોઝિશન 6 પર "Beautiful" ઉમેરે છે.
- યુઝર B પોઝિશન 6 પર "Amazing" ઉમેરે છે.
જો સર્વર આ ફેરફારોને કોઈપણ ફેરફાર વગર લાગુ કરે, તો એક એડિટ ગાયબ થઈ જાય.
તેના બદલે, સર્વર આ ઓપરેશન્સને ટ્રાન્સફોર્મ (transform) કરે છે.
સર્વર જુએ છે કે યુઝર A એ પહેલા દસ્તાવેજ અપડેટ કર્યો છે. દસ્તાવેજની લંબાઈ વધે છે. જ્યારે સર્વર યુઝર B ની પ્રક્રિયા કરે છે, ત્યારે તે પોઝિશનને 6 થી બદલીને 16 કરી દે છે.
અંતિમ ટેક્સ્ટ બને છે: Hello Beautiful Amazing World.
બંને ફેરફારો જળવાઈ રહે છે.
સિસ્ટમ આ ટેકનિકલ સ્તંભો પર આધારિત છે:
- સતત કનેક્શન માટે WebSockets.
- કયો ફેરફાર કયા વર્ઝનમાંથી આવ્યો છે તે જાણવા માટે વર્ઝન ટ્રેકિંગ (Version tracking).
- ફેરફારોને બ્રોડકાસ્ટ કરવા માટે રિયલ-ટાઇમ ઇવેન્ટ સ્ટ્રીમ્સ (Real-time event streams).
Google Docs દસ્તાવેજને લોક (lock) કરતું નથી. જો લોક કરવામાં આવે, તો એક વ્યક્તિ ટાઇપ કરતી વખતે અન્ય તમામ લોકોનું કામ અટકી જાય.
તેના બદલે, તે ઇન્ટેલિજન્ટ મર્જિંગ (intelligent merging) નો ઉપયોગ કરે છે.
સિસ્ટમ તમારા કર્સર (cursor) ની પોઝિશનને પણ ટ્રાન્સફોર્મ કરે છે. જો કોઈ તમારી આગળ ટેક્સ્ટ ઉમેરે છે, તો તમારું કર્સર આગળ ખસે છે જેથી તમે તમારું સ્થાન ન ગુમાવો.
જ્યારે Google Docs OT નો ઉપયોગ કરે છે, ત્યારે Figma જેવા ઘણા નવા સાધનો Conflict-free Replicated Data Types (CRDT) નો ઉપયોગ કરે છે. CRDTs વપરાશકર્તાઓને સેન્ટ્રલ સર્વર વગર ફેરફારોને મર્જ કરવાની મંજૂરી આપે છે.
જો તમે સિસ્ટમ ડિઝાઇનનો અભ્યાસ કરી રહ્યા હોવ, તો આ મુદ્દાઓ યાદ રાખો:
- લો લેટન્સી (low latency) માટે WebSockets નો ઉપયોગ કરો.
- કોન્ફ્લિક્ટ રિઝોલ્યુશન (conflict resolution) માટે OT અથવા CRDT નો ઉપયોગ કરો.
- ફેરફારોને ટ્રેક કરવા માટે વર્ઝન નંબરનો ઉપયોગ કરો.
- યુઝર એક્સપિરિયન્સ સુધારવા માટે કર્સર્સને સિંક (sync) કરો.
Google Docs સંઘર્ષો (conflicts) ને અટકાવતું નથી. તે એડિટ્સને ટ્રાન્સફોર્મ કરીને તેને ઉકેલે છે જેથી દરેક વ્યક્તિ સમાન પરિણામ જોઈ શકે.
