Как отслеживать самые популярные продукты - PullRequest
2 голосов
/ 05 января 2009

Я пытаюсь реализовать функцию «Популярные продукты». По сути, каждый раз, когда продукт просматривается, я хочу записать в базу данных количество просмотров этого продукта. Где я могу положить крючки для чего-то вроде этого? Я видел вещи, которые основаны на построении некоторой аналитики трафика, но я ищу идеи, которые бы сделали эту функцию более связанной с приложением RoR.

Ответы [ 6 ]

4 голосов
/ 05 января 2009

Я предполагаю, что в контроллере есть метод 'view', выполняющий что-то вроде

@product = Product.find(params[:id])

Если у продукта есть поле 'views', вы можете сделать что-то вроде

@product.views = @product.views + 1
@product.save
3 голосов
/ 05 января 2009

Запись на счетчик @product.views, например, @ eelco.lempsink.nl, говорит, что это может быть отлично работающее базовое решение, но ИМХО, будут существенные проблемы с масштабируемостью, такие как:

  • Выполнение записи в БД на чтение будет довольно значительной перегрузкой
  • Если это большое приложение, высока вероятность того, что представления будут попадать в кеш вашего сервера

Возможно, более масштабируемым (но очень не RoR) решением было бы брать журналы сервера и запускать пакетные процессы для выполнения расчетов популярности (например, уникальности для каждого IP-адреса и т. Д.), А затем обновлять эту информацию в модели RoR.

1 голос
/ 05 января 2009

Поле представлений, например, предложенное eelco.lempsink.nl, должно работать. И для получения самых популярных предметов вы добавляете что-то вроде:

:sort => "views DESC",

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

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

Если это интернет-магазин или аналогичный, вам, вероятно, лучше считать количество покупателей, а не количество просмотров. Это было бы более правильно измерить реальный интерес к продукту (потому что они на самом деле были достаточно заинтересованы, чтобы тратить на него деньги), и все же я думаю, что запись в базу данных для представления звучит немного неразумно (есть гораздо больше просмотров чем покупает). Вы получите более качественные данные, чем поле views, которое в любом случае может столкнуться с проблемами обратной связи, поскольку вы можете иметь историю популярности, выбрав количество строк order для продукта с временной меткой в ​​течение определенного периода времени. Получение заказов с прошлой недели или около того, вероятно, не будет таким дорогим (для очень длинных периодов времени результат, вероятно, должен кэшироваться).

0 голосов
/ 26 ноября 2018

Мне нравится Google Analytics для такого рода вещей, затем используйте API, чтобы вытянуть цифры в ваше приложение.

Это сводит на нет все «ложные» чтения и дает массу другой информации, которую вы можете отслеживать и регистрировать.

0 голосов
/ 08 августа 2012

Я бы сказал, отслеживать некоторые показатели в отдельной таблице. Например:

products_views

-

product_id Идентификатор пользователя айпи адрес создан в updated_at

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

0 голосов
/ 06 января 2009

В зависимости от того, как вы представляете материал, и что вы действительно хотите сделать с представлениями, вы можете захотеть использовать его в целом и использовать что-то вроде аналитики Google / Microsoft. Они потратили массу времени на свои продукты, которые позволят вам видеть все виды информации о вашем трафике с течением времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...