Что использовать в качестве БД для поиска/агрегирования по тегам?

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

Есть ли готовая система, легко ставящаяся и настраиваемая (притом под и под линухом и виндой)?

Понятно, что можно относительно легко замутить своё блекджек с поэтессами, но не очень хочется.
  • Вопрос задан
  • 896 просмотров
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
ElasticSearch

Обсуждение Sphinx или ElasticSearch?
Боевой опыт у 2ГИС https://habrahabr.ru/company/2gis/blog/213765/
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vkdv
Можно попробовать redis с множествами и пересечением
у каждого тега есть свое множество записей

tag1 - record1,record2,record3,record4,record5
tag2 - record5,record6,record3
tag3 - record1,record3,record5

Дальше выполнить мат операцию SINTER tag2 tag2 tag3
В результате получится record3, record5

Если важна сортировка и лимиты - то можно использовать упорядоченные списки и команду ZINTERSTORE - но она менее производительна
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Всё не так страшно (MSSQL, mysql,postgres - сгодится):
1. создайте таблицу НАБОРОВ тегов с ID-шниками самих тегов и с ID-самого набора.
2. К каждой записи при добавлении - ставьте нужный ID-шник набора тегов.
3. При выборке по тегам - получаете из таблицы набора нужные ID-шники подходящих наборов.
4. По этим наборам - делаете выборку из основной таблицы с любым нужным фильтром и сортировкой.

Таким образом, Вы ускорите поиск, т.к. не нужно будет проверять уже сами теги и обращаться к другим таблицам для сопоставления (пересечения).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы