Алгоритм выбора самых популярных мест из базы данных

StackOverflow https://stackoverflow.com/questions/2706964

  •  01-10-2019
  •  | 
  •  

Вопрос

У нас есть веб-сайт, который содержит базу данных мест. Для каждого места наши пользователи могут взять одно из следующих действий, которые мы записываем:

  1. Просмотр - Просмотр профиля
  2. Рейтинг - Оцените его по шкале 1-5 звезд
  3. Обзор - просмотрите его
  4. Завершено - отметьте, что они были там
  5. Список желаний - отметьте, что они хотят пойти туда
  6. Любимый - отметьте, что это один из их фаворитов

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

  • Просмотры
  • рейтинги
  • avg_rating.
  • завершенный
  • список желаний
  • любимый

То, что мы хотим сделать, это генерировать списки верхних мест, использующих вышеуказанную информацию. В идеале, мы хотели бы иметь возможность генерировать этот список, используя относительно простой запрос SQL, не требуя, чтобы выполнить любую рабому обслуживанию, чтобы рассчитать дополнительные поля или места ранга стека друг к другу. То, что говорилось, поскольку у нас есть только около 50 000 мест, которые мы могли бы запустить работу по ночному Cron, чтобы рассчитать некоторые поля, такие как рейтинги по разным категориям, если бы она предложила значительную разницу в общих результатах наших лучших мест.

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

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

Заранее спасибо за вашу помощь и совет!

Это было полезно?

Решение

Точная формула для любимого потребуется от вас, мы назовем это f (x).
Для фактической реализации я бы добавил поле популярности_кора, которое я бы рассчитывал, как вы говорили с работой ночного Cron, используя f (x) для каждой строки.

Тогда это просто случай выполнения «выбрать имени место из таблицы по порядку популярностью_score Desc».

ОК, - давайте дадим ему STAB Purribute_score = (любимый * 3 + завершен * 2 + список желаний) * Рейтинг * Просмотр / avg_views_of_all_profiles

Другие советы

У меня нет мнения о том, как взвешивать вещи.

Тем не менее, почему бы не просто добавить столбец популярности в таблицу местоположения? Внезапно ваш запрос SQL невероятно прост.

Кричательная часть, конечно, выясняется, как и когда обновить это значение. Но поскольку вы экономите все данные о деятельности, вы всегда можете восстановить значения популярности из записей журнала.

Таким образом, вы получаете приятные быстрые запросы для «самых популярных» местоположений, и если вы хотите изменить, как вычисляется популярность, вы можете сделать это по желанию.

Если вы умны, вы сможете придумать достаточно простого формулы, чтобы популярность можно отследить в режиме реального времени. Например, если мы заботимся только о средних рейтингах, вы можете изменить средний рейтинг только с тремя переменными: текущий средний рейтинг, количество раз, когда объект был оценен, а новое значение рейтинга.

Конечно, все становится все более сложным, когда вы начинаете микширование во сколько раз объект был просмотрен, рассмотрено, избрано, и т. Д. ... Но вы можете обнаружить, что вы можете разработать метод, который вычисляется достаточно дешево, что вы можете обновить общую популярность ценность справа от каждого действия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top