Вопрос

С точки зрения производительности и КПД, лучше ли использовать множество небольших файлов (под партиями я подразумеваю целых несколько миллионов) или пару (десять или около того) огромных (несколько гигабайт) файлов?Давайте просто скажем, что я создаю базу данных (не совсем верно, но все, что имеет значение, это то, что к ней будет часто обращаться).

Меня в основном волнует производительность чтения.Моя файловая система в настоящее время ext3 в Linux (Ubuntu Server Edition, если это имеет значение), хотя я все еще могу переключаться, поэтому сравнение между различными файловыми системами было бы потрясающим.По техническим причинам я не могу использовать для этого реальную СУБД (отсюда и вопрос), поэтому "просто используйте MySQL" не является хорошим ответом.

Заранее спасибо, и дайте мне знать, если мне нужно будет уточнить.


Редактировать: Я собираюсь хранить множество относительно небольших фрагментов данных, вот почему мне было бы проще использовать множество небольших файлов.Поэтому, если бы я использовал несколько больших файлов, я бы извлекал из них всего несколько КБ за раз.Я бы также использовал индекс, так что на самом деле это не проблема.Кроме того, некоторые данные указывают на другие фрагменты данных (в случае большого количества небольших файлов они будут указывать на файл, а в случае больших файлов - на местоположение данных внутри файла).

Это было полезно?

Решение

Здесь есть много предположений, но, по сути, поиск по большой файл будет намного быстрее чем искать по куче небольших файлов.

Допустим, вы ищу строку текста содержится в текстовом файле.Поиск в Файл объемом 1 ТБ будет намного быстрее чем открытие 1,000,000 МБ файлов и просматривал их.

Каждый операция открытия файла требует времени.Большой файл должен быть открыт только один раз.

И, принимая во внимание производительность диска, гораздо более вероятно , что один файл будет хранящийся последовательно чем большая серия файлов.

...Опять же, это обобщения без дополнительных знаний о вашем конкретном приложении.

Наслаждайтесь,

Роберт К.Картайно

Другие советы

Это зависит от обстоятельств.действительно.Разные файловые системы оптимизированы по-разному, но в целом небольшие файлы упаковываются эффективно.Преимущество наличия больших файлов заключается в том, что вам не нужно открывать и закрывать много файлов.открытие и закрытие - это операции, которые требуют времени.Если у вас большой файл, вы обычно открываете и закрываете его только один раз и используете операции поиска

Если вы выберете решение с большим количеством файлов, я предлагаю вам структуру, подобную

b/a/bar
b/a/baz
f/o/foo

потому что у вас есть ограничения на количество файлов в каталоге.

Основная проблема здесь TMO связана с индексацией.Если вы собираетесь искать информацию в огромном файле без хорошего индекса, вам придется сканировать весь файл в поисках правильной информации, которая может быть длинной.Если вы думаете, что можете создать надежные механизмы индексации, тогда прекрасно, вам следует использовать огромный файл.

Я бы предпочел делегировать эту задачу ext3, который должен быть довольно хорош в этом.

Редактировать :

Вещь, которую следует рассмотреть в соответствии с этим статья в Википедии о ext3 заключается в том, что фрагментация действительно происходит с течением времени.Таким образом, если у вас есть огромное количество небольших файлов, которые занимают значительный процент файловой системы, то со временем вы потеряете производительность.

В статье также подтверждается утверждение о ограничении в 32 тысячи файлов на каталог (при условии, что статья в Википедии может подтвердить что угодно)

Я полагаю, что Ext3 имеет ограничение примерно в 32000 файлов / подкаталогов на каталог.Если вы собираетесь использовать миллионы файлов, вам нужно будет распределить их по множеству каталогов.Я не знаю, как это повлияет на производительность.

Я бы предпочел несколько больших файлов.На самом деле, зачем вообще иметь несколько, если только они не являются какими-то логически отдельными единицами?Если вы все еще разделяете это просто ради того, чтобы разделить это, я говорю, не делайте этого.Ext3 прекрасно справляется с очень большими файлами.

Я работаю с системой, которая хранит около 5 миллионов файлов в файловой системе XFS под управлением Linux, и у меня не было никаких проблем с производительностью.Мы используем файлы только для хранения данных, мы никогда не проверяем их полностью, у нас есть база данных для поиска, и одно из полей в таблице содержит guid, который мы используем для извлечения.Мы используем ровно два уровня каталогов, как указано выше, с именами файлов, являющимися guid, хотя можно было бы использовать и больше, если бы количество файлов стало еще больше.Мы выбрали этот подход, чтобы избежать хранения нескольких дополнительных терабайт в базе данных, которые нужно было только сохранить / вернуть и которые никогда не просматривались, и у нас это хорошо сработало.Наши файлы варьируются от 1 тыс. до примерно 500 тыс.

Мы также запустили систему на ext3, и она функционировала нормально, хотя я не уверен, что мы когда-либо запускали ее дальше миллиона файлов.Вероятно, нам нужно было бы перейти на систему из 3 каталогов из-за ограничений по максимальному количеству файлов на каталог.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top