ફાઇલોનું ડુપ્લીકેશન કર્યા વિના કાર્યક્ષમ વર્ઝન કંટ્રોલ બનાવવું
દરેક વર્ઝન અથવા ફોર્ક (fork) માટે ફાઇલોની સંપૂર્ણ નકલો સંગ્રહિત કરવાથી જગ્યાનો બગાડ થાય છે. જો તમે દસ ફાઇલો ધરાવતા પ્રોજેક્ટમાં એક લાઇન બદલો છો, તો તમારે ફરીથી બધી દસ ફાઇલો સેવ કરવાની જરૂર નથી.
મારા LaTeX Writer પ્રોજેક્ટ બનાવતી વખતે મને આ સમસ્યાનો સામનો કરવો પડ્યો હતો. મારે ઊંચા સ્ટોરેજ ખર્ચ વિના વર્ઝન કંટ્રોલ અને પ્રોજેક્ટ ફોર્કિંગ હેન્ડલ કરવાની રીત જોઈતી હતી.
મેં GitHub કેવી રીતે કામ કરે છે તે જોયું. જ્યારે તમે કોઈ ફેરફાર કરો છો ત્યારે GitHub દરેક વખતે સંપૂર્ણ રિપોઝિટરી સંગ્રહિત કરતું નથી. તે સામગ્રી (content) ને અલગથી સંગ્રહિત કરે છે અને ફાઇલો તથા કમિટ્સ (commits) ને જોડવા માટે સંદર્ભો (references) નો ઉપયોગ કરે છે.
મેં ત્રણ મુખ્ય ઘટકોનો ઉપયોગ કરીને મારી સિસ્ટમ બનાવી:
- Metadata: આ પ્રોજેક્ટ્સ, માલિકો અને ફોલ્ડર્સ માટે ID સંગ્રહિત કરે છે.
- File Records: આ ફાઇલના નામ અને સામગ્રી (content) ના લિંક્સ સંગ્રહિત કરે છે.
- Blobs: અહીં વાસ્તવિક સામગ્રી (content) રહેલી હોય છે.
આ સિસ્ટમ content hashing દ્વારા કામ કરે છે. જ્યારે તમે ફાઇલ સેવ કરો છો, ત્યારે સિસ્ટમ સામગ્રીના આધારે એક યુનિક ID જનરેટ કરે છે. જો સામગ્રી પહેલેથી જ અસ્તિત્વમાં હોય, તો સિસ્ટમ હાલના Blob નો જ ફરીથી ઉપયોગ કરે છે. તે નવો Blob બનાવતી નથી.
આ અભિગમ ફોર્કિંગને સરળ અને સસ્તું બનાવે છે. જ્યારે તમે પ્રોજેક્ટ ફોર્ક કરો છો:
- સિસ્ટમ એક નવો Project ID બનાવે છે.
- તે ફાઇલો અને ફોલ્ડર્સ માટે નવું metadata બનાવે છે.
- તે નવા metadata ને હાલના Blobs તરફ નિર્દેશિત કરે છે.
ફોર્ક દરમિયાન વાસ્તવિક ફાઇલ સામગ્રીની નકલ કરવામાં આવતી નથી. તમે ફક્ત નાના metadata રેકોર્ડ્સનું ડુપ્લીકેશન કરો છો.
જ્યારે તમે ફોર્કને એડિટ કરો છો, ત્યારે પ્રક્રિયા કાર્યક્ષમ રહે છે:
- તમે સામગ્રી (content) બદલો છો.
- સિસ્ટમ નવી સામગ્રીને hash કરે છે.
- તે નવો Blob ત્યારે જ બનાવે છે જો તે ચોક્કસ સામગ્રી અસ્તિત્વમાં ન હોય.
- તમારા ફોર્ક માટેનું metadata નવા Blob તરફ નિર્દેશિત કરે છે.
- મૂળ પ્રોજેક્ટ હજુ પણ જૂના Blob તરફ નિર્દેશિત કરે છે.
આ પદ્ધતિના ઘણા ફાયદા છે:
- Content deduplication થી મોટી માત્રામાં જગ્યા બચે છે.
- ફોર્કિંગ તરત જ થાય છે.
- વર્ઝન મેનેજમેન્ટ વ્યવસ્થિત રહે છે.
- ડેટાબેઝનો વિકાસ ધીમો રહે છે.
તમે ભારે સ્ટોરેજ ઓવરહેડ વિના GitHub જેવી કાર્યક્ષમતા મેળવો છો.