একটি ডিরেক্টরিতে আমি কতগুলি ফাইল রাখতে পারি?


561

আমি একক ডিরেক্টরিতে কতগুলি ফাইল রেখেছি তাতে কী আসে যায়? যদি তা হয় তবে কোনও ডিরেক্টরিতে কতগুলি ফাইল রয়েছে এবং খুব বেশি ফাইল থাকার ফলে কী প্রভাব পড়ে? (এটি একটি লিনাক্স সার্ভারে রয়েছে))

পটভূমি: আমার একটি ফটো অ্যালবাম ওয়েবসাইট রয়েছে এবং আপলোড হওয়া প্রতিটি চিত্রের নাম পরিবর্তন করে একটি 8-হেক্স-ডিজিটের আইডিতে (বলুন, a58f375c.jpg)। এটি ফাইলের নাম বিরোধগুলি এড়ানোর জন্য (উদাহরণস্বরূপ, "IMG0001.JPG" ফাইল প্রচুর আপলোড করা থাকলে)। মূল ফাইলের নাম এবং কোনও দরকারী মেটাডেটা একটি ডাটাবেসে সংরক্ষণ করা হয়। এখনই, আমার কাছে কোথাও প্রায় 1500 ফাইল ইমেজ ডিরেক্টরিতে রয়েছে। এটি ডিরেক্টরিতে ফাইলগুলির তালিকা তৈরি করতে (এফটিপি বা এসএসএইচ ক্লায়েন্টের মাধ্যমে) কয়েক সেকেন্ড সময় নেয়। তবে আমি দেখতে পাচ্ছি না যে এর বাইরে এর কোনও প্রভাব আছে। বিশেষত, ব্যবহারকারীর কাছে কোনও চিত্র ফাইল কত তাড়াতাড়ি পরিবেশন করা হয়েছে তাতে কোনও প্রভাব আছে বলে মনে হয় না।

আমি 16 টি সাব-ডাইরেক্টরি: 0-9 এবং আফিম করে চিত্রের সংখ্যা হ্রাস করার বিষয়ে চিন্তা করেছি। তারপরে আমি ফাইলনামের প্রথম হেক্স সংখ্যাটি কী ছিল তার উপর ভিত্তি করে চিত্রগুলি উপ-ডিরেক্টরিতে সরাতে চাই। তবে আমি নিশ্চিত নই যে এফটিপি / এসএসএইচ-এর মাধ্যমে মাঝে মাঝে ডিরেক্টরিটি তালিকাভুক্ত করা ছাড়া এটি করার কোনও কারণ আছে।

উত্তর:


736

FAT32 :

  • ফাইলের সর্বাধিক সংখ্যা: 268,173,300
  • ডিরেক্টরি প্রতি ফাইলের সর্বাধিক সংখ্যা: 2 16  - 1 (65,535)
  • সর্বাধিক ফাইলের আকার: 2 জিআইবি - 1 এলএফএসবিহীন , 4 জিআইবি - 1 সহ

এনটিএফএস :

  • ফাইলের সর্বাধিক সংখ্যা: 2 32  - 1 (4,294,967,295)
  • ফাইলের সর্বোচ্চ আকার
    • বাস্তবায়ন: 2 44  - 2 6 বাইট (16 টিবি - 64 কিবি)
    • তাত্ত্বিক: 2 64  - 2 6 বাইট (16 ইআইবি - 64 কিবি)
  • সর্বাধিক পরিমাণের আকার
    • বাস্তবায়ন: 2 32  - 1 ক্লাস্টার (256 টিআইবি - 64 কিবি)
    • তাত্ত্বিক: 2 64  - 1 টি গুচ্ছ (1 YiB - 64 কিবি)

ext2 :

  • ফাইলের সর্বাধিক সংখ্যা: 10 18
  • ডিরেক্টরি প্রতি ফাইলের সর্বাধিক সংখ্যা: ~ 1.3 × 10 20 (পারফরম্যান্সের 10,000 টি অতীত)
  • ফাইলের সর্বোচ্চ আকার
    • 16 জিআইবি (1 কিবি ব্লকের আকার)
    • 256 জিআইবি (2 কিবি ব্লকের আকার)
    • 2 টিবি (4 কিবি ব্লকের আকার)
    • 2 টিবি (8 কিবি ব্লকের আকার)
  • সর্বাধিক পরিমাণের আকার
    • 4 টিবি (1 কিবি ব্লকের আকার)
    • 8 টিবি (2 কিবি ব্লকের আকার)
    • 16 টিবি (4 কিবি ব্লকের আকার)
    • 32 টিবি (8 কিবি ব্লকের আকার)

ext3 :

  • ফাইলের সর্বাধিক সংখ্যা: ন্যূনতম (ভলিউমসাইজ / 2 13 , নাম্বার ব্লক)
  • সর্বাধিক ফাইলের আকার: ext2 এর সমান
  • সর্বাধিক ভলিউম আকার: ext2 হিসাবে একই

ext4 :

  • ফাইলের সর্বাধিক সংখ্যা: 2 32  - 1 (4,294,967,295)
  • ডিরেক্টরি প্রতি ফাইলের সর্বাধিক সংখ্যা: সীমাহীন
  • সর্বাধিক ফাইলের আকার: 2 44  - 1 বাইট (16 টিআইবি - 1)
  • সর্বাধিক পরিমাণের আকার: 2 48  - 1 বাইট (256 টিআইবি - 1)

