সমস্ত ফাইল একটি ডিরেক্টরিতে রাখা সম্ভব, যদিও কখনও কখনও এটি কিছুটা বড় হয়ে যায়। অনেক ফাইল সিস্টেমের একটি সীমা থাকে । আপনি একটি ইউএসবি স্টিকের একটি FAT32 ফর্ম্যাট ড্রাইভে একটি গিট সংগ্রহস্থল রাখতে চান? আপনি কেবল একটি ডিরেক্টরিতে 65,535 টি ফাইল সঞ্চয় করতে পারেন। এর অর্থ হ'ল ডিরেক্টরি কাঠামোকে উপ-বিভাজন করা প্রয়োজন যাতে একক ডিরেক্টরি পূরণের সম্ভাবনা কম।
এটি অন্যান্য ফাইল সিস্টেম এবং বৃহত্তর গিট সংগ্রহস্থলগুলির ক্ষেত্রেও সমস্যা হয়ে উঠবে। অপেক্ষাকৃত ছোট গিট রেপো যা আমি হ্যাঙ্গআউট হয়েছি (প্রায় 360MiB) এবং এতে 11k ফাইলের জন্য 181,546 টি অবজেক্ট রয়েছে। লিনাক্স রেপো টানুন এবং আপনার কাছে 4,374,054 টি অবজেক্ট রয়েছে। যদি আপনি এই সমস্তগুলি একটি ডিরেক্টরিতে রাখেন তবে ফাইল সিস্টেম পরীক্ষা করা অসম্ভব এবং ক্রাশ হয়ে যাবে ('ক্র্যাশ' এর কিছু অর্থের জন্য) ফাইল সিস্টেমটি।
তাই? আপনি এটি বাইট দ্বারা বিভক্ত। ফায়ারফক্সের মতো অ্যাপ্লিকেশনগুলির সাথে অনুরূপ পন্থা করা হয়:
~/Li/Ca/Fi/Pr/7a/Cache $ ls
0/ 4/ 8/ C/ _CACHE_001_
1/ 5/ 9/ D/ _CACHE_002_
2/ 6/ A/ E/ _CACHE_003_
3/ 7/ B/ F/ _CACHE_MAP_
এর বাইরেও এটি কার্য সম্পাদনের প্রশ্নে যায়। অসংখ্য দীর্ঘ ফাইলের নাম সহ এনটিএফএসের পারফরম্যান্স বিবেচনা করুন :
উইন্ডোজ এনটি উইন্ডোজ এনটি ফাইল সিস্টেমের (এনটিএফএস) ফর্ম্যাট ড্রাইভগুলির ডিরেক্টরি ক্রিয়াকলাপ করতে দীর্ঘ সময় নেয় যা একটি একক ডিরেক্টরিতে দীর্ঘ ফাইলের নাম (8.3 কনভেনশন অনুসারে নাম নয়) সহ প্রচুর ফাইল থাকে files
এনটিএফএস যখন একটি ডিরেক্টরিতে ফাইলগুলি গণনা করে, এটি দীর্ঘ ফাইলের নামের সাথে যুক্ত 8.3 টি নাম সন্ধান করতে হবে। একটি এনটিএফএস ডিরেক্টরি একটি বাছাই করা অবস্থায় সংরক্ষণ করা হয়, লং ফাইলের নাম এবং 8.3 নাম সাধারণত ডিরেক্টরি তালিকার একে অপরের পাশে থাকে না। সুতরাং, এনটিএফএস উপস্থিত প্রতিটি ফাইলের জন্য ডিরেক্টরিটির রৈখিক অনুসন্ধান ব্যবহার করে। ফলস্বরূপ, ডিরেক্টরিতে ফাইল সংখ্যার বর্গক্ষেত্রের সাথে ডিরেক্টরি তালিকা সঞ্চালনের জন্য প্রয়োজনীয় সময়ের পরিমাণ বৃদ্ধি পায়। সংখ্যক ফাইলের জন্য (কয়েক শতাধিকেরও কম) সময়ের বিলম্ব নগণ্য। কিন্তু ডিরেক্টরিতে ফাইলের সংখ্যা কয়েক হাজারে বেড়ে যাওয়ার সাথে সাথে তালিকা সম্পাদনের জন্য প্রয়োজনীয় সময়টি কয়েক মিনিট, ঘন্টা বা এমনকি কয়েক দিন পর্যন্ত বাড়তে পারে। দীর্ঘ ফাইলের নামগুলি খুব একই রকম হয় - কেবলমাত্র কয়েকটি শেষ অক্ষরে ভিন্ন ering
SHA1 চেকসামের নামযুক্ত ফাইলগুলির সাথে, এটি বিপর্যয় এবং অস্বাভাবিক কার্যকারিতার রেসিপি হতে পারে।
(এবং এনটিএফএস 1.2 - সাধারণভাবে 1995 প্রথম দিকে 2000 হত) যদিও উপরে উইন্ডোজ এনটি 3.5 থেকে একটি কারিগরি নোট থেকে এই যেমন জিনিষ দেখা যায় দ্বারা EXT3 সঙ্গে ফাইলসিস্টেম লিঙ্ক তালিকা হচ্ছে বাস্তবায়নের প্রয়োজন হে (ঢ) লুকআপ । এমনকি বি-ট্রি পরিবর্তনের সাথেও:
যদিও এইচটি্রি অ্যালগরিদম লুকের সময়গুলিতে উল্লেখযোগ্যভাবে উন্নতি করেছে, এটি ওয়ার্ক লোডগুলির জন্য কিছু কার্য সম্পাদনের জন্য চাপ সৃষ্টি করতে পারে যা একটি বিশাল ডিরেক্টরিতে সমস্ত ফাইলের কিছু অপারেশন করতে readdir () ব্যবহার করে।
...
ড্যানিয়েল ফিলিপস এবং আন্দ্রেস ডিলগার দ্বারা প্রস্তাবিত এই পারফরম্যান্স ইস্যুটি প্রশমিত করার একটি সম্ভাব্য সমাধান, তবে এখনও বাস্তবায়িত হয়নি, এর মধ্যে কর্নেলটি ফ্রি ইনোডগুলি বেছে নিচ্ছে যার ইনোড সংখ্যা এমন একটি সম্পত্তির সাথে মিলবে যা তাদের ফাইলের নাম হ্যাশ দ্বারা ইনোডগুলিকে ভাগ করে দেয়। ড্যানিয়েল এবং আন্দ্রেস ডিরেক্টরি আকারের উপর ভিত্তি করে বিভিন্ন ইনোড থেকে ইনোড বরাদ্দ করার পরামর্শ দেয় এবং তারপরে ফাইলের নাম হ্যাশের উপর ভিত্তি করে সেই পরিসর থেকে একটি নিখরচায় ইনড বেছে নেওয়ার পরামর্শ দেয়। এটি তত্ত্বগতভাবে ডিরেক্টরিটিতে রেডডির অর্ডারে রেফারেন্সড ইনোডগুলি অ্যাক্সেস করার সময় ফলাফল ছিটানোর পরিমাণ হ্রাস করতে হবে। এতে এটি স্পষ্ট নয় যে এই কৌশলটির ফলে দ্রুতগতির ফলাফল হবে; প্রকৃতপক্ষে এটি সামগ্রিকভাবে ইনোড ব্লকের সংখ্যা বাড়িয়ে তুলতে পারে যা রেফারেন্স করতে হতে পারে, এবং এভাবে রিডডির () + স্ট্যাট () কাজের চাপকে আরও খারাপ করতে পারে। পরিষ্কারভাবে,
ঘটনাচক্রে, পারফরম্যান্সের উন্নতি করার জন্য এই বিটটি ২০০৫ সাল থেকে একই বছর গিটটি প্রকাশ করা হয়েছিল।
যেমন ফায়ারফক্স এবং আরও অনেক অ্যাপ্লিকেশনের সাথে দেখা গেছে যেগুলিতে প্রচুর হ্যাশ ক্যাশেড ফাইল রয়েছে, বাইট দ্বারা ক্যাশে বিভক্ত করার নকশা। এটির नगण্য পারফরম্যান্স ব্যয় রয়েছে এবং যখন সিস্টেমগুলি ক্রস প্ল্যাটফর্মের সাথে ব্যবহার করা হবে যা পুরানো দিকে কিছুটা হতে পারে তখন প্রোগ্রামের কাজ করা বা না করার মধ্যে পার্থক্য খুব ভাল হতে পারে।