файлова система для мільйонів невеликих файлів


44

Яку файлову систему Linux ви вибрали для найкращої швидкості у наступному сценарії:

  • сто мільйонів файлів
  • ~ 2k розмір файлу в середньому
  • > 95% доступу для читання
  • досить випадковий доступ
  • висока конкурентоспроможність (> 100 процесів)

Примітка . Файли зберігаються у глибокому ієрархічному дереві, щоб уникнути великих каталогів. Кожен каталог листів містить близько тисячі файлів.

Як би ви це орієнтували?


3
Потрібна додаткова інформація. Наприклад, чи зберігаєте ви всі файли в плоскому каталозі або в вкладених (відсортованих) каталогах? Це може мати значний вплив на ефективність часу доступу до файлів. Просіювання через 100 000 000 записів у "плоскому" розташуванні спричинить за собою значні витрати незалежно від типу ФС; У кращому випадку ви дивитесь на пошук дерев якихось типів, який все ще потребує декількох пошукових запитів, щоб отримати ваш файл. Якщо ви каталогізуєте файли у підкаталогах, час доступу значно пришвидшиться, оскільки на кожному рівні буде менше записів для пошуку.
Avery Payne

Чи доступ до файлу здійснюється серійно чи одночасно?
Стів Шнепп

Відповіді:


19

Ось кілька результатів, порівнюючи всі основні Linux FSes з bonnie ++, які ви можете використовувати як вихідну точку.

З точки зору випадкових прагнень виграє Рейзер, за ним EXT4, а потім JFS. Я не впевнений, чи точно це буде співвідноситись з пошуковими каталогами, але, здається, це було б показником. Для цього вам доведеться робити власні тести. EXT2 відбиває штани за все час створення файлів, ймовірно, через відсутність журналу, все-таки EXT4 б'є все, окрім Рейзера, який ви, можливо, не захочете використовувати через поточний статус hans reiser.

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

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


1
проблема Bonnie ++ є те , що вона навіть не грубо перевірити мій сценарій використання
Bene

2
У вас є суть про це не тестування пошуку каталогів, але якщо чесно, якщо це ваша суть, вам краще скинути свої дані в реальну базу даних. Файлові системи працюють не так добре на маленьких об'єктах, які більшість баз даних розроблені для використання
Андрій Чолакіян

7
@AndrewCholakian Посилання тепер мертва.
Дон Скотт

8

Я згоден з більшістю сказаного Ендрю, за винятком того, що я рекомендував би Reiser4 або старіший (але краще підтримуваний) ReiserFS . Як свідчать ці тести (та документація для ReiserFS), він розроблений для чіткої ситуації, про яку ви запитуєте (велика кількість невеликих файлів чи каталогів). Раніше я використовував ReiserFS з Gentoo та Ubuntu без проблем.

Щодо статусу Ганса Райзера, я не вважаю це проблемою з кодом або стабільністю самої файлової системи. Reiser4 навіть спонсорується як DARPA, так і Linspire, тому, погоджуючись з тим, що подальший розвиток файлової системи Reiser не визначений, я не маю на увазі, що це повинно бути вирішальним фактором, чи повинен хтось ним користуватися чи ні.


3
Я давно використовую ReiserFS. Насправді я все ще використовую його на старшому сервері Gentoo, якого я ще не збирався перевстановити. Цього травня цій установці 4 роки. Я можу вам сказати, що він значно сповільнився. Це явище відбувалося з часом у всіх файлових системах, що використовують ReiserFS, які активно використовуються для читання + запису на всіх машинах, у яких були такі файлові системи, без винятку - тому, якщо ви хочете використовувати його протягом тривалого періоду часу, це щось зберігати в пам'яті. Я відійшов від нього, використовуючи XFS для великих файлових систем зараз.
Mihai Limbăşan

3

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


1
Що таке файлова система, якщо не лише ієрархічна база даних? Ваша пропозиція додає шари абстракції, складності та програмного забезпечення, які, ймовірно, не є гарантійними. Крім того, власник питання виконує своє завдання "UNIX Філософія", і я підозрюю, що вам не подобається, що ви більше є хлопцем з Windows?
Стю Томпсон

3
Перш за все, я нічого не маю проти Unix чи чогось іншого в цій галузі. Існують великі відмінності між файловими системами та базами даних, і тому обидві технології були розроблені. Бази даних призначені для роботи з величезною кількістю невеликих об'єктів, в яких вони роблять кращу роботу, ніж більшість файлових систем. Я просто вказував, що може бути інша дорога, яку можна взяти з цим.
Єроен Ландхер

1
І набагато простіше "очистити / вакуумувати" db-файл, ніж дефрагментувати файлову систему на Linux. Більшість / усі фс не забезпечують цю функціональність, кажучи, що це не потрібно. Помітивши коментар Михайла вище, проте, ви можете бачити, що це не зовсім вірно.
Gringo Suave

3

Хтось із Unix StackExchange створив орієнтир (з джерелом) для перевірки саме цього сценарію:

З: Яка найефективніша файлова система Linux для зберігання безлічі малих файлів (HDD, а не SSD)?

Найкраща вистава для читання, здається, приходить від ReiserFS.


Здається, Btrfs має кращі або порівнянні результати у всьому, крім видалення. Але, як часто ви видаляєте 300k файлів? Раніше мені подобалися rfs, але btrfs може бути кращою ставкою для майбутнього.
Gringo Suave

3

На мій досвід, ext2 видуває ext4 з води для невеликих файлів. Якщо ви не дбаєте про цілісність запису, це чудово. Наприклад, субверсія створює багато-багато і багато невеликих файлів, на яких ext4 та інші файлові системи (XFS) задушуються (виконайте завдання cron, яке rsyncs даних для ext4 з ext2 кожні півгодини або близько того практично вирішує проблему.)

Запуск цих команд робить ext2 ще швидшим (навіть незважаючи на те, що більшість із цих параметрів робить файлову систему нестабільною після збоїв, якщо ви не запустите синхронізацію до її виходу з ладу). Ці команди майже не впливають на ext4 з невеликими файлами.

echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure

1

Я думаю, ext3 (або ext4), можливо, JFS було б гарним рішенням. Я б насторожено ставився до ext4 та btrfs (файлові системи складні - будьте готові до створення резервних копій, якщо ви хочете використовувати найновіші, новітні матеріали).

Існують також різні параметри, які ви можете налаштувати під час mkfs, щоб налаштувати файлову систему на свій смак.

Я б точно рекомендував проти XFS. Не тому, що це погана файлова система, але створення / видалення - це дорога операція на ній.


Щоб уникнути проблем із пошуком у каталозі, використовуйте інтелектуальну схему іменування, наприклад:

<first letter of id>_<last letter of id>/<id>

або подібні, більш складні схеми. Це прискорить пошук у вашому каталозі і, таким чином, загальну швидкість доступу. (Це старий трюк Unix, назад від V7 я думаю)


1
у чому перевага використання першої та останньої літери, а не лише першої російської літери?
бене

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

1

Більшість FS задихнеться з більш ніж 65 К файлами в режимі, я думаю, що це все ще стосується ext4. У файлових системах Рейзера немає такої межі (люди в mp3.com платять, щоб переконатися в цьому). Не впевнений ні в чому іншому, але це один із сценаріїв використання, для якого був створений ReiserFS.


1
Це ReiserFS, а не RieserFS
Даніель Ріковський

У ці вихідні у мене був dir на ext4 із 1000000 файлами. Поки ви цього не зробите lsабо не заповнюєте вкладку, вона працює швидко. Можливо, через індекс.
Оле Танге

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