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


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.