Непрерывная совместная фильтрация с использованием Mahout - PullRequest
4 голосов
/ 21 ноября 2011

Я нахожусь в процессе оценки Mahout как механизма совместной рекомендации-фильтрации. Пока все выглядит отлично. У нас почти 20 миллионов булевых рекомендаций от 12 миллионов разных пользователей. Согласно вики Махута и нескольким потокам Шона Оуэна , в этом случае достаточно одной машины. Из-за этого я решил использовать MySql в качестве модели данных и на данный момент не использовать Hadoop.

Одна вещь ускользает от меня, однако, каковы лучшие практики для постоянного обновления рекомендаций, не читая все данные с нуля? У нас есть десятки тысяч новых рекомендаций каждый день. Хотя я не ожидаю, что он будет обрабатываться в режиме реального времени, я хотел бы, чтобы он обрабатывался каждые 15 минут или около того.

Пожалуйста, опишите подходы для развертывания на основе Mysql и Hadoop. Спасибо!

1 Ответ

3 голосов
/ 21 ноября 2011

Любая база данных слишком медленная для запроса в режиме реального времени, поэтому любой подход предполагает кэширование набора данных в памяти, что, как я предполагаю, вы уже делаете с ReloadFromJDBCDataModel. Просто используйте refresh(), чтобы загрузить его с любым интервалом, который вам нравится. Это следует сделать в фоновом режиме. Суть в том, что для загрузки новой модели потребуется много памяти при обслуживании старой. Вы можете развернуть свои собственные решения, которые, скажем, перезагружают пользователя за раз.

Нет такой вещи, как обновления в реальном времени на Hadoop. В целом, лучше всего использовать Hadoop для полного и правильного пакетного вычисления результатов, а затем настраивать их во время выполнения (не полностью) на основе новых данных в приложении, которое содержит и обслуживает рекомендации.

...