24
আমি ধরে নিই যে এটি সম্পূর্ণ পার্টিশনের জন্য ফাইলের সর্বাধিক সংখ্যা, কোনও ডিরেক্টরি নয়। সুতরাং, সমস্যা সম্পর্কিত এই তথ্য খুব কার্যকর নয়, কারণ পদ্ধতিটি নির্বিশেষে এখানে সমান সংখ্যক ফাইল থাকত (যদি না আপনি ডিরেক্টরিগুলি ফাইল হিসাবে গণনা করেন)।
স্ট্রেগার

19
যেহেতু আমরা এখন ২০১২ সালে আছি, আমার মনে হয় এটির সময়টি পরিষ্কার করার জন্য যে ext4 এর উপ-ডিরেক্টরিগুলির সংখ্যা সম্পর্কে কোনও সীমা নেই। এছাড়াও সর্বোচ্চ ফাইলাইজ 16 টিবিতে বেড়েছে। তদুপরি, ফাইল সিস্টেমের সামগ্রিক আকার 1 ইবি = 1,048,576 টিবি পর্যন্ত হতে পারে।
devsnd

7
স্পষ্টতই, ext3 এর জন্য ডিরেক্টরি প্রতি 60,000 ফাইলের (বা ডিরেক্টরি বা লিঙ্ক) সীমাবদ্ধতা রয়েছে। আমি এই সম্পর্কে কঠিন উপায় খুঁজে পেয়েছি।
স্ট্যাকুলার

8
পুরানো উত্তর, আমি জানি ... তবে আপনি যখন লিখবেন EXT4 - ফাইলের সর্বাধিক সংখ্যা: 2³² - 1 (4,294,967,295) এবং প্রতি ডিরেক্টরি প্রতি ফাইলের সর্বাধিক সংখ্যা: সীমাহীন আপনি আমাকে সত্যিই বিভ্রান্ত করেছেন কারণ 2³² - 1! = "সীমাহীন"। আমার ধারণা এখন আমার একটি কফি লাগবে। ;) তবুও +1

10
হার্ড ফাইল সিস্টেমের সীমা এই প্রশ্নের উত্তর দেয় না " আমি একক ডিরেক্টরিতে
কয়টি

191

আমার একক এক্সট্রাক্ট ডিরেক্টরিতে 8 মিলিয়নেরও বেশি ফাইল রয়েছে। libc readdir()যা দ্বারা ব্যবহৃত হয় find, lsএবং এই থ্রেডে আলোচিত অন্যান্য বেশিরভাগ পদ্ধতির মধ্যে বড় ডিরেক্টরিগুলি তালিকাভুক্ত করা হয়।

এই ক্ষেত্রে কারণ lsএবং findধীর গতি হ'ল readdir()কেবল একবারে ডিরেক্টরিতে 32K টি পড়েন, সুতরাং স্লো ডিস্কগুলিতে ডিরেক্টরিকে তালিকাবদ্ধ করতে অনেকগুলি পাঠের প্রয়োজন হবে। এই গতি সমস্যার একটি সমাধান আছে। আমি এ সম্পর্কে একটি সুন্দর বিস্তারিত নিবন্ধ লিখেছি: http://www.olark.com/spw/2011/08/you-can-list-a-directory-with-8-million-files-but-not-with- ম /

মুছে ফেলা কীটি হ'ল: getdents()সরাসরি ব্যবহার করুন - লিবিবির ভিত্তিতে যে কোনও কিছু না করে সরাসরি ব্যবহার করুন - readdir()আপনি বাফারটি নির্দিষ্ট করতে পারেন মাপ যখন ডিস্ক থেকে ডিরেক্টরি এন্ট্রি পড়া।


6
মজাদার পড়া! আমি কি জিজ্ঞাসা করতে পারি যে আপনার এক ডিরেক্টরিতে 8 মিলিয়ন ফাইল রয়েছে? হা হা
Aᴄʜᴇʀᴏɴғᴀɪʟ

আমারও ছিল। আমি একটি টেবিলের ব্লব কলামটি স্থানান্তরিত করেছি, প্রতিটি ব্লব কলাম আমি ফাইল হিসাবে রফতানি করেছি। এটা তোলে প্রায় 8 মিলিয়ন ফাইল :) এর
স্পাইক

65

এটিতে 88,914 ফাইল সহ আমার একটি ডিরেক্টরি রয়েছে। নিজের মতো এটি থাম্বনেইলস সংরক্ষণ এবং লিনাক্স সার্ভারে ব্যবহার করা হয়।

এফটিপি বা পিএইচপি ফাংশনের মাধ্যমে তালিকাভুক্ত ফাইলগুলি হ্যাঁ হ্যাঁ, তবে ফাইলটি প্রদর্শন করার ক্ষেত্রে একটি কার্যকারিতাও রয়েছে। উদাহরণস্বরূপ www.website.com/thumbdir/gh3hg4h2b4h234b3h2.jpg এর অপেক্ষার সময় রয়েছে 200-400 এমএস। অন্য একটি সাইটের তুলনা হিসাবে আমার কাছে প্রায় 100 টি ডিরেক্টরিতে একটি ডিরেক্টরি রয়েছে যা কেবল 40 ডলারের অপেক্ষার পরে চিত্রটি প্রদর্শিত হয়।

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


6
এটিই একমাত্র দরকারী উত্তর। আমরা একই অভিজ্ঞতা করেছি। ব্যাকআপ নিয়ে সমস্যা কমাতে আমাদের সীমাটি 1.000 ফাইল (খুব বেশি ডিরেক্টরি ডিরেক্টরিও ধীর হয়ে যায়)।
মিগডুট

