Вот мой вариант использования:
Я использую MySQL в качестве основного хранилища данных и CloudSearch для поиска. База данных содержит таблицы: темы, комментарии, голоса, пользователи.
Я создал выражение для сортировки результатов поиска на основе «популярных» с использованием голосов и даты created_at (алгоритм Hacker News Hot). Это выражение называется «тренд» и используется в запросе CloudSearch следующим образом: /search?q=Superman&sort=trend+desc
(upotes-1)/pow(floor((_time-created_at)/3600000)+2, 1.8)
Прямо сейчас, когда пользователь голосует за тему или комментарий, он сохраняется в базе данных MySQL. Мой вопрос как я должен синхронизировать свои голоса с CloudSearch?
Я вижу два варианта:
- Немедленно вставьте (замените) голос в MySQL, а затем обновите оценку в CloudSearch. Это включает в себя отправку одной загрузки документа при каждом голосовании, но обеспечивает точность в реальном времени.
- Немедленно вставьте (замените) ответ в MySQL, а затем сохраните его где-нибудь в кеше (Redis?). Раз в час загружайте все голоса в CloudSearch.
Каков наилучший способ справиться с этой ситуацией?