Вопрос:
- У пользователя есть в профайле поле, куда он может ввести какое-то множество _произвольных_ тегов(строк) [скажем, через запятую]
- И по нажатию на кнопку, нужно получить список профайлов других пользователей, отранжированный по числу наибольших совпадений тегов в этом поле (напр. и у того и другого есть теги "яблоко", "нос" и "пушкин" - 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 или еще что-то? Мне хочется чтобы получение такой выборки занимало хотя бы секунды, на базе с миллионом записей.