Ситуация такая: есть сайт с N количеством юзеров, и есть M количество однородных оцениваемых объектов. Ну вот допустим рейтинг сериалов. Рекомендательная система должна обработать данные и на основании того, как и что оценили вы и на основании того, как и что оценили юзеры, предложить вам сериал, который скорее всего вам понравится.
То, как работает рекомендательная система я понимаю, как проанализировать, допустим, таблицу с колонками сериалы, строками юзеры понятно, алгоритмы есть.
Но как это оформить на сайте и внедрить?
То есть: есть база БД(MySQL), есть таблица вида User_rating, где колонка айди_юзер и колонка айди_сериал и колонка величина_рейтинга. Ну и дата. Но нам же нужна таблица совершенно другого вида, где в строках - айди юзера, а в столбцах - айди сериала, и на их перекрестии величина оценки. Для начала, насколько я понимаю, нужно решить эту проблему.
Я вижу пока только один вариант - сделать доп. таблицу и при добавлении в базу нового сериала добавлять столбец. Но выглядит чересчур костыльно и медленно.
Почитывал про noSQL, насколько я понимаю это вроде решает проблему, но не уверен, да и примеров в интернете не нашел.
Это первый вопрос.
А второй вопрос - даже, если, допустим, мы получили данную таблицу. Открываю страницу "рекомендации", где ожидаю список сериалов, которые скорее всего мне подойдут. При переходе запускаем питон скрипт для анализа. Но он же не вычисляет это за доли секунды, тем более с большим количеством людей и сериалов. И мы сидим ждем прогрузки. Ну, видимо это работает конечно не так. Вот в этом и вопрос. Может, делать доп таблицу, в которую вносить значения того, что мы ожидаем, что понравится юзерам, и обновлять ее каждый раз когда кто то оценивает сериал, но ведь это тоже очень долго.
Собственно вопрос - есть ли какие то решения? Ведь movielens именно так и работает, и видимо какие-то решения в интернете должны быть, ну точнее мне так кажется.
Если таких нет, может поможете идеей. Или я что-то сильно упускаю и просто нужно углубиться в тему
al_gon: Изучил, да, это действительно решение первой проблемы, большое спасибо!
Но в таком нужно ли мне весь проект переводит на neo4j или можно сделать 2 бд и как то добиться их взаимодействия, чтобы при добавлении записи в mysql автоматически добавлялась информация и в neo4j? И если да, то как, в какую степь копать? Искал сейчас информацию на этот счет, ничего дельного не нашел( Возможно не так ищу
Miraxek:
Всё переводить я бы не стал. Neo4j это как поисковый движок. В поиском движке к примеру магазина, товары тоже не лежат со всеми атрибутами, а только те по которым ищут.
Тоесть в Neo4j только информация для работы по графу.
Специального инструмента для репликации из MySQL в Neo4j я не знаю. Всё делается в "ручную".
Не вижу проблемы действовать так: при добавлении данных в MySQl сразу обновляются данные в Neo4j.
Если у вас появляется новый юзер или новый фильм. Их добовлять в Neo4j не надо.
Если юзер оценивает сериал, тогда да.
Если удаляется юзер или сериал, соответстевенно удаление из Neo4j.