Как часто я должен загружать документы в CloudSearch (Solr)?

Вот мой вариант использования:

Я использую 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?

Я вижу два варианта:

  1. Немедленно вставьте (замените) голос в MySQL, а затем обновите оценку в CloudSearch. Это включает в себя отправку одной загрузки документа при каждом голосовании, но обеспечивает точность в реальном времени.
  2. Немедленно вставьте (замените) ответ в MySQL, а затем сохраните его где-нибудь в кеше (Redis?). Раз в час загружайте все голоса в CloudSearch.

Каков наилучший способ справиться с этой ситуацией?


person Mathieu Cassagnes    schedule 05.07.2015    source источник


Ответы (1)


Это действительно зависит от многих вещей

  1. Ваша настройка solr, сколько серверов, сколько памяти, ЦП, хранилища, сколько документов, каков размер индекса на сегмент/сервер и т. д.

  2. Сколько «оценочных» голосов вы ожидаете? Если вы выберете вариант 1, будет легче решить, можете ли вы каким-то образом оценить это число.

    Поскольку вы используете SolrCloud, у него есть функция NRT, которая гарантирует, что документы почти сразу будут доступны для поиска. Но опять же, это зависит от вашего текущего корпуса документов и от того, сколько обновлений в секунду или минуту вы ожидаете.

Если вы знаете количество голосов (обновлений для solr) и если у вас достаточно хорошие серверы, я бы выбрал вариант 1, поскольку это уменьшит накладные расходы на управление другой базой данных и логику обновления каждый час голосов в solr.

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

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

person jay    schedule 05.07.2015
comment
Это дает мне достаточно хороший ответ. Я выберу вариант 1 и проведу стресс-тесты, как было предложено. Если дела пойдут плохо, я опубликую здесь с тестами. - person Mathieu Cassagnes; 06.07.2015