ফাইল ডুপ্লিকেট না করেই দক্ষ ভার্সন কন্ট্রোল তৈরি করা
প্রতিটি ভার্সন বা ফোর্কের জন্য ফাইলের সম্পূর্ণ কপি সংরক্ষণ করা জায়গা অপচয় করে। যদি দশটি ফাইল বিশিষ্ট একটি প্রজেক্টের মাত্র একটি লাইন পরিবর্তন করেন, তবে আপনার দশটি ফাইলই পুনরায় সেভ করার প্রয়োজন নেই।
আমার LaTeX Writer প্রজেক্টটি তৈরির সময় আমি এই সমস্যার সম্মুখীন হয়েছিলাম। উচ্চ স্টোরেজ খরচ ছাড়াই ভার্সন কন্ট্রোল এবং প্রজেক্ট ফোর্কিং পরিচালনা করার একটি উপায় আমার প্রয়োজন ছিল।
আমি লক্ষ্য করলাম GitHub কীভাবে কাজ করে। আপনি প্রতিবার পরিবর্তন করার সময় GitHub সম্পূর্ণ রিপোজিটরি সংরক্ষণ করে না। এটি কন্টেন্ট আলাদাভাবে সংরক্ষণ করে এবং ফাইল ও কমিটগুলোকে লিঙ্ক করার জন্য রেফারেন্স ব্যবহার করে।
আমি তিনটি প্রধান উপাদানের মাধ্যমে আমার সিস্টেমটি তৈরি করেছি:
- Metadata: এটি প্রজেক্ট, মালিক এবং ফোল্ডারের জন্য ID সংরক্ষণ করে।
- File Records: এগুলো ফাইলের নাম এবং কন্টেন্টের লিঙ্ক সংরক্ষণ করে।
- Blobs: এখানেই প্রকৃত কন্টেন্ট থাকে।
সিস্টেমটি কন্টেন্ট হ্যাশিংয়ের (content hashing) মাধ্যমে কাজ করে। যখন আপনি একটি ফাইল সেভ করেন, সিস্টেমটি কন্টেন্টের ওপর ভিত্তি করে একটি ইউনিক ID তৈরি করে। যদি সেই কন্টেন্টটি আগে থেকেই থেকে থাকে, তবে সিস্টেমটি বিদ্যমান Blob-টি পুনরায় ব্যবহার করে। এটি নতুন কোনো Blob তৈরি করে না।
এই পদ্ধতিটি ফোর্কিংকে সহজ এবং সাশ্রয়ী করে তোলে। যখন আপনি একটি প্রজেক্ট ফোর্ক করেন:
- সিস্টেমটি একটি নতুন Project ID তৈরি করে।
- এটি ফাইল এবং ফোল্ডারের জন্য নতুন metadata তৈরি করে।
- এটি নতুন metadata-কে বিদ্যমান Blobs-এর দিকে নির্দেশ করে।
ফোর্কিংয়ের সময় কোনো প্রকৃত ফাইল কন্টেন্ট কপি করা হয় না। আপনি কেবল ছোট metadata রেকর্ডগুলো ডুপ্লিকেট করেন।
যখন আপনি একটি ফোর্ক এডিট করেন, প্রক্রিয়াটি দক্ষ থাকে:
- আপনি কন্টেন্ট পরিবর্তন করেন।
- সিস্টেমটি নতুন কন্টেন্ট হ্যাশ করে।
- যদি সেই হুবহু কন্টেন্টটি না থাকে, তবেই এটি একটি নতুন Blob তৈরি করে।
- আপনার ফোর্কের metadata নতুন Blob-টিকে নির্দেশ করে।
- মূল প্রজেক্টটি তখনও পুরনো Blob-কেই নির্দেশ করে।
এই পদ্ধতিটি বেশ কিছু সুবিধা প্রদান করে:
- কন্টেন্ট ডিডুপ্লিকেশন (Content deduplication) প্রচুর পরিমাণে জায়গা বাঁচায়।
- ফোর্কিং তাৎক্ষণিকভাবে ঘটে।
- ভার্সন ম্যানেজমেন্ট সুসংগঠিত থাকে।
- ডাটাবেসের বৃদ্ধি ধীর থাকে।
আপনি অতিরিক্ত স্টোরেজ খরচ ছাড়াই GitHub-এর মতো কার্যকারিতা পাবেন।