Здравствуйте, коллеги-технари.
Предположим, у нас есть веб-сайт (PHP) с миллионами посетителей в месяц, и мы запускаем индекс SolR на веб-сайте с 4 миллионами размещенных документов. Solr работает на 4 отдельных серверах, где один сервер является главным, а остальные 3 сервера реплицированы.
Каждые 5 минут в Solr можно вставлять тысячи документов. Кроме того, пользователь может обновить свою учетную запись, что также должно вызвать обновление solr.
Я ищу безопасную стратегию перестройки индекса быстро и безопасно, не пропуская ни одного документа. И иметь безопасную стратегию дельта/обновления. Я подумал о стратегии и хочу поделиться ею с экспертами здесь, чтобы услышать их мнение о том, следует ли мне использовать этот подход или они могут посоветовать что-то (совершенно) другое.
Импорт данных Solr
Для всех операций я хочу использовать один обработчик импорта данных. Я хочу объединить импорт данных и изменений в один файл конфигурации, например DataImportHandlerDeltaQueryViaFullImport. Мы используем базу данных MySQL в качестве источника данных.
Перестроение индекса
Для перестроения индекса я имею в виду следующее; мы создаем новое ядро под названием «переиндексация» рядом с «живым» ядром. С помощью dataimporthandler мы полностью перестраиваем весь набор документов (4 миллиона документов), что в общей сложности занимает около 1-2 часов. В живом индексе по-прежнему каждую минуту происходят какие-то обновления, вставки и удаления.
После перестроения, которое заняло около 1-2 часов, новый индекс все еще не совсем актуален. Чтобы уменьшить задержку, мы делаем один дельта-импорт нового ядра, чтобы зафиксировать все изменения за последние 1-2 часа. Когда это будет сделано, выполните замену ядра. Обычный обработчик импорта «дельта», который запускается каждую минуту, подберет это новое ядро.
Передача обновлений в активное ядро
Чтобы держать наше живое ядро в курсе, мы запускаем дельта-импорт каждую минуту. Из-за замены ядра ядро переиндексации (которое теперь является действующим ядром) будет отслеживаться и обновляться. Я предполагаю, что это не должно быть проблемой, если этот индекс задерживается на несколько минут, потому что dataimport.properties также будут заменены местами? Дельта-импорт преодолел эти минуты задержки, но должен быть возможен.
Надеюсь, вы понимаете мою ситуацию и мою стратегию и можете посоветовать, правильно ли я поступаю в ваших глазах. Также я хотел бы знать, есть ли какие-то узкие места, о которых я не подумал? Мы используем Solr версии 1.4.
У меня есть вопрос, а как насчет репликации? Если главный сервер меняет ядро, как с этим справляются подчиненные?
И есть ли риски потери документов при обмене и т.д.?
Заранее спасибо!