1
নোয়াটেমের সাথে একটি ড্রাইভ মাউন্ট করতেও এটি কার্যকর হতে পারে: হাওটফোরজ.com/… এবং এটিও পড়ুন: সার্ভারসফল্ট
প্রশ্নগুলি

2
এটি এতটা ধীর হয়ে যায় এমন কোন ফাইল সিস্টেম আপনি ব্যবহার করছেন? উদাহরণস্বরূপ, এক্সএফএসের কোনও ডিরেক্টরিতে লক্ষণীয় ধীরগতি ছাড়াই সহজেই একটি ডিরেক্টরিতে 100,000 ফাইল পরিচালনা করতে সক্ষম হওয়া উচিত।
এথান

1
অন্য বেশিরভাগের মতামতের বিরোধিতা করে আমি এই উত্তরটি নিশ্চিত করতে চাই। আমাদের সামাজিক নেটওয়ার্ক ওয়েবসাইটে আমাদের কয়েক লক্ষ ইমেজ রয়েছে। কর্মক্ষমতা উন্নত করার জন্য আমাদের 100 টি (বা কিছু ফাইলের জন্য 1000) উপ ডিরেক্টরি থাকতে বাধ্য করা হয়েছিল এবং তাদের মধ্যে ফাইলগুলি বিতরণ করতে হয়েছিল (আমাদের জন্য লিনাক্স + অ্যাপাচি এ ext3)।
wmac

57

এটি লিনাক্স সার্ভারে ব্যবহৃত নির্দিষ্ট ফাইল সিস্টেমের উপর কিছুটা নির্ভর করে। আজকাল ডিফল্টটি dir_index এর সাথে ext3, যা বড় ডিরেক্টরিগুলি অনুসন্ধান করা খুব দ্রুত করে।

গতি কোনও সমস্যা হওয়া উচিত নয়, আপনি ইতিমধ্যে উল্লিখিত একটিকে বাদ দিয়ে যা তালিকায় আরও বেশি সময় লাগবে।

একটি ডিরেক্টরিতে ফাইলের মোট সংখ্যার সীমা রয়েছে। আমি মনে করি এটি অবশ্যই 3232 টি ফাইল পর্যন্ত কাজ করছে।


4
জিনোম এবং কে-ডি-কে বড় বড় ডিরেক্টরিকে শামুকের গতিতে লোড করে, উইন্ডোজ ডিরেক্টরিটি ক্যাশে করবে যাতে এটি যুক্তিসঙ্গত হয়। আমি লিনাক্স পছন্দ করি, তবে কেডি এবং জিনোম ভাল লেখা হয় না।
দাড়কাক

1
এবং ext4 টি ডিফল্টরূপে dir_index এর সমতুল্য বলে মনে হচ্ছে।
অধ্যাপক ফ্যালকেন চুক্তি

22
Ext3 এ একটি ডিরেক্টরিতে প্রায় 32K সাব - ডিরেক্টরিগুলির সীমা রয়েছে , তবে ওপি চিত্র ফাইলগুলির বিষয়ে কথা বলছে। দির সূচক সক্ষম হওয়া কোনও এক্সট্রোল ফাইল সিস্টেমে ফাইলগুলির (ব্যবহারিক?) সীমা নেই।
পিটার এন লুইস

1
এই উত্তরটি পুরানো, আজকাল ডিফল্টটি ext4 হয়
বরিস

1
"দির ইনডেক্স সক্ষম হওয়া এক্সট্রোনাল ফাইল সিস্টেমে ফাইলগুলির (ব্যবহারিক?) সীমা নেই" - আমি সক্রিয় থাকা 4TB এক্সট 4 ফাইল সিস্টেমের একটি ডিরেক্টরিতে ফাইল স্পেসের বাইরে চলে এসেছি dir_index। ডিরেক্টরিটিতে আমার প্রায় 17 মিলিয়ন ফাইল ছিল। উত্তরটি large_dirটিউন 2 এফ চালু করা ছিল ।
lunixbochs

49

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

-shell-3.00$ ls A*
-shell: /bin/ls: Argument list too long

অথবা

-shell-3.00$ chmod 644 *jpg
-shell: /bin/chmod: Argument list too long

33
@ স্টিভ, এই ক্ষেত্রেগুলির জন্য অনুসন্ধান (1) এবং / অথবা xargs (1) ব্যবহার করুন। একই কারণে কমান্ড লাইন প্রসারণের পরিবর্তে স্ক্রিপ্টগুলিতে এই জাতীয় সরঞ্জামগুলি ব্যবহার করা ভাল ধারণা।
ডেভ সি

3
@ স্টিভ আপনি কি কোনও ফোল্ডারে ফাইলের সংখ্যা বাড়লে কর্মক্ষমতা কমতে দেখছেন? নাকি কোনও সম্পর্ক নেই?
পেসিয়ার 16

6
এটি একটি ভাল পয়েন্ট তবে নীটপিকের জন্য, প্রদত্ত কারণটি ভুল। আর্গুমেন্ট তালিকার অত্যন্ত দীর্ঘ শেলের এসবের মাঝেই সীমাবদ্ধ না, কিন্তু সিস্টেমের এর execবাস্তবায়ন। শেলটি সাধারণত ওয়াইল্ডকার্ডকে ঠিক সূক্ষ্মভাবে প্রসারিত করতে পারে - execত্রুটিটি ফিরিয়ে দেয় এমন অনেক যুক্তি দিয়ে এটি কল ।
jw013

