Вопрос: Какое решение или советы вы бы использовали для работы с очень большой (несколько терабайт) базой данных, индексированной по сильным хэшам с высокой избыточностью?
Какая-то перевернутая память?
Можно ли что-то сделать с Postgres?
Я готов при необходимости развернуть свое собственное хранилище.
(Подсказка: должен быть с открытым исходным кодом, нет Java, должен работать в Linux, должен быть основан на диске, C / C ++ / Pythonпредпочтительно)
Подробности:
Мне нужно создать очень большую базу данных, где каждая запись имеет:
- некоторые произвольные метаданные (некоторые текстовые поля), включая некоторыепервичный ключ
- один хеш (128-битный хэш, сильный MD5-подобный)
Объем записей - это то, что я бы назвал довольно большим: от нескольких десятков до сотен миллиардов).Хэши по строкам значительно избыточны (более 40% записей имеют общий хэш, по крайней мере, с другой записью, в записях по 100 КБ существует некоторый хэш)
Основное использование - поиск по хешу, а затем извлечениеметаданные.Вторичное использование - поиск по первичному ключу, а затем получение метаданных.
Это база данных аналитического типа, поэтому общая нагрузка средняя, в основном чтение, мало записей, в основном пакетные записи.
В настоящее время используется Postgres с индексом первичного ключа и индексом хеш-столбца.Таблица загружается в пакетном режиме с отключенным индексом по хешу.
Все индексы btrees.Индекс в столбце хеша становится огромным, большим или большим, чем сама таблица.Для таблицы размером 120 ГБ воссоздание индекса занимает около суток.Однако производительность запросов довольно хорошая.
Проблема в том, что прогнозируемый размер целевой базы данных будет превышать 4 ТБ на основе тестов с меньшим набором данных в 400 ГБ, что составляет около 10% от общей цели.После загрузки в Postgres более 50% хранилища, к сожалению, используется индексом SQL в столбце хэша.
Это слишком много.И я чувствую, что избыточность в хешах - это возможность хранить меньше.
Обратите внимание, что, хотя здесь описывается проблема, существует несколько таких таблиц, которые необходимо создать.