Я пытаюсь создать внутренний дизайн того, как Reddit вычисляет и обслуживает горячие страницы. Я также использую «горячий» рейтинг для заказа постов на моем сайте. У меня есть некоторые проблемы с этим, которые я пытаюсь преодолеть. Вот некоторые из способов, которые, по моему мнению, могут иметь смысл для проектирования:
Вычисление горячих значений: в данный момент я вычисляю значение и сохраняю его в базе данных вместе с самим голосованием каждый раз, когда кто-то голосует за сообщение или каждый раз, когда кто-то загружает сообщение. Это, наверное, не здорово. Я думаю о том, чтобы просто обновлять горячее значение всех сообщений через задание cron, например, каждые 5 минут и только для сообщений, которые старше 2 месяцев, например. Этот дизайн должен работать для тысяч и тысяч сообщений, некоторые я не уверен, что это лучшее решение, но я читал, что Reddit, по крайней мере, в начале, использовал задания cron для этого.
Запросы сообщений. Это то, о чем я больше всего беспокоюсь в данный момент. Прямо сейчас проблема заключается в том, что если я прокручиваю (больше сообщений загружается внизу страницы), я могу видеть дубликаты сообщений из-за того, что сообщения поднимаются и опускаются в горячем значении. Прямо сейчас каждый раз, когда загружаются новые сообщения, выполняется запрос к базе данных для получения сообщений. Я думаю, что будет иметь смысл использовать memcached и кэшировать запросы для сообщений (это нужно будет применить ко многим страницам), но я не уверен, что это полностью решит мою проблему. В идеале я нахожу решение, которое в основном «снимает» (кэширует?) БД и загружает из этой версии таблицы в БД до тех пор, пока не будет загружена новая страница.
Это проблема, которая преследует меня целую вечность, и я пытаюсь найти правильное решение о том, как лучше всего и наиболее эффективно вычислить значения горячего рейтинга и получить сообщения в порядке горячего рейтинга без изменения значений (чтобы избежать дубликаты и, возможно, отсутствующие сообщения), когда я прокручиваю страницу вниз и загружаю новые наборы сообщений, сохраняя при этом процесс красивым и эффективным. Есть мысли по этому поводу?