Максимальна кількість файлів в одному каталозі ext3, але все ще отримує прийнятну продуктивність?


25

У мене є написання програми в каталог ext3, який з часом виріс приблизно до трьох мільйонів файлів. Потрібно сказати, що читання списків файлів цього каталогу нестерпно повільне.

Я не звинувачую ext3. Правильним рішенням було б дозволити коду програми писати в підкаталогах, ./a/b/c/abc.extа не використовувати тільки ./abc.ext.

Я переходжу на таку структуру підкаталогу, і моє запитання просто: приблизно скільки файлів я повинен очікувати для зберігання в одному каталозі ext3, отримуючи при цьому прийнятну продуктивність? Який у вас досвід?

Або іншими словами; якщо припустити, що мені потрібно зберігати три мільйони файлів у структурі, скільки рівнів має ./a/b/c/abc.extбути в структурі?

Очевидно, це питання, на яке не можна точно відповісти, але я шукаю оцінку парку балів.

Відповіді:


12

Якщо у вас є дистрибутив, який підтримує dir_indexможливість, то ви можете легко мати 200000 файлів в одному каталозі. Я хотів би тримати це приблизно в 25 000, щоб бути в безпеці. Без цього dir_indexспробуйте утримати його на 5000.


10

Будьте ДУЖЕ уважні, як ви вибираєте розділений каталог. "а / б / с" звучить як рецепт катастрофи для мене ...

Не просто сліпо переходьте до створення декількох структур глибокого каталогу, скажімо, 100 записів на першому рівні, 100 записів на другому рівні, 100 записів на третьому. Я був там, зробив це, дістав куртку і довелося її реструктурувати, коли продуктивність перейшла в краппер з кількома мільйонами файлів. :-)

У нас є клієнт, який зробив макет "декількох каталогів" і в кінці виставив лише один-п’ять файлів у каталозі, і це вбивало їх. 3 - 6 годин, щоб зробити "du" в цій структурі каталогу. Рятувальником тут був SSD, вони не бажали переписувати цю частину своєї заявки, і SSD знімав цей час з години на хвилини.

Проблема полягає в тому, що кожен рівень пошуку каталогів шукає, а пошуки надзвичайно дорогі. Розмір каталогів також є фактором, тому більший виграш мати його менше, а не більший.

Щоб відповісти на ваше запитання про те, скільки файлів у каталозі, 1000, про які я чув, говорили про "оптимальні", але продуктивність у 10000 здається прекрасною.

Отже, я б рекомендував один рівень каталогів, кожен рівень - це каталог, що має 2 символи, складається з малих і малих літер та цифр, для приблизно 3800 каталогів верхнього рівня. Потім ви можете зберігати 14M файли з тими підкаталогами, що містять 3800 файлів, або близько 1000 файлів у підкаталозі для 3M файлів.

Я змінив подібну зміну для іншого клієнта, і це зробило величезну зміну.


6

Я б запропонував спробувати протестувати різні розміри каталогів за допомогою інструменту бенчмаркінгу, такого як поштова марка , оскільки існує маса змінних, таких як розмір кешу (як в ОС, так і в підсистемі диска), які залежать від вашого конкретного середовища.

Моє особисте правило полягає в тому, щоб націлити на розмір каталогу <= 20 К файлів, хоча я бачив порівняно пристойну продуктивність із до 100 к файлів / директорій.


3

У мене всі файли переходять у папки типу:

завантаження / [дата] / [година] /yo.png

і не має жодних проблем із продуктивністю.


4
А скільки файлів ви отримуєте за годину?
Каскабель

2

http://en.wikipedia.org/wiki/Ext3#Functionality - тут згадується, що каталог може мати лише приблизно 32000 підкаталогів, але не згадує файли.

http://roopindersingh.com/2008/05/10/ext3-handling-large-number-of-files-in-a-directory/

Також я ненавиджу біржу експертів, але я прочитав коментар до цього питання про те, що ідеально мати менше 10 000 000 в каталозі.


2

Я можу підтвердити на досить потужному сервері з великою кількістю пам'яті при гідному навантаженні, що 70 000 файлів можуть спричинити всілякі хаоси. Я пішов видалити кеш-папку з 70k файлами в ній, і це призвело до того, що apache почав нерестувати нові екземпляри, поки він не виведений на 255 і система не використала всю вільну пам’ять (16gb, хоча віртуальний екземпляр, можливо, був меншим). Так чи інакше, утримання під 25 000 - це, мабуть, дуже розсудливий крок


1

На мій досвід, найкращий підхід - не заздалегідь надмірно розробляти структуру файлів. Як згадується щонайменше в одній іншій відповіді, є розширення файлової системи, які стосуються кінця речей, що стосуються продуктивності.

Проблема, яку я частіше зустрічала, - це зручність використання в адміністративному відношенні. Найменший обсяг роботи, який ви можете зробити, щоб зменшити кількість файлів у каталозі - це, мабуть, підхід, який вам зараз потрібен.

sqrt (3_000_000) == 1732

Пару тисяч файлів в одному каталозі мені здається розумним. Будьте власним суддею для власної ситуації. Щоб досягти цього, спробуйте розділити файли на один рівень хеш-каталогів, щоб середня кількість файлів у каталозі була приблизно такою самою, як кількість каталогів.

З огляду на ваш приклад це було б ./a/abc.ext, ./ab/abc.ext, ./abc/abc.ext, ....

Поширення файлів буде сильно залежати від фактичних імен файлів. Уявіть, що ви застосовуєте цю техніку до каталогу з мільйоном файлів, кожен з яких названий foobar???.txt. Існують способи досягти більш рівномірного розповсюдження, як хешування на основі значення певної кількості біт від суми MD5 кожного імені файлу, але я наважусь здогадатися, що це буде надмірним для того, що ви намагаєтеся досягти.


1

Хм, я прочитав цю статтю нещодавно . По суті, ви використовуєте розподіл улюбленого алгоритму хешування. Я почав грати з числами, INT, підписаний MySQL, має максимальне значення 2147483647. Ви також можете змінити бажану кількість файлів у каталозі та кількість підкаталогів, щоб розташуватися на кінцевій кількості підкаталогів / файлів- розбиття за каталогами для даного набору даних, але важко знайти емпіричні докази щодо оптимальних організацій каталогу / файлів. Ця стаття дає деяке уявлення про відмінності в роботі між файловими системами (цікаві показники), але нічого про оптимальні організації.


0

Думаю, ви занадто багато думаєте над цим. Якщо ви навіть вибрали один додатковий рівень каталогів і змогли рівномірно збалансувати речі, у вас буде 1732 * каталогів і 1732 файлів у каталозі.

Якщо ви не плануєте потребувати десятків мільярдів файлів, ви можете майже вибрати кількість від 1000 до 100 000 і отримати хороші результати.

* квадратний корінь 3 мільйони.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.