Задать вопрос
Forbidden
@Forbidden
CEO, CTO @ a-parser.com

Идеальная база данных для хранения большого числа уникальных строк?

Продолжая развивать наш проект https://spyserp.com/ru/ появилась интересная задача

Входные данные:
- 150 млн уникальных строк длинной от 1 до 2048 символов(в данном примере ссылки, но могут быть любые бинарные строки)
- ежедневный прирост по 1 млн, ожидаемый прирост в диапозоне 5-10 млрд
- сейчас хранится в PostgreSQL, в формате id(primary key), link bytea(btree index), занимает 22 гб и индекс 32 гб

Задача:
- подобрать более оптимальное хранилище, уменьшить физический размер индекса, улучшить производительность

Из требований к новой базе:
- желательно максимальное заточенное и оптимизированное хранилище под такой тип данных(уникальная строка + ее id)
- быстрый поиск как по ключу(ссылке) так и получение ссылки по ее id
- возможность горизонтального масштабирования
- дисковое хранилище(понятно что для наилучшей производительности лучше все положить в память, но на данный момент этот вариант не рассматривается)

Из того что пробовалось:
- все key/value хранилища(leveldb, rocksdb и т.д.) - нет поиска по value(в данном случае key - ссылка, value это id)
- был активный период гугления, но к сожалению подходящего решения так и не было найдено

Обсудим? Очень хочется услышать мнение тех кто сталкивался с подобной задачей и как ее решали
  • Вопрос задан
  • 3131 просмотр
Подписаться 17 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 8
@lega
1) Используйте хеш от ссылки в качестве ид, тогда индекс по ссылке не нужен будет
2) Вместо btree возьмите hash индекс, вам же там сортировка не нужна
3) Данные переменной длинны не эффективно хранить в таблицах, т.к. оно там дробится и частично резервируется, итого занимает больше и работает медленнее.
Ответ написан
LORiO
@LORiO
clickhouse от яндекса. И с url база хорошо работает, так как изначально для метрики разрабатывалась.
Ответ написан
@xfg
Можете посмотреть еще https://ru.wikipedia.org/wiki/HBase
Ответ написан
Комментировать
mindtester
@mindtester
http://iczin.su/hexagram_48
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
Храните в MongoDB в виде документа:
{_id: 'http://your/url'}
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
Если у вас ссылки, то вы можете очень хорошо их сжимать
используя поиск по префиксу. Т.е. ищите максимальную строку, которую можно адресовать и заменяете всю строку (префикс) на ИД. Т.о. вы можете съэкономить значительные ресурсы.
Ответ написан
dummyman
@dummyman
диссидент-схизматик
Я раньше очень часто пользовался базой Пастухова.
Теперь мне хватает ключевиков, собранных собственным трудом.
Но принцип хранения не поменялся - текстовый файл рулит!
Позже прикрутил индексы на первые 6 байт в каждой строке и на первые 2 байта в каждом слове (кодировка cp1251).
Короче, удобно хранить, копировать, использовать на разных компьютерах запуская прямо с флешки, максимальная скорость работы!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы