Статьи

Понимание Solr Soft Commits и долговечность данных

Я столкнулся с интересной проблемой сегодня. Я работал с первым проектом, в котором мы законно нуждались в софт-коммитах Solr, и при тестировании моей конфигурации я хотел доказать себе, что софт-коммиты работают так, как ожидалось. А именно, я ожидал, что программные коммиты сбросят все добавленные документы в индекс в оперативной памяти, чтобы они появлялись в результатах поиска. Кроме того, и, что важно, я ожидал, что мягкие коммиты  не  сбросят индексы на диск. Дисковый ввод-вывод стоит дорого, и, поскольку мы очень ограничены в этом проекте, моей главной целью было  доказать эти мягкие коммиты не записывались на диск. Проблема была — я не мог доказать это! По крайней мере, сначала. Однако к тому времени, когда я наконец понял, что происходит, я также стал гораздо лучше понимать, как на самом деле работают новые мягкие коммиты Solr. В оставшейся части этого поста я проведу вас через мои эксперименты и заставлю вас задуматься над этим со мной, как если бы вы сидели рядом со мной во время моих экспериментов.

Вот настройка: В solr solrconfig.xml я указал, что хочу, чтобы Solr мягко фиксировал все ожидающие документы каждые 10 секунд. Затем, через 30 секунд, я хотел жестко зафиксировать.

<updateHandlerclass="solr.DirectUpdateHandler2"><updateLog><strname="dir">${solr.ulog.dir:}</str></updateLog><autoCommit><maxTime>30000</maxTime></autoCommit><autoSoftCommit><maxTime>10000</maxTime></autoSoftCommit></updateHandler>

Я использовал SolrJ для загрузки около 100 документов в Solr, а затем быстро перепрыгнул в браузер и периодически выдавал серию запросов «выбрать все» для решения. Вот как все прошло:

  • Время 0:01 — нет документов
  • Время 0:02 — нет документов
  • Время 0:03 — нет документов
  • Время 0:04 — нет документов
  • Время 0:05 — нет документов
  • Время 0:06 — нет документов
  • Время 0:07 — нет документов
  • Время 0:08 — нет документов
  • Время 0:09 — нет документов
  • Время 0:10 — 100 документов

Все идет нормально. Софт коммит, похоже, работает; Мне просто нужно убедиться, что на диск ничего не записано. Я немедленно остановил Solr (элемент управления C в терминале, на котором запущен Solr), а затем перезапустил Solr и что я увидел? документов  — 100 из них!

«Итак, — сердито сказал я, — Солр на самом деле тяжело совершает коммит, когда я говорю это с мягким коммитом!» Но потом мне пришло в голову, что, возможно, Solr делает что-то умное, чтобы защитить меня от потери данных. «Как насчет этого updateLog, что я вижу в updateHandler?»

После отслеживания файлов журналов (они хранятся вместе с каталогом данных), я обнаружил, что, конечно же, они отслеживают все элементы, которые еще не были зафиксированы в Solr. Итак,  первый урок :

Всякий раз, когда Solr просыпается, он ищет эти журналы и воспроизводит их обратно для восстановления после любой потенциальной потери данных.

Итак, теперь было ясно, что я должен был сделать. Я ускорил тот же эксперимент, я отправил около 100 документов в solr и продолжал обновлять запрос «выбрать все», пока через 10 секунд не появились мои документы. Затем я остановил Solr (control-C), и на этот раз, улыбаясь, самодовольно, я удалил файлы журнала и перезапустил Solr, повторно отправил свой запрос «выбрать все» и нашел… 100 документов.

На данный момент слова не выражают смущения, которое я чувствовал. Тем не менее, этот смайлик делает довольно хорошую работу:

: — /

Я расстраиваюсь из-за того, что ошибаюсь, и все еще беспокоюсь о том, что, возможно, Солр записывает мои мягкие коммиты на диск. Затем мне пришло в голову, что, возможно, мой метод убийства Solr — control-C — был просто недостаточно жестоким.

Я создал еще один эксперимент. На этот раз я

  • включил Солр
  • представлено около 100 документов
  • повторно запрашивал «все документы», пока через 10 секунд они не появились
  • затем я убил задачу с kill -9 <processId>
  • Я удалил файлы журнала
  • Я перезапустил Solr

И  наконец , однажды я снова запустил Solr и запросил все документы — их не было! Итак, мой  второй урок  за день:

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

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