একটি আধুনিক ফাইল সিস্টেমে কয়েক মিলিয়ন ফাইলের পারফরম্যান্সের কী কী প্রভাব রয়েছে?


30

ধরা যাক আমরা প্রায় 3 এম ফাইল (গড়ে 750 কেবি আকারের) হোস্ট করতে আমরা ext4 (dir_index সক্ষম সহ) ব্যবহার করছি এবং আমরা কী ফোল্ডার প্রকল্প ব্যবহার করতে যাচ্ছি তা আমাদের সিদ্ধান্ত নিতে হবে।

ইন প্রথম সমাধান , আমরা ফাইলের একটি হ্যাশ ফাংশন প্রয়োগ এবং (হচ্ছে 1 প্রথম স্তরের জন্য চরিত্র ও দ্বিতীয় স্তর 2 অক্ষর) ফোল্ডারের দুই স্তর ব্যবহার করুন: তাই হচ্ছে filex.forহ্যাশ সাথে অন্যান্যকে সমতুল্য স্থির abcde1234 , আমরা এটা চালু / পাথ সংরক্ষণ করব / এ / বিসি / অ্যাবসিডি 1234-filex.for।

ইন দ্বিতীয় সমাধান , আমরা ফাইলের একটি হ্যাশ ফাংশন প্রয়োগ এবং দুই স্তরের ফোল্ডারে (হচ্ছে প্রথম স্তরের জন্য 2 অক্ষর এবং দ্বিতীয় স্তর 2 অক্ষর) ব্যবহার করুন: তাই হচ্ছে filex.forহ্যাশ সাথে অন্যান্যকে সমতুল্য স্থির abcde1234 , আমরা এটা চালু / সংরক্ষণ করব পাথ / ab / de /abcde1234-filex.for।

প্রথম সমাধানের জন্য আমাদের ফোল্ডারে প্রতি গড়ে 732 ফাইল (শেষ ফোল্ডার, যেখানে ফাইলটি থাকবে /path/[16 folders]/[256 folders]with) সহ নিম্নলিখিত স্কিমটি থাকবে।

দ্বিতীয় সমাধান আমরা করতে হবে /path/[256 folders]/[256 folders]একটি সঙ্গে ফোল্ডারের প্রতি 45 ফাইলের গড়

