Скільки файлів у каталозі занадто багато? (Завантаження даних з мережі)


19

Привітання,

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

Каталог доступний в Інтернеті. Кінцевий користувач здійснює дзвінок у веб-службу, яка повертає шлях до файлу, який користувачеві знадобиться.

Мені було цікаво, на якому етапі я б побачив вплив продуктивності, маючи всі ці файли в одному каталозі? (Якщо якийсь)



Відповіді:


12

Продуктивність залежить від використовуваної файлової системи.

  • FAT: забудь :) (нормально, я думаю, що обмеження - 512 файлів у каталозі)
  • NTFS: Хоча він може вміщувати 4 мільярди файлів у папці, він деградує відносно швидко - близько тисячі ви почнете помічати проблеми з продуктивністю, кілька тисяч, і ви побачите, що дослідник, як видається, звисає досить довго.
  • EXT3: фізичний ліміт - 32 000 файлів, але perf страждає і після кількох тисяч файлів.

  • EXT4: теоретично безмежний

  • ReiserFS, XFS, JFS, BTRFS: це хороші файли для багатьох файлів у каталозі, оскільки вони більш сучасні та призначені для обробки багатьох файлів (інші були розроблені ще в часи, коли жорсткі диски вимірювалися в МБ, а не ГБ) . Продуктивність набагато краща для багатьох файлів (разом із ext4), оскільки вони обидва використовують алгоритм бінарного типу пошуку для отримання потрібного файлу (інші використовують більш лінійний).


6
Це неправильно. В EXT3 не існує 32000 файлів. Існує ліміт 32000 підкаталогів. У мене тут каталог із понад 300000 файлів, і він чудово працює.
Давидшелдон

1
цілком вірно - обмеження файлу - це обмеження всієї файлової системи на inodes, але ви обмежені 32k посиланнями (тобто підкаталогами).
gbjbaanb

Заява про поточні NTFS теж не відповідає дійсності, він може вмістити до 4,294,967,295 (2 ^ 32 - 1): technet.microsoft.com/en-us/library/cc781134%28WS.10%29.aspx
Fleshgrinder

НЕ плутайте підкаталоги з файлами, на машині CentOS у мене було 32000 підкаталогів, досягнуто ліміту, я перемістив усі ФАЙЛИ в ту одну директорію і досі добре працює.
adrianTNT


8

Я зберігаю зображення для обслуговування на веб-сервері, і в мене більше 300 000 зображень в одному каталозі на EXT3. Я не бачу проблем із продуктивністю. Перед тим, як налаштувати цю програму, я робив тести на 500k зображень у каталозі та випадковим чином отримував доступ до файлів по імені, і не було істотного уповільнення з 500k над 10k зображеннями в каталозі.

Єдиний недолік, який я бачу, полягає в тому, що для синхронізації нових з другим розділом я повинен пробігати rsyncвесь каталог, і не можу просто сказати, щоб він синхронізував підкаталог, що містить останню тисячу або близько того.


Ну, щоб синхронізувати з другим сервером, я думаю, ви повинні створити структуру та алгоритм, який зберігає зміни, тоді цей журнал може заощадити вам велику кількість часу.
Бахадір Тасдемір

+1 Це фактично відповідає на питання.
kubanczyk

З одного боку, якщо ви користуєтесь FTP-клієнтом, як FileZilla, і хочете перерахувати вміст папки, це потребує певного часу.
Кай Ноак

3

Кількість файлів у папці теоретично може бути необмеженою. Однак кожного разу, коли ОС отримає доступ до певної папки для пошуку файлів, доведеться обробляти всі файли в папці. Маючи менше 500 файлів, ви можете не помітити затримок. Але якщо у вас в одній папці десятки тисяч файлів, проста команда списку папок (ls чи dir) може зайняти занадто довго. Коли можна отримати доступ до цих папок через FTP, це дійсно буде занадто повільно ...

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


Але чи буде доступ до файлу безпосередньо видаляти вузькі місця з пошуковими каталогами, чи буде доступ до дирекції все ще мати базовий виклик пошуку? (Linux, debian)
steve

3
Доступ до файлу безпосередньо зменшить ці проблеми. Я робив тести на ext3, і доступ до файлу по імені в каталозі, що містить 500000 файлів, не є значно повільнішим, ніж один, що містить 1000. Очевидно, що це робити ls- це проблема.
Давидшелдон

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

1

Моє правило - розділити папки, якщо файлів більше 1000, а папка буде переглянута (тобто через Інтернет або Провідник) або 5000 файлів в іншому випадку.


0

Як зазначає @skaffman, обмеження залежать від операційної системи. На вас, швидше за все, вплинуть обмеження щодо старих ОС. Пам'ятаю, стара версія Solaris була обмежена 32768 файлами в каталозі.

Звичайне рішення - використовувати якесь хешування, тобто Cyrus-сервер Imap розбиває користувачів за алфавітним хешем:

/var/spool/imap/a/user/anna/
/var/spool/imap/a/user/albert/
/var/spool/imap/d/user/dan/
/var/spool/imap/e/user/ewan/

1
Дякую, я б точно мав щось на місці, як тільки у режисера більше 2-х файлів! :)
steve

На це питання є кілька хороших відповідей: serverfault.com/questions/95444/…
davey

Моє загальне правило полягає в тому, що більше ніж 20 000 файлів у каталозі не є хорошою ідеєю. У більшості сучасних файлових систем все нормально. Після попадання 32k файлів у каталог деякі файлові системи, такі як ext3, почнуть мати серйозні проблеми з продуктивністю.
Філ Холленбек

Філ - чи маєте ви якусь інформацію щодо проблем продуктивності з більш ніж 32k файлами з ext3, на даний момент я не бачу жодної з понад 300k, можливо, це щось не впливає на мою схему використання.
Давидшелдон

На моїй попередній роботі наукове програмне забезпечення генерувало б багато невеликих (по кілька к кожен) файлів у каталозі. Ми напевно бачили, що час перегляду файлів 32k файлів збільшиться надзвичайно. Просто запустивши "ls" у каталозі з такою кількістю файлів, це займе хвилину або більше.
Філ Холленбек

0

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

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

gbjbaanb помиляється у своїй відповіді про максимальний розмір файлу ext3. Зазвичай ext обмежує кількість файлів на диску. Ви не можете створити більше файлів, якщо у вашій таблиці inode є індекси. Він вірно пропонує рейзерфи для більшої продуктивності з багатьма файлами


0

Перевірена папка з 10K файлами в NTFS (Windows 7, 64 біт). Папка із зображеннями 10К у будь-якому вікні (Список, Піктограма тощо) працює та прокручується без розумної затримки.

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