SOLR autoCommit против 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 работает сам по себе?


person captain-inquisitive    schedule 15.07.2013    source источник


Ответы (3)


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

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

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

person Alexandre Rafalovitch    schedule 16.07.2013
comment
В этом есть смысл. Я предполагаю, что openSearcher=true на самом деле не требуется, если документы уже были softCommitted. Я индексирую 500 000 записей каждые 2 часа. Вы устанавливаете softCommit на 3 минуты, а autoCommit на 1 час, будет ли это хорошей конфигурацией для производства? - person captain-inquisitive; 16.07.2013
comment
Вы индексируете постоянно или в пакетном режиме? Помните, что для мягких коммитов требуется больше памяти, чем для жестких коммитов (некоторые дополнительные структуры в памяти). В любом случае мягкое и жесткое различие было для тех, кому нужна была видимость документов почти в реальном времени (секунды). Если вы работаете в течение нескольких минут, вы, вероятно, можете просто придерживаться жестких коммитов каждые пару минут и не заметить разницы. Протестируйте его и, если у вас возникнут дополнительные вопросы, задайте их в списке рассылки Solr Users для получения дополнительной помощи. - person Alexandre Rafalovitch; 16.07.2013
comment
Да, я индексирую в пакетном режиме. Я добавляю около 500-700 документов каждую секунду. Документы очень маленькие. Я не очень беспокоюсь о мгновенной индексации. Но мне нужно, чтобы он индексировался хотя бы каждые 30 минут. Так что я просто использую ‹autoCommit› с openSearcher=true? - person captain-inquisitive; 16.07.2013
comment
Это высокая пропускная способность AFAIK. Вам действительно нужно проверить список рассылки для прошлых обсуждений производительности, памяти и связанных с этим проблем. Это отдельно от этого вопроса SO о значении коммитов. - person Alexandre Rafalovitch; 16.07.2013
comment
Каковы компромиссы установки openSearcher в true? - person freedrull; 05.10.2015
comment
@AlexandreRafalovitch может, пожалуйста, проверить это stackoverflow.com/questions/67506494/ - person siva sandeep; 12.05.2021

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

Я всегда содрогаюсь от этого, потому что любая рекомендация в некоторых случаях будет ошибочной. Моя первая рекомендация будет заключаться в том, чтобы не думать о проблеме слишком много. Некоторые очень умные люди попытались сделать весь процесс надежным. Сначала попробуйте простые вещи и настраивайте их только по мере необходимости. В частности, посмотрите на размер ваших журналов транзакций и настройте интервалы жесткой фиксации, чтобы они были «разумного размера». Помните, что штраф в основном связан с временем воспроизведения, если вы перезапустите после сбоя JVM. 15 секунд допустимо? Зачем тогда меньше?

Мы видели ситуации, в которых интервал жесткой фиксации намного короче, чем интервал мягкой фиксации, см. бит массовой индексации ниже.

Это места для начала.

ТЯЖЕЛАЯ (ОБЪЕМНАЯ) ИНДЕКСАЦИЯ

Здесь предполагается, что вы заинтересованы в том, чтобы как можно быстрее получить в индекс как можно больше данных для поиска в будущем. Я имею в виду оригинальные загрузки источника данных и т. д.

Установите достаточно длинный интервал мягкого коммита. Как за 10 минут. Мягкая фиксация связана с видимостью, и я предполагаю, что массовая индексация не связана с поиском почти в реальном времени, поэтому не выполняйте дополнительную работу по открытию какого-либо поисковика. Установите интервалы жестких коммитов на 15 секунд, openSearcher=false. Опять же, предполагается, что вы собираетесь просто передавать данные в Solr. В худшем случае вы перезагружаете свою систему и вам приходится воспроизводить примерно 15 секунд данных из вашего tlog. Если ваша система подпрыгивает вверх и вниз чаще, чем это, сначала устраните причину этого. Только после того, как вы попробуете простые вещи, вы можете подумать об уточнениях, обычно они требуются только в необычных обстоятельствах. Но они включают в себя: полное отключение tlog для операции массовой загрузки; индексирование в автономном режиме с помощью какого-либо процесса уменьшения карты; наличие только лидера на сегмент, отсутствие реплик для загрузки, затем включение реплик позже и предоставление им возможности работать в старом стиле. репликация, чтобы наверстать упущенное. Обратите внимание, что это происходит автоматически, если узел обнаруживает, что он «слишком далеко» от синхронизации с лидером, он инициирует репликацию в старом стиле. После того, как он догонит, он получит документы по мере их индексации до лидера и сохранит свой собственный tlog. и т.п.

