Советы по созданию очень большой базы данных хэшей - PullRequest
7 голосов
/ 15 марта 2011

Вопрос: Какое решение или советы вы бы использовали для работы с очень большой (несколько терабайт) базой данных, индексированной по сильным хэшам с высокой избыточностью?

Какая-то перевернутая память?

Можно ли что-то сделать с Postgres?

Я готов при необходимости развернуть свое собственное хранилище.

(Подсказка: должен быть с открытым исходным кодом, нет Java, должен работать в Linux, должен быть основан на диске, C / C ++ / Pythonпредпочтительно)

Подробности:

Мне нужно создать очень большую базу данных, где каждая запись имеет:

  • некоторые произвольные метаданные (некоторые текстовые поля), включая некоторыепервичный ключ
  • один хеш (128-битный хэш, сильный MD5-подобный)

Объем записей - это то, что я бы назвал довольно большим: от нескольких десятков до сотен миллиардов).Хэши по строкам значительно избыточны (более 40% записей имеют общий хэш, по крайней мере, с другой записью, в записях по 100 КБ существует некоторый хэш)

Основное использование - поиск по хешу, а затем извлечениеметаданные.Вторичное использование - поиск по первичному ключу, а затем получение метаданных.

Это база данных аналитического типа, поэтому общая нагрузка средняя, ​​в основном чтение, мало записей, в основном пакетные записи.

В настоящее время используется Postgres с индексом первичного ключа и индексом хеш-столбца.Таблица загружается в пакетном режиме с отключенным индексом по хешу.

Все индексы btrees.Индекс в столбце хеша становится огромным, большим или большим, чем сама таблица.Для таблицы размером 120 ГБ воссоздание индекса занимает около суток.Однако производительность запросов довольно хорошая.

Проблема в том, что прогнозируемый размер целевой базы данных будет превышать 4 ТБ на основе тестов с меньшим набором данных в 400 ГБ, что составляет около 10% от общей цели.После загрузки в Postgres более 50% хранилища, к сожалению, используется индексом SQL в столбце хэша.

Это слишком много.И я чувствую, что избыточность в хешах - это возможность хранить меньше.

Обратите внимание, что, хотя здесь описывается проблема, существует несколько таких таблиц, которые необходимо создать.

1 Ответ

5 голосов
/ 15 марта 2011

Вы можете создать таблицу только с id и Hash, а другие данные - с index, Metadata и hashId. Таким образом, вы можете предотвратить запись одного и того же хэша в таблицу до 100 000 раз.

...