গত রাতেই আমার একই ত্রুটি হয়েছিল (ফেডোরা 15) একটি ডিরেক্টরিতে প্রায় 400,000 ডলার ফাইল সহ "আরএম" (সামফাইলস *) দিয়ে। আমি পুরানো ফাইলগুলিকে "ফাইন্ড" দিয়ে ট্রিম করতে সক্ষম করেছিলাম যেখানে একটি ওয়াইল্ডকার্ডের সাহায্যে আমি "আরএম" করতে পারি।
পিজে ব্রুনেট

১০,০০০.000 ফাইলগুলিতে একটি ডিরেক্টরিতে ফাইলগুলি সূক্ষ্মভাবে কাজ করে। অ্যাক্সেস করার সময় কোনও পারফরম্যান্স হিট হয় না। বরং ওয়াইল্ডকার্ড দিয়ে ধীর করুন। ফাইলের নামগুলি বাছাই করতে পছন্দ করে এমন শেল প্রোগ্রামগুলি ব্যবহার করার সময় সাবধান! :)
সাইমন রিগেট

25

আমি এখনই একই ধরণের সমস্যা নিয়ে কাজ করছি। আমাদের একটি হায়ারারচিচাল ডিরেক্টরি কাঠামো রয়েছে এবং ফাইলের নাম হিসাবে চিত্র আইডির ব্যবহার। উদাহরণস্বরূপ, সহ একটি চিত্র id=1234567স্থাপন করা হয়েছে

..../45/67/1234567_<...>.jpg

ফাইলটি কোথায় যায় তা নির্ধারণ করতে শেষ 4 টি সংখ্যা ব্যবহার করে।

কয়েক হাজার চিত্র সহ, আপনি এক-স্তরের শ্রেণিবিন্যাস ব্যবহার করতে পারেন। আমাদের সিসাদমিন দক্ষতা / ব্যাকআপ / অন্য যে কোনও কারণ মনে রেখেছিল তার জন্য কোনও প্রদত্ত ডিরেক্টরিতে (এক্সট্রি 3) কয়েক হাজার ফাইলের প্রস্তাব দেয় না।


1
এটি একটি দুর্দান্ত সমাধান। আপনি যদি 2 ডিজিটের ব্রেকডাউন দিয়ে থাকেন এবং নীচের বেশিরভাগ ডিরেক্টরিতে কেবল 1 ফাইল থাকে তবে ফাইলের নীচে আপনার ডিরেক্টরি প্রতিটি স্তরের এটিতে সর্বাধিক 100 টি এন্ট্রি থাকবে।
রবকোহর

পিএইচপি বাস্তবায়ন: stackoverflow.com/a/29707920/318765
mgutt

21

এটির মূল্যের জন্য, আমি কেবলমাত্র একটি ext4ফাইল সিস্টেমে একটি ডিরেক্টরি তৈরি করেছি যার মধ্যে এটিতে 1,000,000 ফাইল রয়েছে, তারপরে এলোমেলোভাবে একটি ওয়েব সার্ভারের মাধ্যমে এই ফাইলগুলি অ্যাক্সেস করেছি। আমি সেখানে 10 টি ফাইল থাকা (অকার্যকর) অ্যাক্সেসের কোনও প্রিমিয়াম লক্ষ্য করিনি।

এই আমূল আমার অভিজ্ঞতার উপর এই কাজ থেকে আলাদা ntfsকয়েক বছর ফিরে।


কি ধরনের ফাইল? পাঠ্য বা চিত্র? আমি
ইয়ভন হুইন

1
@ ইয়ভনহুইনহ: ফাইলের ধরণটি সম্পূর্ণ অপ্রাসঙ্গিক। তালিকা তৈরি / ফাইল ট্র্যাকিংয়ের ডিরেক্টরিতে ওভারহেড একই নির্বিশেষে is
টিজে ক্রোডার 21

14

আমি যে বৃহত্তম সমস্যার সমাধান করেছি তা হ'ল 32-বিট সিস্টেমে। একবার আপনি একটি নির্দিষ্ট নম্বর পাস করার পরে, 'ls' এর মতো সরঞ্জামগুলি কাজ করা বন্ধ করে দেয়।

এই বাধাটি পাস করার পরে সেই ডিরেক্টরিটি দিয়ে কিছু করার চেষ্টা করা একটি বিশাল সমস্যা হয়ে দাঁড়ায়।


9

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

মাপকাঠি

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


একটি সমাধানের একটি লিঙ্ক স্বাগত, তবে দয়া করে আপনার উত্তরটি কার্যকর না হওয়া নিশ্চিত করুন: লিঙ্কটির চারপাশে প্রসঙ্গটি যুক্ত করুন যাতে আপনার সহ ব্যবহারকারীদের কিছু ধারণা থাকতে পারে এটি কী এবং কেন এটি রয়েছে, তবে পৃষ্ঠার সর্বাধিক প্রাসঙ্গিক অংশটি উদ্ধৃত করুন ' লক্ষ্য পৃষ্ঠাটি অনুপলব্ধ ক্ষেত্রে লিঙ্কটি পুনরায় সংযুক্ত করুন। লিঙ্কের চেয়ে সামান্য বেশি উত্তরগুলি মুছতে পারে।
স্যামুয়েল লিউ

