2010-04-26 1 views
6

Я создаю расширенное веб-приложение для обмена фотографиями. Как вы можете ожидать, пользователи могут загружать изображения, а другие могут комментировать его, голосовать на нем и любить его. Эти события будут определять популярность изображения, которое я захвачу в поле «карма».Digg-как вращающаяся домашняя страница популярного контента, как включить дату в качестве фактора?

Теперь я хочу создать систему домашней страницы с Digg, отображающую наиболее популярные изображения. Это легко, так как у меня уже есть взвешенная оценка Кармы. Я просто сортирую по этому поводу, чтобы показать 20 наиболее ценных изображений.

Часть, которая отсутствует, время. Я не хочу, чтобы на главной странице всегда находились чрезвычайно популярные изображения. Я думаю, что простым решением является ограничение набора результатов на последние 24 часа. Тем не менее, я также думаю, что для того, чтобы сохранить поворот изображения в течение дня, время может быть какой-то переменной, где его смещение влияет на сортировку изображения.

Конкретные вопросы:

  • ли вы рекомендовать простой сценарий (только для сортировки лучших изображений в течение 24 часов) или более изощренный (используйте DateTime смещения в качестве части сортировки)? Если вы посоветуете последнее, любую помощь в математическом решении этого?
  • Было бы лучше запустить запланированную службу для маркировки изображений для главной страницы или вы бы посоветовали прямой запрос (я использую MySQL)
  • В качестве дополнительного примечания, домашняя страница должна поддерживать пейджинг и тихое день должен включать вхождения дней до того, чтобы убедиться, что он всегда «заполнен»

Я не прошу сообщество, чтобы построить этот алгоритм, просто ищу какое-то посоветуйте :)

+0

Существует эта формула Бернулли для сортировки вещей, которые вы можете изменить, чтобы взять время в качестве параметра. Прямо сейчас я не помню имя, может быть, кто-то будет. (Это длинное имя) – Ben

ответ

2

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

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

effective karma = karma * (1 - percentage_decrease) 

, где percentage_decrease определяется по вашей функции. Например, вы могли бы сделать

percentage_decrease = min(1, number_of_hours_since_posting/24) 

сделать это так, эффективная карма каждого элемента уменьшается до 0 в течение 24 часов. Затем используйте эффективную карму, чтобы определить, какие изображения показывать. Это немного более стабильное решение, чем просто вычитание времени с момента публикации, поскольку оно масштабирует карму между 0 и ее фактическим значением. Мин должен поддерживать масштабирование с нижней границей 0, так как один раз в день вы начинаете получать значения, превышающие 1.

Однако это не учитывает популярность в строгом смысле слова. Ответ Тима дает некоторые идеи о том, как принимать строгую популярность (т. Е. Просмотры страниц).

0

Вы могли бы просто вычислить поле «скорректированной кармы», которое учитывало бы время:

adjusted karma = karma - number of hours/days since posted 

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

1

Для вашего первого вопроса, я бы пошел с немного более сложным методом. Вам понадобятся некоторые «Избранные все время» в миксе. Но не ходите только по времени, идите по количеству фактических просмотров изображение имело. Имейте в виду, что не все будут входить в систему и голосовать, но это не делает изображение менее популярным. Образ, который составляет два года с 10 голосами и 100 тыс. Просмотров, явно более важен для людей, чем образ, который составляет 1 год с 100 голосами и 1 тыс. Просмотров.

Для вашего второго вопроса, да, вы хотите, чтобы какое-то кеширование происходило на вашей первой странице. Это много запросов для создания точки входа на ваш сайт. Однако, как и SO, ваш тип сайта будет привлекать трафик на внутренние страницы через поисковые системы. Поэтому старайтесь смотреть и оптимизировать свои запросы повсюду.

Для вашего третьего вопроса, исходя из факторов, отличных от времени (т. Е. Количество просмотров), вы всегда должны иметь полную и динамическую страницу. Я не уверен в разделении страниц на главной странице, что приводит к тому, что люди могут использовать теги или поиски, что может оказаться лучшей стратегией.

 Смежные вопросы

  • Нет связанных вопросов^_^