Задать вопрос
DoctorX
@DoctorX
Веб разработчик

Как реализовать пересечение двух множеств (много данных)?

i.imgur.com/fTwGNcc.png
есть список сайтов (10млн)
и список ключей (40млн)
у каждого сайта есть ключи. У сайта на скрине их 500к
таблица конкурентов конкретного сайта это все сайты которые пересекаются ключами с данным. Отсортированные примерно по количеству этих самых пересечений/общее количество ключей сайта.

Необходимо иметь возможность быстро получать такие таблицы. (постранично)

Основная проблема объём данных.
Таблица большая (736к) имеет пагинацию и сортировку по любому параметру.

Интересует скорее подход чем конкретное решение. Я думаю что mysql на этой задаче сляжет. Что может подойти?
Как можно делать такие выборки за приемлемое время (10 сек)?
Возможно графовые бд? Или может хватит обычной реляционной базы?
  • Вопрос задан
  • 990 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
imho правильно смотреть и думать в сторону hadoop & mapreduce
Ответ написан
@lega
Можно попробовать sphinxsearch (или эластик), он ищет с сортировкой по релевантности, т.е. сверху будут наибольшие пересечения ключей, но он может сильно задуматься если там много пересечений.
Либо попробовать сделать обратный индекс с сортировпнными сайтами, за один проход вычислять пересечение по сайту, все сайты раскидать по нодам, результат скидывать в БД для сортировки.

Сколько в среднем ключей у сайта?
Ответ написан
несовсем понимаю сути проблемы, но если у вас запросы корректные, то есть все нужные вам данные сразу выдает БД, без дополнительной логики кода и вы используете пагинацию (скажем запрашиваете для 1 страницы 100 строк) то все и так будет выполняться за приемлимое время, если нет, то проверьте используете ли вы индексы при запросах
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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