1
মজাদার. আমরা দেখতে পেলাম যে 10,000 টি ফাইলের পরেও কর্মক্ষমতাটি খুব অকেজো হয়ে যাওয়ার পর্যায়ে খুব দ্রুত হ্রাস পেয়েছে। সর্বোত্তম কর্মক্ষমতা অর্জনের জন্য আমরা প্রতিটি স্তরে প্রায় 100 টি সাব ডাইরেক্টরিগুলিতে ফাইলগুলি ভেঙে স্থির করেছিলাম। আমার ধারণা, গল্পটির নৈতিকতা সর্বদা আপনার নিজের প্রয়োজন অনুসারে আপনার নিজের সিস্টেমে এটির জন্য মাপকাঠি।
জোশুয়া পিন্টার

7

ডিরেক্টরি পার্টিশন স্কিম বাস্তবায়নের সাথে জড়িত সময়টি যদি সর্বনিম্ন হয় তবে আমি এর পক্ষে আছি। প্রথমবার আপনাকে কোনও সমস্যার ডিবাগ করতে হবে যার মধ্যে আপনি যে কনসোলটি বুঝতে পারবেন তার মাধ্যমে 10000-ফাইল ডিরেক্টরি পরিচালনা করতে জড়িত।

উদাহরণ হিসাবে, এফ-স্পট ফটো ফাইলগুলিকে YYYY \ MM \ DD \ filename.ext হিসাবে সংরক্ষণ করে, যার অর্থ আমার ~ 20000-ফটো সংগ্রহের প্রায় 800 টি ফাইলের ম্যানুয়ালি করার সময় আমার সবচেয়ে বড় ডিরেক্টরিটি ছিল। এটি তৃতীয় পক্ষের অ্যাপ্লিকেশন থেকে ফাইলগুলি আরও সহজে ব্রাউজযোগ্য করে তোলে। কখনই ধরে নিবেন না যে আপনার সফ্টওয়্যারটি একমাত্র জিনিস যা আপনার সফ্টওয়্যারটির ফাইলগুলিতে অ্যাক্সেস করবে।


6
আমি তারিখ অনুসারে বিভাজনের বিরুদ্ধে বিজ্ঞাপন দিচ্ছি কারণ বাল্ক আমদানি একটি নির্দিষ্ট তারিখে ফাইলগুলি ক্লাস্টার করতে পারে।
সর্বাধিক

একটি ভাল পয়েন্ট। একটি বিভাজন স্কিম বাছাইয়ের আগে আপনার অবশ্যই ব্যবহারের ক্ষেত্রে বিবেচনা করা উচিত। তুলনামূলকভাবে বিস্তৃত বিতরণে আমি বহু দিন ধরে ছবি আমদানি করতে পারি এবং যখন আমি এফ-স্পট তারিখের বাইরে ফটোগুলি পরিচালনা করতে চাই সেগুলি সন্ধান করার সহজতম উপায়, সুতরাং এটি আমার পক্ষে দ্বিগুণ।
স্পার 0

7

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

এমনকি যদি ফাইল সিস্টেমটি এটি সঠিকভাবে করে, তবুও প্রোগ্রামগুলির জন্য ডিরেক্টরি সামগ্রীর তালগোল পাতানো এবং একটি ও (এন ^ 2) সাজানোর জন্য এটি সম্পূর্ণরূপে সম্ভব, যাতে নিরাপদ পাশে থাকি, আমি প্রতি ফাইলের সংখ্যা সর্বদা সীমাবদ্ধ রাখি 500 এর বেশি কোনও ডিরেক্টরি নেই।


7

এটি সত্যিকারের ব্যবহৃত ফাইল সিস্টেম এবং কিছু পতাকাগুলির উপর নির্ভর করে।

উদাহরণস্বরূপ, ext3- এ হাজার হাজার ফাইল থাকতে পারে; কিন্তু কয়েক হাজার পরে, এটি খুব ধীর হয়ে যেত। সাধারণত ডিরেক্টরি তালিকাবদ্ধ করার সময়, তবে একটি একক ফাইল খোলার সময়ও। কয়েক বছর আগে, এটি 'htree' বিকল্পটি অর্জন করেছিল, যা একটি ফাইলের নাম দিয়ে ইনোড পাওয়ার জন্য প্রয়োজনীয় সময়কে নাটকীয়ভাবে হ্রাস করেছিল।

ব্যক্তিগতভাবে, আমি বেশিরভাগ স্তরকে এক হাজার বা তার বেশি আইটেমের আওতায় রাখতে সাব-ডিরেক্টরিগুলি ব্যবহার করি ories আপনার ক্ষেত্রে, আমি আইডির শেষ দুটি হেক্স অঙ্ক সহ 256 ডিরেক্টরি তৈরি করব। প্রথম এবং প্রথম সংখ্যা নয় সর্বশেষটি ব্যবহার করুন, যাতে আপনি ভারসাম্য ভারসাম্যহীন হন।


6
যদি ফাইলের নামগুলি পুরোপুরি এলোমেলো হয় তবে কোন সংখ্যাটি ব্যবহৃত হয়েছিল তা বিবেচ্য নয়।
স্ট্রেগার

প্রকৃতপক্ষে, এই ফাইলের নামগুলি এলোমেলোভাবে উত্পাদিত হয়।
কিপ

2
অথবা ফাইলের নামের SHA-1 ডাইজেস্টের প্রথম এন বাইট ব্যবহার করুন।
গাভি

6

