फाईल्सची पुनरावृत्ती न करता कार्यक्षम व्हर्जन कंट्रोल तयार करणे
प्रत्येक व्हर्जन किंवा फोर्कसाठी (fork) फाईल्सच्या पूर्ण प्रती साठवणे म्हणजे जागेचा अपव्यय आहे. जर तुम्ही दहा फाईल्स असलेल्या प्रोजेक्टमध्ये फक्त एक ओळ बदलली, तर तुम्हाला त्या दहाही फाईल्स पुन्हा सेव्ह करण्याची गरज नाही.
माझा LaTeX Writer प्रोजेक्ट तयार करताना मला या समस्येचा सामना करावा लागला. मला जास्त स्टोरेज खर्च न करता व्हर्जन कंट्रोल आणि प्रोजेक्ट फोर्किंग हाताळण्यासाठी एका मार्गची गरज होती.
मी GitHub कसे काम करते याचा अभ्यास केला. GitHub प्रत्येक वेळी बदल केल्यावर संपूर्ण रिपॉझिटरी (repository) साठवत नाही. ते कंटेंट (content) वेगळा साठवते आणि फाईल्स व कमिट्सना (commits) जोडण्यासाठी संदर्भ (references) वापरते.
मी तीन मुख्य घटकांचा वापर करून माझी सिस्टम तयार केली:
- Metadata: यामध्ये प्रोजेक्ट्स, मालक आणि फोल्डर्ससाठी आयडी (IDs) साठवले जातात.
- File Records: यामध्ये फाईलची नावे आणि कंटेंटच्या लिंक्स साठवल्या जातात.
- Blobs: येथे प्रत्यक्ष कंटेंट साठवला जातो.
ही सिस्टम 'कंटेंट हॅशिंग' (content hashing) द्वारे काम करते. जेव्हा तुम्ही एखादी फाईल सेव्ह करता, तेव्हा सिस्टम त्या कंटेंटच्या आधारे एक युनिक आयडी (unique ID) तयार करते. जर तो कंटेंट आधीच अस्तित्वात असेल, तर सिस्टम आधीच असलेल्या Blob चा पुनवापर करते. ती नवीन Blob तयार करत नाही.
या पद्धतीमुळे फोर्किंग करणे सोपे आणि स्वस्त होते. जेव्हा तुम्ही एखादा प्रोजेक्ट फोर्क करता:
- सिस्टम एक नवीन Project ID तयार करते.
- ती फाईल्स आणि फोल्डर्ससाठी नवीन मेटाडेटा तयार करते.
- ती नवीन मेटाडेटाला अस्तित्वात असलेल्या Blobs कडे निर्देशित करते.
फोर्क दरम्यान फाईलचा प्रत्यक्ष कंटेंट कॉपी केला जात नाही. तुम्ही फक्त लहान मेटाडेटा रेकॉर्ड्सची डुप्लिकेट कॉपी तयार करता.
जेव्हा तुम्ही फोर्क एडिट करता, तेव्हा ही प्रक्रिया कार्यक्षम राहते:
- तुम्ही कंटेंट बदलता.
- सिस्टम नवीन कंटेंटचे हॅशिंग करते.
- जर तो नेमका कंटेंट अस्तित्वात नसेल, तरच ती नवीन Blob तयार करते.
- तुमच्या फोर्कचा मेटाडेटा नवीन Blob कडे निर्देशित करतो.
- मूळ प्रोजेक्ट अजूनही जुन्या Blob कडेच निर्देशित करतो.
या पद्धतीचे अनेक फायदे आहेत:
- कंटेंट ड्युप्लिकेशन (deduplication) मुळे मोठ्या प्रमाणात जागा वाचते.
- फोर्किंग त्वरित होते.
- व्हर्जन मॅनेजमेंट व्यवस्थित राहते.
- डेटाबेसची वाढ संथ राहते.
तुम्हाला स्टोरेजचा मोठा भार न घेता GitHub सारखी कार्यक्षमता मिळते.