Кількість файлів у каталозі


19

У мене каталог з приблизно 100000 невеликих файлів (кожен файл - 1-3 рядки, кожен файл - текстовий файл). За розміром каталог не дуже великий (<2 Гб). Ці дані перебувають на професійно керованому сервері NFS. Сервер працює під управлінням Linux. Я думаю, що файлова система ext3, але я не знаю точно. Крім того, у мене немає кореневого доступу до сервера.

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

Будь-яка операція / обробка вводу / виводу в цьому каталозі відбувається дуже, дуже повільно. Відкриття файлу (fopen в python), читання з відкритого файлу, закриття файлу - все дуже повільно. У bash ls, du тощо не працюють.

Питання:

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


6
На ваше пряме запитання добре відповів Джайлз, але в цілому файлові системи Linux роблять погані замінники баз даних, коли ви використовуєте назви файлів як ключі для мініатюрних біт даних. Ви не контролюєте генерацію, але можете обробляти дані у форму, більш придатну для аналізу; якщо цього не зробити, ви будете сплачувати накладні витрати на файлову систему на кожному кроці. Ви можете зменшити накладні витрати, але ви можете бути найщасливішим, якщо усунете його.
msw

Також дивіться це stackoverflow.com/questions/466521/…
Крісті,

Відповіді:


22

Як ви вважаєте, це залежить від багатьох речей, головним чином типу файлів і параметрів, а також певною мірою версії ядра. У серії ext2 / ext3 / ext4 відбулося значне вдосконалення, коли dir_indexз'явилася опція (через деякий час після первинного випуску ext3): вона змушує каталоги зберігатись як дерева пошуку (логарифмічний час доступу), а не лінійні списки (лінійний доступ до часу ). Це не те, що ви можете бачити через NFS, але якщо у вас є контакт з адміністраторами, ви можете попросити їх запустити tune2fs -l /dev/something |grep features(можливо, навіть переконати їх оновити?). Має значення лише кількість файлів, а не їх розмір.

Навіть при цьому dir_index100000 відчуває себе великими. В ідеалі запропонуйте авторам програми, яка створює файли, щоб додати рівень підкаталогів. Не погіршуючи продуктивність, я б рекомендував обмежити близько 1000 файлів у каталозі для ext2 або ext3 без dir_indexта 20000 з dir_indexабо reiserfs. Якщо ви не можете контролювати, як створюються файли, перемістіть їх в окремі каталоги, перш ніж робити щось інше.

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