Использование базы данных вместо тысяч маленьких файлов - PullRequest
1 голос
/ 16 июля 2011

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

Поэтому я спросил моего босса, почему мы не будемвместо этого используйте базу данных, и он дал мне о-о-о-о-о-о-о-о-о-как-лучше-знаю-выглядишь и сказал мне очевидно база данных такого большого размера не будет иметь хорошую производительность.1006 * Мой вопрос, это правда?Мне кажется, что ядро ​​базы данных должно уметь обрабатывать такие данные намного лучше, чем файловая система.Вот условия, которые у нас есть:

  • Программа в основном записывает данные.Запросы встречаются гораздо реже, а их производительность не очень важна.
  • Миллионы файлов могут создаваться каждый день.Большинство из них небольшие (несколько килобайт), но некоторые могут быть огромными.

Если вы считаете, что нам следует выбрать решение для баз данных, какая система баз данных с открытым исходным кодом, по вашему мнению, будет работать лучше всего?(Если я решу, что база данных, безусловно, будет работать лучше, я настаиваю на изменениях, что бы ни говорил начальник!)

Ответы [ 2 ]

6 голосов
/ 16 июля 2011

Это еще один из тех вопросов типа "это зависит".

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

Если вы пишете сотни тысяч событий для последующих запросов (например, найдите все с X> 10 и Y <11), то база данных звучит как отличная идея. </p>

Если вы пишете сотни тысяч битов нереляционных данных (например, простых пар ключ-значение), то, возможно, стоит исследовать подход NoSQL .

Наилучшим подходом, вероятно, является создание прототипа всех идей, которые вы можете придумать, измерить и сравнить!

2 голосов
/ 16 июля 2011

В качестве минимального улучшения я бы разбил ваши миллионы маленьких файлов на иерархию каталогов. Допустим, вы использовали uuids в качестве имен файлов, я выделил избыточный urn: uuid: спереди, а затем сделал 16 каталогов на основе первой буквы, а внутри них сделал 16 подкаталогов на основе второй буквы, и добавьте еще больше уровней, если вам это нужно. Уже одно это ускорит доступ. Кроме того, я бы удалял каталог всякий раз, когда он становился пустым, чтобы убедиться, что сама запись каталога не становится все больше и больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...