ext3 এর আসলে ডিরেক্টরি আকার সীমা থাকে এবং তারা ফাইল সিস্টেমের ব্লক আকারের উপর নির্ভর করে। এখানে প্রতি ডিরেক্টরি ডিরেক্টরি "সর্বোচ্চ সংখ্যা" নেই, তবে প্রতি ডিরেক্টরিতে "ফাইল এন্ট্রিগুলি সঞ্চয় করতে ব্যবহৃত ব্লকের সর্বাধিক সংখ্যা"। বিশেষত, ডিরেক্টরিটির আকার নিজেই উচ্চতা 3 এর বি-গাছের ওপরে বাড়তে পারে না এবং গাছটির ফ্যানআউটটি ব্লকের আকারের উপর নির্ভর করে। কিছু বিশদ জানতে এই লিঙ্কটি দেখুন।

https://www.mail-archive.com/cwelug@googlegroups.com/msg01944.html

আমি সম্প্রতি এটি 2K ব্লকগুলির সাথে ফর্ম্যাট করা একটি ফাইল সিস্টেমে দংশিত হয়েছিল, warning: ext3_dx_add_entry: Directory index full!যখন আমি অন্য একটি এক্সট্রি ফাইল সিস্টেম থেকে অনুলিপি করার সময় অনভিজ্ঞভাবে ডিরেক্টরি-পূর্ণ কার্নেল বার্তা পাচ্ছিলাম। আমার ক্ষেত্রে, কেবল 480,000 ফাইল সহ একটি ডিরেক্টরি গন্তব্যে অনুলিপি করতে অক্ষম ছিল।


5

আপনি ফাইলগুলির সাথে কী করতে যাচ্ছেন তা প্রশ্নটি আসে।

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

এক সময়, সিস্টেম-চাপিত সীমা ছিল 32,767। এটি এখন উচ্চতর, তবে এটি বেশিরভাগ পরিস্থিতিতে বেশিরভাগ ফাইল হ্যান্ডেল করার উপায়।


5

উপরোক্ত উত্তরগুলির বেশিরভাগটি যা দেখাতে ব্যর্থ হয়েছে তা হ'ল আসল প্রশ্নের কোনও "ওয়ান সাইজ ফিটস অল" উত্তর নেই।

আজকের পরিবেশে আমাদের কাছে বিভিন্ন হার্ডওয়্যার এবং সফ্টওয়্যার একটি বৃহত সমষ্টি রয়েছে - কিছু 32 বিট, কিছু 64 বিট, কিছু প্রান্ত কাটা হয় এবং কিছু চেষ্টা করা হয় এবং সত্য - নির্ভরযোগ্য এবং কখনও পরিবর্তন হয় না। এর সাথে যুক্ত হয়েছে বিভিন্ন ধরণের পুরানো এবং নতুন হার্ডওয়্যার, পুরানো এবং নতুন ওএস, বিভিন্ন বিক্রেতারা (উইন্ডোজ, ইউনিক্স, অ্যাপল ইত্যাদি) এবং এর সাথে অগণিত ইউটিলিটি এবং সার্ভার রয়েছে। হার্ডওয়্যার যেমন উন্নত হয়েছে এবং সফ্টওয়্যারটি bit৪ বিটের সামঞ্জস্যে রূপান্তরিত হয়েছে, তত দ্রুত এই গতির এবং জটিল বিশ্বের সমস্ত অংশকে পরিবর্তনের দ্রুত গতিতে সুন্দরভাবে খেলতে পারাতে অবশ্যই যথেষ্ট বিলম্ব হয়েছে।

আইএমএইচও কোনও সমস্যা সমাধানের কোনও উপায় নেই। সমাধানটি হ'ল সম্ভাবনাগুলি অনুসন্ধান করা এবং তারপরে ট্রায়াল এবং ত্রুটি করে অনুসন্ধান করুন যা আপনার নির্দিষ্ট প্রয়োজনের জন্য সবচেয়ে ভাল কাজ করে। প্রতিটি ব্যবহারকারীর কুকি কর্তনকারী পদ্ধতির পরিবর্তে তাদের সিস্টেমে কী কাজ করে তা নির্ধারণ করতে হবে।

উদাহরণস্বরূপ আমার কাছে কয়েকটি খুব বড় ফাইল সহ একটি মিডিয়া সার্ভার রয়েছে। ফলাফলটি 3 টিবি ড্রাইভ পূরণ করে প্রায় 400 টি ফাইল। ইনোডগুলির মধ্যে কেবল 1% ব্যবহৃত হয় তবে মোট স্থানের 95% ব্যবহৃত হয়। অন্য কেউ, অনেক ছোট ফাইল যুক্ত করে ইনোডগুলি চালিয়ে যাওয়ার আগে তারা জায়গাটি পূরণের আগে চলে যেতে পারে। (Ext4 ফাইল সিস্টেমে থাম্বের নিয়ম হিসাবে, প্রতিটি ফাইল / ডিরেক্টরিতে 1 টি ইনোড ব্যবহৃত হয়)) তাত্ত্বিকভাবে কোনও ডিরেক্টরিতে থাকা ফাইলগুলির মোট সংখ্যা প্রায় অসীম হলেও বাস্তবতা নির্ধারণ করে যে সামগ্রিক ব্যবহার বাস্তবসম্মত ইউনিট নির্ধারণ করে, না শুধু ফাইল সিস্টেমের ক্ষমতা।

