2013-07-15 5 views
18

Я очень смущен и. Вот что я понимаюSOLR autoCommit vs autoSoftCommit

  • autoSoftCommit - после autoSoftCommit, если сервер, SOLR идет вниз, то autoSoftCommit документы будут потеряны.

  • autoCommit - делает жесткую фиксацию на диске и гарантирует, что все записи autoSoftCommit записываются на диск и записываются на любой другой документ.

Моя следующая конфигурация, похоже, только с autoSoftCommit. autoCommit сам по себе, похоже, не совершает никаких коммитов. Есть что-то, чего я не хватает?

<updateHandler class="solr.DirectUpdateHandler2"> 
    <updateLog> 
     <str name="dir">${solr.ulog.dir:}</str> 
    </updateLog> 
    <autoSoftCommit> 
     <maxDocs>1000</maxDocs> 
     <maxTime>1200000</maxTime> 
    </autoSoftCommit> 
    <autoCommit> 
     <maxDocs>10000</maxDocs> 
     <maxTime>120000</maxTime> 
     <openSearcher>false</openSearcher> 
    </autoCommit> 
</updateHandler> 

Почему autoCommit работает самостоятельно?

ответ

27

У вас есть openSearcher = false для жестких коммитов. Это означает, что, хотя совершение произошло, поисковик не был перезапущен и не видит изменений. Попытайтесь изменить этот параметр, и вам не понадобится мягкая фиксация.

SoftCommit повторно открывает поисковик. Поэтому, если у вас есть оба раздела, soft commit показывает новые изменения (даже если они не жестко привязаны), и - как сконфигурировано - жесткая фиксация сохраняет их на диск, но не изменяет видимость.

Это позволяет помещать мягкую фиксацию в 1 секунду и быстро обнаруживать документы и совершать жесткие сбои.

+0

Это имеет смысл. Я думаю, openSearcher = true не требуется, если документы уже были softCommitted. Я индексирую 500 000 записей каждые 2 часа, когда вы устанавливаете softCommit на 3 минуты, а autoCommit до 1 часа будет хорошей конфигурацией для производства? – hajime

+4

Вы индексируете непрерывно или в партии? Помните, что мягкие коммиты имеют больше требований к памяти, чем жесткие коммиты (некоторые дополнительные структуры в памяти). В любом случае мягкое и жесткое различие было для тех, кому нужна видимость документов в режиме реального времени (в секундах). Если вы работаете в течение нескольких минут, вы можете просто придерживаться жестких коммитов каждые две минуты и не заметить разницы. Протестируйте его, и если у вас возникнут дополнительные вопросы, обратитесь в список рассылки Solr для более подробной справки. –

+0

Да, я индексирую пакет. Я добавляю около 500-700 документов каждую секунду. Документы очень маленькие. Я не очень беспокоюсь об индексировании сразу. Но мне нужно, чтобы он индексировался, по крайней мере, каждые 30 минут. Поэтому я просто использую с openSearcher = true? – hajime

29

Я думаю, что это article будет вам полезна. В нем подробно объясняется, как работают жесткие фиксации и soft commit, и компромиссы, которые следует учитывать при настройке вашей системы.

Я всегда содрогаюсь от этого, потому что в некоторых случаях любая рекомендация будет неправильной. Моя первая рекомендация заключалась бы в том, чтобы не переубедить проблему. Некоторые очень умные люди пытались сделать весь процесс надежным. Сначала попробуйте простые вещи и только при необходимости измените настройки. В частности, посмотрите размер журналов транзакций и скорректируйте свои фиксированные интервалы фиксации, чтобы сохранить эти «разумные размеры». Помните, что штраф чаще всего связан с повторным запуском, если вы перезапускаете после сбоя 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 минут), что вполне нормально для моего случая. вы должны настроить эти параметры для своего случая.

+0

Нам не нравятся только ссылки. Рассмотрите возможность размещения достаточной информации из ссылки в ответе, чтобы сделать ответ автономным (не зависимым от ссылки) или опубликовать ссылку в качестве комментария к вопросу вместо этого (что вы сможете сделать, как только получите 50 репутации). – Dukeling

+0

Ссылка, приведенная выше, действительно полезна, если вы хотите определить, в какой категории ваше приложение падает. Это, безусловно, поможет вам настроить мелодию и, в свою очередь, повысить производительность. – Akshay

+0

Ссылка, кажется, сломана. Вот новый: https://lucidworks.com/blog/2013/08/23/understanding-transaction-logs-softcommit-and-commit-in-sorlcloud/ – alexblum

-2

Мягкие фиксации касаются видимости. Жесткие фиксации - это прочность. Оптимизация - это производительность.

Мягкие коммиты очень быстрые, изменения видны, но эти изменения не сохраняются (они только в памяти). Таким образом, во время сбоя эти изменения могут быть последними.
Жесткие изменения фиксации сохраняются на диске.
Оптимизация - это как жесткая фиксация, но она также объединяет сегменты индекса solr в один сегмент для повышения производительности. Но это очень дорого.

Операция фиксации (жесткая фиксация) делает изменения индекса видимыми для новых поисковых запросов. Жесткая фиксация использует транзакцию журнала , чтобы получить идентификатор последних изменений документа, а также вызывает fsync в файлах индексов, чтобы убедиться, что они были сброшены в стабильное хранилище, и никакая потеря данных не будет результатом сбоя питания.

Мягкая фиксация выполняется намного быстрее, поскольку она только делает изменения индекса видимыми и не индексирует файлы fsync или записывает новый дескриптор индекса. Если JVM выходит из строя или происходит потеря мощности, изменения, произошедшие после последнего жесткого , будут потеряны. Поиск коллекций, которые имеют требования NRT (которые хотят, чтобы изменения индекса быстро отображались , видимым для поисков), будут хотеть мягко фиксировать часто, но жестко фиксировать реже. SoftCommit может быть «меньше дорогим» с точки зрения времени, но не бесплатно, поскольку он может замедлять пропускную способность.

Оптимизация подобна жесткой фиксации, за исключением того, что она сначала объединяет все сегменты индекса в один сегмент . В зависимости от использования эта операция должна выполняться нечасто (например, в ночное время), если вообще, поскольку включает чтение и повторную запись всего индекса. Сегменты обычно сливаются во времени в любом случае (как , определяемые политикой слияния), и оптимизация просто заставляет эти объединения происходить немедленно.

auto commit properties we can manage from sorlconfig.xml files. 
<autoCommit> 
     <maxTime>1000</maxTime> 
    </autoCommit> 


    <!-- SoftAutoCommit 

     Perform a 'soft' commit automatically under certain conditions. 
     This commit avoids ensuring that data is synched to disk. 

     maxDocs - Maximum number of documents to add since the last 
        soft commit before automaticly triggering a new soft commit. 

     maxTime - Maximum amount of time in ms that is allowed to pass 
        since a document was added before automaticly 
        triggering a new soft commit. 
     --> 

    <autoSoftCommit> 
     <maxTime>1000</maxTime> 
    </autoSoftCommit> 

Ссылки:

https://wiki.apache.org/solr/SolrConfigXml

https://lucene.apache.org/solr/guide/6_6/index.html

+0

Как это распространяется на любой из существующих ответов? – MatsLindh

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/18321203) – yivi

+0

Привет @ MatsLindh, Я попытался дать ответ, используя руководство apache solr ref.I также обновил ответ, который разъясняет различия между мягким фиксацией, жесткой фиксацией и оптимизировать терминологию в solr. Надеюсь, вам понравится. –

Смежные вопросы