Я всегда содрогаюсь от этого, потому что в некоторых случаях любая рекомендация будет неправильной. Моя первая рекомендация заключалась бы в том, чтобы не переубедить проблему. Некоторые очень умные люди пытались сделать весь процесс надежным. Сначала попробуйте простые вещи и только при необходимости измените настройки. В частности, посмотрите размер журналов транзакций и скорректируйте свои фиксированные интервалы фиксации, чтобы сохранить эти «разумные размеры». Помните, что штраф чаще всего связан с повторным запуском, если вы перезапускаете после сбоя JVM. Допускается ли 15 секунд? Зачем идти меньше?
Мы видели ситуации, когда интервал жесткой фиксации намного короче, чем интервал мягкого фиксации, см. Ниже бит индексации.
Это места для начала.
HEAVY (BULK) INDEXING
Здесь предполагается, что вы заинтересованы в получении большого количества данных для индекса как можно быстрее для поиска когда-нибудь в будущем. Я думаю, что исходные нагрузки источника данных и т. Д.
Устанавливайте свой мягкий интервал фиксации довольно долго. Как через 10 минут. Мягкая фиксация - это видимость, и мое предположение заключается в том, что массовое индексирование не связано с поиском в реальном времени, поэтому не делайте дополнительной работы по открытию любого искателя. Установите фиксированные интервалы фиксации до 15 секунд, openSearcher = false. Опять же, предположение состоит в том, что вы будете просто взрывными данными в Solr.В худшем случае вы перезапустите свою систему и должны воспроизвести 15 секунд или около того данных из вашего tlog. Если ваша система подпрыгивает вверх и вниз чаще, чем это, исправьте причину этого в первую очередь. Только после того, как вы пробовали простые вещи, если вы рассматриваете уточнения, они обычно требуются только в необычных обстоятельствах. Но они включают в себя: Полное отключение tlog для работы с массовой нагрузкой Индексирование в автономном режиме с помощью какого-либо процесса уменьшения карты Только наличие лидера на каждый осколок, отсутствие реплик для загрузки, а затем включение реплик позже и их разрешение репликация старого стиля, чтобы догнать. Обратите внимание, что это автоматически, если узел обнаруживает, что он «слишком далеко» не синхронизирован с лидером, он инициирует репликацию старого стиля. После того, как он догнал, он получит документы, поскольку они индексируются лидером и сохраняют свой собственный tlog. и т.д.
ИНДЕКС-HEAVY, QUERY-LIGHT
Под этим я имею в виду, например, поиск файлов журналов. Это тот случай, когда у вас много данных, поступающих в систему почти все время. Но загрузка запроса довольно легкая, часто для устранения неполадок или анализа использования.
Устанавливайте интервал мягкого фиксации достаточно долго, до максимальной латентности вы можете стоять, чтобы документы были видимыми. Это может быть всего пару минут или намного дольше. Возможно, даже часы с возможностью выдачи жесткой фиксации (openSearcher = true) или soft commit по требованию. Установите ваши жесткие фиксации 15 секунд, openSearcher = ложь INDEX-LIGHT, QUERY-легкой или тяжелой
Это относительно статический показатель, который иногда получает небольшой взрыв индексации. Скажите каждые 5-10 минут (или дольше) вы делаете обновление
Если функция NRT не требуется, я бы опустил мягкие фиксации в этой ситуации и выполнял жесткие коммиты каждые 5-10 минут с помощью openSearcher = true. Это ситуация, при которой, если вы индексируете один внешний процесс индексирования, может иметь смысл заставить клиента выполнить жесткую фиксацию.
INDEX-HEAVY, QUERY-HEAVY
Это тот случай, близком к реальному времени (NRT), и на самом деле хитрая лота. Это потребует экспериментов, но вот где я начну
Установите свой интервал продолжительной фиксации до тех пор, пока вы можете стоять. Не слушайте своего менеджера по продуктам, который говорит «нам нужно не более 1 секунды латентности». В самом деле. Сдвиньте назад и посмотрите, лучше ли обслуживать пользователя или даже заметьте. Мягкие коммиты и NRT довольно изумительны, но они не бесплатны. Установите фиксированный интервал фиксации на 15 секунд.
В моем случае (индекс тяжелый, запрос тяжелый), master-slave репликации занимал слишком много времени, замедляя донесение запросов подчиненному. Увеличив softCommit до 15 минут и увеличив hardCommit до 1 мин, улучшение производительности было отличным. Теперь репликация работает без проблем, и серверы могут обрабатывать гораздо больше запросов в секунду.
Это мой прецедент, но я понял, что мне действительно нужны предметы, которые будут доступны на мастер-сервере в реальном времени, поскольку мастер используется только для индексирования элементов, а новые элементы доступны в ведомых устройствах каждый цикл тиражирования (5 минут), что вполне нормально для моего случая. вы должны настроить эти параметры для своего случая.
Это имеет смысл. Я думаю, openSearcher = true не требуется, если документы уже были softCommitted. Я индексирую 500 000 записей каждые 2 часа, когда вы устанавливаете softCommit на 3 минуты, а autoCommit до 1 часа будет хорошей конфигурацией для производства? – hajime
Вы индексируете непрерывно или в партии? Помните, что мягкие коммиты имеют больше требований к памяти, чем жесткие коммиты (некоторые дополнительные структуры в памяти). В любом случае мягкое и жесткое различие было для тех, кому нужна видимость документов в режиме реального времени (в секундах). Если вы работаете в течение нескольких минут, вы можете просто придерживаться жестких коммитов каждые две минуты и не заметить разницы. Протестируйте его, и если у вас возникнут дополнительные вопросы, обратитесь в список рассылки Solr для более подробной справки. –
Да, я индексирую пакет. Я добавляю около 500-700 документов каждую секунду. Документы очень маленькие. Я не очень беспокоюсь об индексировании сразу. Но мне нужно, чтобы он индексировался, по крайней мере, каждые 30 минут. Поэтому я просто использую с openSearcher = true? –
hajime