2009-06-26 3 views
4

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

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

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


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

+1

Чем более расплывчатым является информация, тем больше вы получите, 'это зависит' – McAden

+3

Ну, какую еще информацию я должен добавить? Я не могу придумать ничего, что могло бы принести пользу этому вопросу. –

+0

Профиль доступа к этим данным имеет большое значение. Собираетесь ли вы читать большие куски данных? Являются ли некоторые данные связанными и, скорее всего, будут доступны вместе? В какой-то момент вам лучше использовать БД, а не множество небольших файлов, если вы не делаете что-то, что ЛЕГКО, как обслуживание их через http, и оно должно быть ДЕЙСТВИТЕЛЬНО быстрым. – jamuraa

ответ

5

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

Предположим, вы являетесь , ища строку текста, содержащуюся в текстовом файле. Поиск 1TB-файл будет намного быстрее чем открытие 1,000,000 МБ файлов и поиск по ним.

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

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

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

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

Роберт С. Cartaino

+2

Истина, если вы не можете выбрать, какой маленький файл искать. Каким-то образом. – DOK

3

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

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

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

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

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

+0

Ну, у меня был бы индекс (возможно, в памяти), если бы я пошел с огромными файлами. Это не похоже на то, что я буду искать весь 8-гигабайтный файл каждый раз, когда мне нужно 2 Кбайта данных. –

2

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

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

+0

А человек, не так ли? Не знал об этом ... +1 –

+0

Кроме того, да, я бы разделил большие файлы, потому что они содержат совершенно разные типы данных. Но все данные одного и того же типа будут в одном файле. –

3

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

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

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

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

1

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

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