DoctorX
@DoctorX
Веб разработчик

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

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

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

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

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

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

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

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