বিবেচনা করে আমরা এই স্কিমটি থেকে অনেকগুলি ( আনলিঙ্ক / ফাইলগুলি পড়তে ( তবে বেশিরভাগই পড়া ) পড়তে যাচ্ছি (মূলত এনজিন্স ক্যাচিং সিস্টেম), এটি যদি কোনও এক বা অন্য সমাধান চয়ন করে তবে পারফরম্যান্সের অর্থে এটি কী মেটে?

এছাড়াও, এই সেটআপটি পরীক্ষা / পরীক্ষার জন্য আমরা কী কী সরঞ্জামগুলি ব্যবহার করতে পারি?


7
স্পষ্টতই বেঞ্চমার্কিং সাহায্য করবে। তবে ext4 এর জন্য ভুল ফাইল সিস্টেম হতে পারে। আমি এক্সএফএসের দিকে তাকিয়ে থাকব।
ew white

4
আমি কেবল এক্সএফএসের দিকে তাকাই না , আমি তত্ক্ষণাত এটিকে আরও অ্যাডো না করে ব্যবহার করব। বি + ট্রি প্রতিবার হ্যাশ টেবিলকে মারধর করে।
মাইকেল হ্যাম্পটন

টিপসের জন্য ধন্যবাদ, বেঞ্চমার্কিং যদিও খানিকটা শক্ত, আমি চেষ্টা করেছিলাম hdparm -Tt /dev/hdXতবে এটি সম্ভবত সবচেয়ে বেশি বরাদ্দ সরঞ্জাম নয়।
Leandro Moreira

2
না hdparmসঠিক সরঞ্জাম নয়, এটি ব্লক ডিভাইসের কাঁচা পারফরম্যান্সের পরীক্ষা এবং ফাইল সিস্টেমের পরীক্ষা নয়।
এইচবিউইজন

উত্তর:


28

ডিরেক্টরি কাঠামোর এই ধরণের তৈরির কারণটি হ'ল ফাইল-সিস্টেমগুলি অবশ্যই একটি ডিরেক্টরিতে একটি ফাইল সনাক্ত করতে পারে এবং ডিরেক্টরিটি বৃহত্তর হয় ততই ধীরে ধীরে অপারেশন হয়।

কত ধীর গতি ফাইল সিস্টেম ডিজাইনের উপর নির্ভর করে।

Ext4 ফাইল - সিস্টেম ডিরেক্টরি এন্ট্রিগুলি সঞ্চয় করতে একটি বি-ট্রি ব্যবহার করে । এই টেবিলটিতে একটি অনুসন্ধানে ও (লগ এন) সময় নেওয়ার প্রত্যাশা করা হচ্ছে , যা বেশিরভাগ সময় নিখরচায় লিনিয়ার টেবিলের চেয়ে কম যা ext3 এবং পূর্ববর্তী ফাইল সিস্টেমগুলি ব্যবহৃত হয় (এবং যখন এটি না হয়, ডিরেক্টরিটি এটির জন্য খুব ছোট সত্যিই ব্যাপার).

এক্সএফএস ফাইল সিস্টেম পরিবর্তে একটি বি + ট্রি ব্যবহার করে। একটি হ্যাশ টেবিল বা বি-গাছ উপর এই সুবিধা কোনো নোড একাধিক সন্তান থাকে যে পারে , যেখানে XFS দ্বারা মধ্যে এবং এই সংখ্যা তারিখ সীমার বাইরে হতে পারে; তারতম্য এবং 254 (অথবা রুট নোড জন্য 19 হিসাবে উচ্চ হিসাবে হতে পারে )। এটি আপনাকে ও (লগ বি এন) এর একটি সময়ের জটিলতা দেয় , একটি বিশাল উন্নতি।

এই ফাইল সিস্টেমগুলির মধ্যেই কোনও একক ডিরেক্টরিতে কয়েক হাজার ফাইল পরিচালনা করতে পারে, একই সংখ্যায় ইনোডযুক্ত ডিরেক্টরিতে এক্সএফএস এক্সট্রোলের চেয়ে উল্লেখযোগ্যভাবে দ্রুত হয়। তবে আপনি সম্ভবত 3 এম ইনোড সহ একটি ডিরেক্টরি চাইবেন না, এমনকি একটি বি + গাছের সাথে দেখতে কিছুটা সময় নিতে পারে। এটি প্রথম স্থানে এই পদ্ধতিতে ডিরেক্টরি তৈরি করতে পরিচালিত করে।

আপনার প্রস্তাবিত কাঠামোর কথা হিসাবে, আপনি যে প্রথম বিকল্পটি দিয়েছেন সেটি হ'ল এনগিনেক্স উদাহরণগুলিতে। এটি উভয় ফাইল সিস্টেমে ভাল পারফর্ম করবে, যদিও এক্সএফএসের এখনও কিছুটা সুবিধা থাকবে। দ্বিতীয় বিকল্পটি কিছুটা ভাল বা কিছুটা খারাপ সম্পাদন করতে পারে তবে এটি সম্ভবত খুব কাছের হবে এমনকি এমনকি বেঞ্চমার্কেও।


এবং এক্সএফএস বা এক্সট 4 এর জন্য, আপনি ফাইল সিস্টেমটি যে হার্ডওয়্যারের উপরে রেখেছেন তার কার্যকারিতাটিতে বিশাল প্রভাব পড়বে। একটি ধীর 5400-আরপিএম সাটা ড্রাইভ প্রায় 50 টি এলোমেলো আইও অপারেশন / সেকেন্ড করতে পারে, একটি ভাল 15,000-আরপিএম এসএএস ড্রাইভ কয়েকশ করতে পারে, এবং একটি এসএসডি সম্ভবত ব্যান্ডউইথ-সীমাবদ্ধ হবে এবং কয়েক মিলিয়ন এলোমেলো আইও অপারেশন / সেকেন্ড পেতে পারে যদি না আরও।
অ্যান্ড্রু হেনেল

1
কড়া কথায় বলতে গেলে fixed ও (\ লগ_বি এন) fixed স্থির $ বি $ এর জন্য complex ও (\ লগ এন) as এর মতো একই জটিলতা $ তবে ওপি-র কাছে, আসল ধ্রুবকগুলি বিষয়টি বিবেচনা করবে।
হেগেন ভন ইটজেন

আমার ফাইল সিস্টেমে কোনও সমস্যা না হলে ext4 একক ডিরেক্টরিতে 10,000 টি ফাইল পরিচালনা করতে পারে না। ls -lডিরেক্টরিটি যদি ইনড ক্যাশে থেকে সরে যায় তবে সাধারণ কাজটি করতে পুরো মিনিট সময় লাগে। এবং যখন এটি ক্যাশে করা হয়, তখনও এটি এক সেকেন্ড সময় নেয়। এটি মোটামুটি কম ট্র্যাফিক ওয়েব সার্ভারে টন র‌্যাম সহ একটি এসএসডি এবং একটি জিওনের সাথে রয়েছে।
অভি বেকার্ট

@ অভিবেকার্ট এটি কি ext3 থেকে আপগ্রেড করা হয়েছিল? যদি তা হয় তবে একটি নতুন ডিরেক্টরি তৈরি করার চেষ্টা করুন এবং এতে ফাইলগুলি সরান।
মাইকেল হ্যাম্পটন

@ হ্যাম্পটন নং এটি আধুনিক হার্ডওয়্যারটিতে সম্প্রতি একটি (মোটামুটি) সার্ভার সেটআপ করেছে। আমি কয়েক মাস ধরে আমাদের সিসাদমিন / ডেটা সেন্টারের সাথে এই বিষয়ে কাজ করছি। আমরা সার্ভারটি ইজারা দেওয়ার জন্য মাসে হাজার হাজার ডলার দিচ্ছি এবং এটি গ্রহণযোগ্য পারফরম্যান্স পাচ্ছি না। দেখে মনে হচ্ছে একমাত্র বিকল্পটি একটি নতুন ডিরেক্টরি কাঠামোয় স্থানান্তরিত করা - সম্ভবত ফাইলের নামগুলির জন্য তারিখের পরিবর্তে হ্যাশ ব্যবহার করে এটি আরও সমানভাবে ছড়িয়ে দেওয়া।
অভি বেকার্ট

5

আমার অভিজ্ঞতায়, স্কেলিংয়ের একটি কারণ হ্যাশ-নাম পার্টিশন কৌশল হিসাবে দেওয়া ইনোডগুলির আকার।

আপনার প্রস্তাবিত উভয় বিকল্প প্রতিটি তৈরি ফাইলের জন্য তিনটি পর্যন্ত ইনোড এন্ট্রি তৈরি করে। এছাড়াও, 732 টি ফাইল একটি ইনোড তৈরি করবে যা এখনও সাধারণ 16KB এর চেয়ে কম। আমার কাছে, এর অর্থ উভয় বিকল্প একই কাজ করবে।

আমি আপনার সংক্ষিপ্ত হ্যাশ আপনাকে প্রশংসা করি; পূর্ববর্তী সিস্টেমগুলি যেগুলিতে আমি কাজ করেছি তারা প্রদত্ত ফাইলটির sha1sum গ্রহণ করেছে এবং সেই স্ট্রিংয়ের উপর ভিত্তি করে বিভক্ত ডিরেক্টরিগুলি তৈরি করা হয়েছে, একটি আরও শক্ত সমস্যা।


1
SHA1 এর অঙ্কগুলি (এবং অন্যান্য, দীর্ঘতর হ্যাশ স্যামস) "কী আরও কঠিন সমস্যা" ব্যবহার করে? হ্যাঁ, এটি মানুষের ব্যবহারকারীর পক্ষে অতিরঞ্জিত তবে এটি ওএস, ফাইল সিস্টেম এবং অন্যান্য প্রোগ্রামগুলির মতো।
kbolino

4

অবশ্যই উভয় বিকল্পই কোনও ডিরেক্টরিতে ফাইলের সংখ্যা হ্রাস করতে সহায়তা করবে যা xfs বা ext4 বা যে কোনও ফাইল সিস্টেমের জন্য যুক্তিসঙ্গত বলে মনে হয়। এটি সুস্পষ্ট নয় যেটি আরও ভাল, এটি পরীক্ষা করে পরীক্ষা করে দেখতে হবে।

আপনার অ্যাপ্লিকেশনটির সাথে বেঞ্চমার্ক আসল কাজের চাপের মতো কিছু সিমুলেট করা আদর্শ। অন্যথায়, এমন কিছু জিনিস নিয়ে আসুন যা বিশেষত অনেকগুলি ছোট ফাইলের অনুকরণ করে। এর কথা বলতে গিয়ে এখানে একটি ওপেন সোর্স যাকে ছোট্ট ফাইল বলা হয় । এর ডকুমেন্টেশনটি অন্যান্য কিছু সরঞ্জামের উল্লেখ করে।

hdparmটেকসই I / O করা ততটা কার্যকর নয়। এটি অনেকগুলি ছোট ছোট আই / ওস বা অনেকগুলি ফাইলের সাথে যুক্ত দৈত্য ডিরেক্টরি এন্ট্রিগুলি দেখায় না।


1

বিষয়গুলির মধ্যে একটি হ'ল ফোল্ডারটি স্ক্যান করার উপায়।

জাভা পদ্ধতিটি কল্পনা করুন যা ফোল্ডারে স্ক্যান চালায়।

এটিতে প্রচুর পরিমাণে মেমরি বরাদ্দ করতে হবে এবং অল্প সময়ের মধ্যে এটি ডিএলোকট করতে হবে যা জেভিএমের পক্ষে খুব ভারী।

সর্বোত্তম উপায় হ'ল ফোল্ডারটির কাঠামোটি প্রতিটি ফাইল যেমন ডেডিকেটেড ফোল্ডারে থাকে যেমন বছর / মাস / দিন arrange

যেভাবে পূর্ণ স্ক্যানটি করা হয় তা হ'ল প্রতিটি ফোল্ডারের জন্য ফাংশনটির একটি রান রয়েছে যাতে জেভিএম ফাংশনটি থেকে প্রস্থান করবে, র‍্যামটি ডিলেট করবে এবং এটি আবার অন্য ফোল্ডারে চালাবে।

এটি কেবল উদাহরণস্বরূপ তবে যাইহোক এইরকম বিশাল ফোল্ডার থাকা কোনও অর্থহীন নয়।


2
আপনি জাভা ধরে নিচ্ছেন এবং ফোল্ডারটি স্ক্যান করছেন। প্রশ্নটিও উল্লেখ করা হয়নি, এবং জাভাতে ফোল্ডারটি স্ক্যান করার পাশাপাশি প্রক্রিয়া করার অন্যান্য উপায়ও রয়েছে।
ব্যবহারকারী 207421

1

আমি একই সমস্যা হয়েছে। Ext4- এ একটি উবুন্টু সার্ভারে কয়েক মিলিয়ন ফাইল সঞ্চয় করার চেষ্টা করা হচ্ছে। আমার নিজের বেঞ্চমার্ক চালানো শেষ। খুঁজে পেয়েছি যে ফ্ল্যাট ডিরেক্টরিটি ব্যবহারের উপায় সহজ হওয়ার সময় আরও ভালতর কার্য সম্পাদন করে:

উচ্চতার চিহ্ন

একটি নিবন্ধ লিখেছিলেন ।


এটি অবশ্যই প্রত্যাশিত ফলাফল নয়। আপনি এটির সাথে যাওয়ার আগে বা এটির প্রস্তাব দেওয়ার আগে আপনাকে কেন এই অপ্রত্যাশিত ফলাফলটি পাওয়া গেল তার আরও গভীর হওয়া উচিত।
মাইকেল হ্যাম্পটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.