আমি আশা করি যে উপরে বর্ণিত সমস্ত ভিন্ন উত্তর অগ্রগতির ক্ষেত্রে একটি দুর্গম বাধা উপস্থাপন করার পরিবর্তে চিন্তাভাবনা এবং সমস্যা সমাধানের প্রচার করেছে।


4

আমার মনে আছে এমন একটি প্রোগ্রাম চালানো যা আউটপুটে প্রচুর পরিমাণে ফাইল তৈরি করে। ফাইলগুলি ডিরেক্টরি প্রতি 30000 এ বাছাই করা হয়েছিল। আমি যখন উত্পাদিত আউটপুট পুনরায় ব্যবহার করতে হয়েছিলাম তখন কোনও পড়তে সমস্যা হচ্ছে না বলে মনে নেই। এটি একটি 32-বিট উবুন্টু লিনাক্স ল্যাপটপে ছিল এবং এমনকি নটিলাস কয়েক সেকেন্ড পরেও ডিরেক্টরি বিষয়বস্তু প্রদর্শন করেছিল।

ext3 ফাইল সিস্টেম: একটি 64-বিট সিস্টেমে অনুরূপ কোড প্রতি ডিরেক্টরিতে 64000 ফাইলের সাথে ভালভাবে আচরণ করে।


4

"ফাইল সিস্টেমের উপর নির্ভর করে"
কিছু ব্যবহারকারী উল্লেখ করেছেন যে পারফরম্যান্স প্রভাব ব্যবহৃত ফাইল সিস্টেমের উপর নির্ভর করে। অবশ্যই. এক্সটি 3 এর মতো ফাইল সিস্টেমগুলি খুব ধীর হতে পারে। কিন্তু এমনকি যদি আপনি EXT4 অথবা XFS ব্যবহার বাধা দিতে পারেনা যে মাধ্যমে একটি ফোল্ডার তালিকা lsবা findবা FTP মত একটি বহিস্থিত সংযোগ মাধ্যমে একটি ধীর ধীর হয়ে যাবে।

সমাধান
আমি @armandino এর মতোই পছন্দ করি । এর জন্য আমি পিএইচপি-তে এই ছোট্ট ফাংশনটি আইডিগুলিকে কোনও ফাইলপথে রূপান্তর করতে ব্যবহার করি যা প্রতি ডিরেক্টরি প্রতি 1000 ফাইলের ফলাফল করে:

function dynamic_path($int) {
    // 1000 = 1000 files per dir
    // 10000 = 10000 files per dir
    // 2 = 100 dirs per dir
    // 3 = 1000 dirs per dir
    return implode('/', str_split(intval($int / 1000), 2)) . '/';
}

অথবা আপনি যদি আলফা-সংখ্যার অক্ষর ব্যবহার করতে চান তবে আপনি দ্বিতীয় সংস্করণটি ব্যবহার করতে পারেন:

function dynamic_path2($str) {
    // 26 alpha + 10 num + 3 special chars (._-) = 39 combinations
    // -1 = 39^2 = 1521 files per dir
    // -2 = 39^3 = 59319 files per dir (if every combination exists)
    $left = substr($str, 0, -1);
    return implode('/', str_split($left ? $left : $str[0], 2)) . '/';
}

ফলাফল:

<?php
$files = explode(',', '1.jpg,12.jpg,123.jpg,999.jpg,1000.jpg,1234.jpg,1999.jpg,2000.jpg,12345.jpg,123456.jpg,1234567.jpg,12345678.jpg,123456789.jpg');
foreach ($files as $file) {
    echo dynamic_path(basename($file, '.jpg')) . $file . PHP_EOL;
}
?>

1/1.jpg
1/12.jpg
1/123.jpg
1/999.jpg
1/1000.jpg
2/1234.jpg
2/1999.jpg
2/2000.jpg
13/12345.jpg
12/4/123456.jpg
12/35/1234567.jpg
12/34/6/12345678.jpg
12/34/57/123456789.jpg

<?php
$files = array_merge($files, explode(',', 'a.jpg,b.jpg,ab.jpg,abc.jpg,ddd.jpg,af_ff.jpg,abcd.jpg,akkk.jpg,bf.ff.jpg,abc-de.jpg,abcdef.jpg,abcdefg.jpg,abcdefgh.jpg,abcdefghi.jpg'));
foreach ($files as $file) {
    echo dynamic_path2(basename($file, '.jpg')) . $file . PHP_EOL;
}
?>

1/1.jpg
1/12.jpg
12/123.jpg
99/999.jpg
10/0/1000.jpg
12/3/1234.jpg
19/9/1999.jpg
20/0/2000.jpg
12/34/12345.jpg
12/34/5/123456.jpg
12/34/56/1234567.jpg
12/34/56/7/12345678.jpg
12/34/56/78/123456789.jpg
a/a.jpg
b/b.jpg
a/ab.jpg
ab/abc.jpg
dd/ddd.jpg
af/_f/af_ff.jpg
ab/c/abcd.jpg
ak/k/akkk.jpg
bf/.f/bf.ff.jpg
ab/c-/d/abc-de.jpg
ab/cd/e/abcdef.jpg
ab/cd/ef/abcdefg.jpg
ab/cd/ef/g/abcdefgh.jpg
ab/cd/ef/gh/abcdefghi.jpg

আপনি যেমনটি $intরূপান্তরটির জন্য দেখতে পাচ্ছেন প্রতিটি ফোল্ডারে 1000 টি ফাইল এবং 99 টি ডিরেক্টরি সহ 99 টি ডিরেক্টরি রয়েছে ...

