Будь-яке обмеження щодо наявності багатьох файлів у каталозі в Mac OS X?


9

У мене в моєму MacOS X 100 000+ файлів у каталозі, і здається, що мій сценарій повільно читає файл у них.

Чи є якесь обмеження чи рекомендація мати стільки файлів? Чи повинен я розділити їх на деякі каталоги?

Я знайшов обмеження, що я не можу mv * fooдля всіх 100 000 файлів. Він показує помилку: "Занадто довгий аргумент". Він працює з приблизно менш ніж 20000 файлів.


Наразі в каталозі я маю 380 000 файлів і розумію, що навіть відкриття файлу просто займає 10+ секунд. Я вирішив розділити їх на деякі каталоги.
Мед Дайсукі

1
Файлова система HFS + повинна мати можливість зберігати та отримувати доступ до великої кількості файлів у каталозі за повним ім'ям без особливих проблем. Але потрібно бути обережними за допомогою маклерів. Коли ви використовуєте команду *або ?як частину аргументу, операційна система шукає весь каталог для відповідності файлів (повільно), а потім замінює ваш аргумент списком кожного відповідного файлу (довгого), який він потім передає в командування. Ви могли б зробити краще з петлею або з декількома мв команд, наприклад, mv a* foo && mv b* foo.
Маттіас Фріпп

Відповіді:


1

Відповідно до цієї відповіді на переповнення стека та конкретних деталей на сайті Apple , окрема папка може містити до 2,1 мільярда елементів.

Це означає, що те, що він може вмістити до 2,1 млрд. Предметів, не означає, що він може підтримувати продуктивність на цьому рівні. Згідно Вікіпедії ; акцент мій:

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

Таким чином, продуктивність природно знижується завдяки тому, що файл каталогу може використовуватись лише однією програмою за один раз. І якщо каталог зростає в розмірі, ризик / деградація, викликана цією проблемою, лише посилиться; більше файлів означає більше шансів для програм отримати доступ до файлів у цьому каталозі. Подальше підтвердження цієї ідеї тут ; знову акцент мій:

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


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

@DaisukiHoney Ласкаво просимо! Тож якщо ви знайшли мою відповідь корисною, будь ласка, не забудьте проголосувати. І якщо саме відповідь вирішила вашу проблему, не забудьте перевірити це як таке.
JakeGould

Так, безумовно, я голосую за вашу відповідь і перевіряю її. Знову дякую.
Дайсукі Мед

У розділах Вікіпедії, які ви цитуєте , йдеться про обмеження масштабованості для файлової системи, а не для каталогу: існує лише один файл каталогів на файлову систему, і весь доступ повинен мати серіалізацію для цього. Це питання неактуально.
poolie

@poolie Питання стосується кожної директорії, яка існує у файловій системі. Файл каталогів існує в файльній системі, але сам каталог існує в тій же файловій системі. Це стосується питання, що стосується 10 000+ файлів у каталозі, який існує в єдиній файловій системі. Але це питання 2+ років, тож дякую за посилання Wiki. Я оновив свою відповідь, щоб включити нове формулювання, а також пряме посилання на відповідний розділ.
JakeGould

4

Короткий відповідь: Ну, якщо ви читаєте 100 000 файлів, я можу очікувати, що сценарій буде повільним.

Довга відповідь: Щоб відповісти на це питання більш ретельно, вам слід переглянути файлову систему на Mac. Маки використовують HFS + ( Ієрархічна файлова система Plus ) - сучасна файлова система, яка має обмеження, але лише в екстремальних ситуаціях.

З мого досвіду, це дуже нагадує файлову систему журналу Linux EXT. Він підтримує встановлення каталогів, UNIX-подібних дозволів тощо. Він адресував файли у 32-бітному форматі, що забезпечує максимальну кількість файлів, які можуть зберігатися в обсязі 4 294 967 295, згідно з цим джерелом.

Файлова система починає розбиватися на файли розміром більше 8 ЕБ в сучасних системах і до 2,1 мільярдів файлів і папок в одному місці, як зазначено тут .

Зважаючи на те, як HFS + - чи справді будь-яка файлова система налаштована з цього приводу - маючи багато файлів у папці, нічого не слід робити "дивним".

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


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

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

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