@procode
Разработчик

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

Вопрос:
- У пользователя есть в профайле поле, куда он может ввести какое-то множество _произвольных_ тегов(строк) [скажем, через запятую]
- И по нажатию на кнопку, нужно получить список профайлов других пользователей, отранжированный по числу наибольших совпадений тегов в этом поле (напр. и у того и другого есть теги "яблоко", "нос" и "пушкин" - 3 совпадения)

Мне посоветовали Redis в качестве наиболее эффективной платформы для данной задачи. С Redis я раньше не работал, но выяснил, что пересечение множеств может быть получено простым:

sinter user:1:tags user:2:tags

Однако смежные вопросы в силу неопытности для меня остаются загадкой:

1. Мне что теперь, придется в цикле (скорее всего бэк буду на PHP писать) пройти по всем записям? Т.е.

sinter user:1:tags user:2:tags
sinter user:1:tags user:3:tags
sinter user:1:tags user:4:tags
...
sinter user:1:tags user:n:tags


Или есть более эффективные средства?

2. А как и куда складывать промежуточные результаты? Что посоветуете?

3. Стоит ли и остальные данные профайла пользователя хранить именно в Redis, или лучше их "как обычно" положить в MySQL?

4. Если ответ на п.1 положительный, т.е. мне придется в цикле делать МНОГО запросов к БД, может лучше рассмотреть другие варианты кроме Redis? Например, хранимые процедуры в MySQL или еще что-то? Мне хочется чтобы получение такой выборки занимало хотя бы секунды, на базе с миллионом записей.
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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