তবে ভুলে যাবেন না যে অনেক ডিরেক্টরিতে একই কর্মক্ষমতা সমস্যার কারণ হয়!

সর্বশেষে আপনার কীভাবে ফাইলের পরিমাণ হ্রাস করা যায় সে সম্পর্কে চিন্তা করা উচিত। আপনার টার্গেটের উপর নির্ভর করে আপনি একাধিক ক্ষুদ্র চিত্র যেমন অবতার, আইকন, স্মাইল ইত্যাদি একত্রিত করতে সিএসএস স্প্রেটস ব্যবহার করতে পারেন বা আপনি যদি অনেকগুলি নন-মিডিয়া ফাইল ব্যবহার করেন তবে এগুলি JSON ফর্ম্যাটে মিশ্রণ বিবেচনা করুন। আমার ক্ষেত্রে আমার কাছে কয়েক হাজার মিনি-ক্যাশ ছিল এবং অবশেষে আমি তাদের 10 টি প্যাকগুলিতে একত্রিত করার সিদ্ধান্ত নিয়েছি।


3

আমি সম্মান করি এটি সম্পূর্ণভাবে আপনার প্রশ্নের উত্তর দেয় না যে কতগুলি অনেক বেশি, তবে দীর্ঘমেয়াদী সমস্যা সমাধানের জন্য একটি ধারণা মূল ফাইল মেটাডেটা সংরক্ষণ করার পাশাপাশি এটি কোন ফোল্ডারে ডিস্কে সঞ্চয় করা রয়েছে তাও সংরক্ষণ করুন - স্বাভাবিক করুন মেটাডাটা টুকরো টুকরো টুকরো। একবার কোনও ফোল্ডার কিছু সীমা ছাড়িয়ে গেলে আপনি পারফরম্যান্স, নান্দনিক বা যে কোনও কারণেই স্বাচ্ছন্দ্য বোধ করেন, আপনি কেবল একটি দ্বিতীয় ফোল্ডার তৈরি করেন এবং সেখানে ফাইলগুলি ফেলে দেওয়া শুরু করেন ...


3

আমি একটি অনুরূপ ইস্যু মধ্যে দৌড়ে। আমি এতে 10,000 টিরও বেশি ফাইল সহ একটি ডিরেক্টরি অ্যাক্সেস করার চেষ্টা করছিলাম। ফাইল তালিকা তৈরি করতে এবং ফাইলগুলির যে কোনও ধরণের কমান্ড চালাতে খুব বেশি সময় লেগেছিল।

আমি নিজের জন্য এটি করার জন্য একটি সামান্য পিএইচপি স্ক্রিপ্ট ভেবেছিলাম এবং ব্রাউজারে এটির সময়সীমা থেকে রোধ করার কোনও উপায় বের করার চেষ্টা করেছি।

সমস্যাটি সমাধানের জন্য নীচে আমি লিখেছি পিএইচপি স্ক্রিপ্ট।

একটি ডিরেক্টরিতে ফাইলগুলি এফটিপি-র জন্য অনেকগুলি ফাইলের তালিকাবদ্ধ করা

এটি কাউকে কীভাবে সহায়তা করে


1

কোনও উত্তর নয়, তবে কিছু পরামর্শ।

আরও উপযুক্ত এফএস (ফাইল সিস্টেম) নির্বাচন করুন। Aতিহাসিক দৃষ্টিকোণ থেকে, আপনার সমস্ত বিষয় যথেষ্ট বুদ্ধিমান ছিল, দশকের পর দশক ধরে বিকশিত এফএস-এর কেন্দ্র হয়ে উঠতে। আমি বলতে চাই আরও আধুনিক এফএস আপনার সমস্যাগুলিকে আরও ভাল সমর্থন করে। প্রথমে এফএস তালিকা থেকে আপনার চূড়ান্ত উদ্দেশ্যে ভিত্তিক একটি তুলনা সিদ্ধান্ত সারণী তৈরি করুন ।

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

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

হার্ডওয়্যার সীমা অতিক্রম করতে আপনি RAID-0 ব্যবহার করতে পারেন।


1

কোনও একক চিত্র নেই যা "খুব বেশি", যতক্ষণ না এটি ওএসের সীমা অতিক্রম না করে। যাইহোক, কোনও ডিরেক্টরিতে ওএস নির্বিশেষে আরও ফাইলগুলি যে কোনও পৃথক ফাইল অ্যাক্সেস করতে তার বেশি সময় নেয় এবং বেশিরভাগ ওএস-এর ক্ষেত্রে, কর্মক্ষমতা অ-রৈখিক হয়, সুতরাং 10,000 এর মধ্যে একটি ফাইল খুঁজে পেতে 10 গুণ বেশি সময় লাগে তারপরে 1000 এ ফাইল সন্ধান করতে।

ডিরেক্টরিতে প্রচুর ফাইল থাকার সাথে সম্পর্কিত মাধ্যমিক সমস্যাগুলির মধ্যে ওয়াইল্ড কার্ডের সম্প্রসারণ ব্যর্থতা অন্তর্ভুক্ত। ঝুঁকিগুলি হ্রাস করতে, আপনি আপলোডের তারিখ অনুসারে আপনার ডিরেক্টরিগুলি বা মেটাডেটের আরও কিছু দরকারী টুকরাটি অর্ডার করতে বিবেচনা করতে পারেন।

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