ইন বিতরণ সংস্করণ নিয়ন্ত্রণ ব্যবস্থা (যেমন একটি Mercurial এবং গীত ) দক্ষতার নির্দেশ তুলনা acyclic গ্রাফ (DAGs) একটি প্রয়োজন নেই। আমি একজন মার্চুরিয়াল বিকাশকারী এবং আমরা দুটি তদন্তের সময় এবং নেটওয়ার্ক-জটিলতার বিষয়ে আলোচনা করার মত তাত্ত্বিক কাজের বিষয়ে শুনে আগ্রহী।
প্রশ্নে থাকা ডিএজিগুলি রেকর্ডকৃত সংশোধনীগুলি দ্বারা গঠিত হয়। সংশোধনগুলি হ্যাশ মান দ্বারা স্বতন্ত্রভাবে চিহ্নিত করা হয়। প্রতিটি রিভিশনগুলি পূর্ববর্তী সংশোধনগুলির শূন্য (প্রাথমিক প্রতিশ্রুতি), একটি (স্বাভাবিক প্রতিশ্রুতি) বা আরও বেশি (মার্জ কমিট) এর উপর নির্ভর করে। এখানে একটি উদাহরণ যেখানে একের পর এক সংশোধনী a
করা e
হয়েছিল:
a --- b --- c --- d --- e
গ্রাফের তুলনা ছবিতে আসে যখন কারও কাছে কেবল ইতিহাসের অংশ থাকে এবং অনুপস্থিত অংশটি পুনরুদ্ধার করতে চায়। কল্পনা করুন আমার কাছে তা থাকত a
করতে c
এবং তৈরি x
এবং y
এর উপর ভিত্তি করে c
:
a --- b --- c --- x --- y
মার্চুরিয়ালে, আমি করব hg pull
এবং ডাউনলোড করব d
এবং e
:
a --- b --- c --- x --- y
\
d --- e
লক্ষ্যটি হ'ল যখন গ্রাফের অনেকগুলি (বলুন, 100,000 এরও বেশি) নোড থাকে তখন কার্যকরভাবে d
এবং e
কার্যকরভাবে হয়। দক্ষতা উভয়ই উদ্বেগ
- নেটওয়ার্ক জটিলতা: স্থানান্তরিত বাইট সংখ্যা এবং নেটওয়ার্ক রাউন্ড-ট্রিপগুলির সংখ্যা
- সময়ের জটিলতা: দুটি সার্ভারের দ্বারা পরিসংখ্যানের পরিমাণ যা বিনিময় বিনিময় করে
সাধারণ গ্রাফগুলি উপরের মত কয়েকটি সমান্তরাল ট্র্যাকের সাথে সংকীর্ণ হবে। এছাড়াও সাধারণত কয়েকটি মুঠো পাত নোড থাকবে (আমরা তাদেরকে মার্চুরিয়ালে মাথা বলে থাকি) এর মতো e
এবং উপরেও থাকবে y
। শেষ অবধি, যখন কোনও কেন্দ্রীয় সার্ভার ব্যবহার করা হয়, ক্লায়েন্টটির প্রায়শই বেশ কয়েকটি পরিবর্তনসেট থাকে যা সার্ভারে নেই, যখন সার্ভারটি ক্লায়েন্টদের জন্য 100+ নতুন পরিবর্তনসেটগুলি থাকতে পারে, তার উপর নির্ভর করে ক্লায়েন্টটি শেষবার কে সার্ভার থেকে টেনেছিল pulled । একটি অসম্পূর্ণ সমাধানটিকে প্রাধান্য দেওয়া হয়: একটি কেন্দ্রিয়ায়িত সার্ভারকে তার ক্লায়েন্টগুলির তুলনায় খুব কম গণনা করা উচিত।