ИНДЕКС-ТЯЖЕЛЫЙ, ЗАПРОС-ЛЕГКИЙ

Под этим я подразумеваю, скажем, поиск лог-файлов. Это тот случай, когда в систему постоянно поступает много данных. Но нагрузка запросов довольно невелика, часто для устранения неполадок или анализа использования.

Установите достаточно длинный интервал мягкой фиксации, вплоть до максимальной задержки, которую вы можете выдержать, чтобы документы были видны. Это может быть всего пара минут или намного дольше. Возможно, даже часы с возможностью выдачи жесткой фиксации (openSearcher=true) или мягкой фиксации по требованию. Установите жесткую фиксацию на 15 секунд, openSearcher=false

ИНДЕКС-ЛЕГКИЙ, ЗАПРОС-ЛЕГКИЙ ИЛИ ТЯЖЕЛЫЙ

Это относительно статичный индекс, который иногда получает небольшой всплеск индексации. Скажем, каждые 5-10 минут (или дольше) вы делаете обновление

Если не требуется функциональность NRT, я бы пропустил мягкие коммиты в этой ситуации и делал бы жесткие коммиты каждые 5-10 минут с openSearcher=true. Это ситуация, в которой, если вы индексируете с помощью одного внешнего процесса индексации, может иметь смысл, чтобы клиент выполнил жесткую фиксацию.

ИНДЕКС-ТЯЖЕЛЫЙ, ЗАПРОС-ТЯЖЕЛЫЙ

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

Установите интервал мягкого коммита до тех пор, пока вы можете стоять. Не слушайте вашего менеджера по продукту, который говорит: «Нам нужно не более 1 секунды задержки». Действительно. Сильно оттолкнитесь и посмотрите, будет ли пользователь лучше обслуживаться или даже заметит. Мягкие коммиты и NRT — это прекрасно, но они не бесплатны. Установите интервал жесткой фиксации на 15 секунд.

В моем случае (тяжелый индекс, тяжелый запрос) репликация master-slave занимала слишком много времени, замедляя выполнение запросов к ведомому. Увеличив softCommit до 15 минут и увеличив hardCommit до 1 минуты, производительность значительно улучшилась. Теперь репликация работает без проблем, а серверы могут обрабатывать гораздо больше запросов в секунду.

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

person vruizext    schedule 30.10.2013
comment
Нам не нравятся ответы только по ссылкам. Подумайте о том, чтобы опубликовать достаточно информации из ссылки в ответе, чтобы сделать ответ самодостаточным (не зависящим от ссылки), или вместо этого опубликовать ссылку в качестве комментария к вопросу (что вы сможете сделать, когда получите 50 очков репутации). ). - person Bernhard Barker; 30.10.2013
comment
Приведенная выше ссылка действительно полезна, если вы хотите определить, к какой категории относится ваше приложение. Это, безусловно, поможет вам настроить многие вещи и, в свою очередь, улучшит производительность. - person Akshay; 03.05.2016
comment
Ссылка, кажется, битая. Вот новый: lucidworks.com/blog/2013/08/23/ - person alexblum; 19.10.2016

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

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

Операция фиксации (жесткой фиксации) делает изменения индекса видимыми для новых поисковых запросов. Жесткая фиксация использует журнал транзакций для получения идентификатора последних изменений документа, а также вызывает 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

person nagendra patod    schedule 21.12.2017
comment
Как это расширяет любой из существующих ответов? - person MatsLindh; 21.12.2017
comment
Привет @ MatsLindh, я попытался дать ответ, используя руководство apache solr ref. Я также обновил ответ, который разъясняет различия между мягкой фиксацией, жесткой фиксацией и терминологией оптимизации в solr. Надеюсь, вам понравится. - person nagendra patod; 22.12.2017