⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.

Загрузка индексов при запуске

author image
View as markdown

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

В более старых версиях Sphinx, если была установлена опция preopen, индексы предварительно читались и загружались в память. В это время демон отказывался принимать любые входящие соединения. Для небольших индексов это не было большой проблемой, так как они загружались быстро. Но для огромного индекса, которому требовалось загрузить десятки или даже сотни ГБ, это была реальная проблема, поскольку процесс мог занять несколько минут и более.

В Sphinx 2.3 это изменилось: файлы индексов отображаются в память (через mmap), а не просто читаются и загружаются в неё. При mmap данные читает теневой поток демона, а не основной: сначала он считывает по одному байту с каждой страницы, затем дочитывает остальное, постепенно подгружая всё в ОЗУ, и при этом к данным уже можно обращаться. Проще говоря, это ленивая загрузка файлов индексов.

Таким образом, демон может принимать соединения сразу после запуска. Если запросу требуется доступ к случайным данным, которые ещё не загружены в память, он прочитает их с диска. Это также означает, что запрос может выполняться медленнее обычного (в зависимости от производительности хранилища), но, по крайней мере, демон сможет предоставить результаты. Более того, как только файлы индекса загружены, демон может работать с ним «на полной скорости», даже если остальные индексы ещё загружаются.

Хотя это хорошие новости для большинства пользователей, для некоторых «ленивая» загрузка может быть не лучшим вариантом. Например, балансировщик нагрузки, использующий простые стратегии (случайный выбор или round robin), которые не измеряют время отклика, добавит перезапущенный экземпляр сразу после запуска демона. Поскольку запросы будут требовать чтения напрямую с диска, экземпляр будет показывать более высокое, а то и значительно более высокое время отклика, чем обычно, что нежелательно. Вместо этого, если возможно, лучше добавить экземпляр в кластер только после того, как демон завершит загрузку индексов.

На этот случай у searchd с версии 2.3 есть опция, которая, к сожалению, до недавнего времени не была документирована: «--force-preread ». С ней демон по-прежнему отображает файлы индексов в память через mmap, но предварительное чтение становится блокирующей операцией (как в старых версиях), и searchd не отвечает, пока всё не загрузится в память.

Установить Manticore Search

Установите Manticore Search одной командой в Linux или macOS:

curl https://manticoresearch.com | sh

Для расширенных вариантов установки см. полное руководство по установке и документацию .

Установить Manticore Search