Как сохранить рекомендации для контентной модели фильтрации - PullRequest
0 голосов
/ 06 марта 2019

В текущей архитектуре мы сохраняем прогноз, исходящий от механизма рекомендаций, в виде списка идентификаторов элементов для каждого пользователя, список в настоящее время хранится в Redis.

Для каждого пользователя сохраняются все идентификаторы элементов.

Теперь мы хотим отфильтровать рекомендации для каждого пользователя, используя различные типы фильтров, и эта простая структура данных больше не подходит.

Первой моей идеей было сохранить таблицу, содержащую записи, подобные этой:

user_id | item_id | score 
user001   item001    0.5
user001   item002    0.8
user003   item001    0.5
...

И еще одну таблицу, содержащую свойства элемента:

item_id | filter_1 | filter_2 
item001   'a'          1
item002   'b'          5
item003   'c'          8
...

Тогда я мог быполучить рекомендации для конкретного пользователя, отфильтрованные по filter_1 или filter_2, выполнив INNER JOIN между двумя таблицами на основе item_id.

. Этот подход может работать, но он подходит для реляционныхбаза данных Я думал о денормализации одной таблицы:

user_id | filter_1 | filter_2 | item_id | score 
user001   'a'          1        item001    0.5
user001   'a'          1        item002    0.8
user003   'c'          8        item001    0.5

Таким образом, нет необходимости в JOIN, и это ускоряет время запроса, решение также более масштабируемо.

Мне все еще интересно, является ли какое-либо из них лучшим решением, так как для нашей пользовательской базы нам придется хранить 300,000 X 500,000 = 150 Billions строк!Мне это кажется очень большим, и я думаю, что я что-то упустил, или я перебираю решение, которое может быть намного проще.

Мне было интересно, как эти данные структурированы в механизмах производственной рекомендации с большим количеством пользователей и предметов.

...