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

Manticore Search 4.0.2: full columnar store support, auto index compaction, locks system revamp, pseudo sharding

author image
View as markdown

Основные новые возможности

  • Полная поддержка Manticore Columnar Library . Ранее Manticore Columnar Library поддерживалась только для обычных индексов. Теперь она поддерживается:
  • в реальном времени индексах для INSERT, REPLACE, DELETE, OPTIMIZE
  • в репликации
  • в ALTER
  • в indextool --check
  • Автоматическое сжатие индексов (#478 ). Наконец вам не нужно вызывать OPTIMIZE вручную или через cron-задачу или иной тип автоматизации. Manticore теперь делает это за вас. Вы можете задать порог сжатия по умолчанию через optimize_cutoff .
  • Снимки чанков и обновление системы блокировок. Эти изменения могут быть незаметны снаружи на первый взгляд, но они значительно улучшают поведение многих процессов в реальных индексах. Кратко, ранее большинство операций манипуляции данными Manticore сильно зависели от блокировок, теперь мы используем снимки дисковых чанков. В частности:
    • операции чтения (например SELECT, репликация) выполняются со снимками
    • операции, которые лишь меняют внутреннюю структуру индекса без изменения схемы/документов (например слияние RAM-сегментов, сохранение дисковых чанков, слияние дисковых чанков) выполняются с помощью снимков только для чтения и в конце заменяют существующие чанки
    • UPDATE и DELETE выполняются над существующими чанками, но в случае слияния, которое может происходить, записи собираются и затем применяются к новым чанкам
    • UPDATE последовательно захватывают эксклюзивную блокировку для каждого чанка. Слияния захватывают общую блокировку при переходе к этапу сбора атрибутов из чанка. Таким образом, одновременно только одна операция (слияние или обновление) имеет доступ к атрибутам чанка.
    • когда слияние доходит до фазы, требующей атрибутов, оно устанавливает специальный флаг. Когда UPDATE завершается, он проверяет флаг и, если он установлен, всё обновление сохраняется в специальной коллекции. Наконец, когда слияние завершается, оно применяет накопленные обновления к новому дисковому чанку.
    • ALTER выполняется через эксклюзивную блокировку
    • репликация работает как обычная операция чтения, но дополнительно сохраняет атрибуты перед SST и запрещает обновления во время SST
  • ALTER может добавлять/удалять полнотекстовое поле. Ранее он мог только добавлять/удалять атрибут.
  • 🔬 Экспериментально: псевдо-шардинг для запросов полного сканирования — позволяет параллелить любой запрос, не являющийся полнотекстовым. Вместо ручной подготовки шардов теперь можно просто включить новую опцию searchd.pseudo_sharding и ожидать до CPU cores более низкое время отклика для не полнотекстовых запросов. Учтите, что он может легко занять все доступные ядра CPU, поэтому если вам важна не только задержка, но и пропускная способность — используйте его с осторожностью.

Незначительные изменения

  • Linux Mint и Ubuntu Hirsute Hippo поддерживаются через APT repository
  • более быстрая обновление по id через HTTP в больших индексах в некоторых случаях (зависит от распределения id)
  • custom startup flags for systemd . Теперь вам не нужно запускать searchd вручную, если требуется запустить Manticore с определённым флагом запуска
  • новая функция LEVENSHTEIN() , вычисляющая расстояние Левенштейна
  • добавлены новые searchd startup flags --replay-flags=ignore-trx-errors и --replay-flags=ignore-all-errors, чтобы можно было запустить searchd даже если binlog повреждён
  • #621 — раскрыть ошибки из RE2
  • более точный COUNT(DISTINCT) для распределённых индексов, состоящих из локальных обычных индексов
  • FACET DISTINCT для удаления дубликатов при фасетном поиске
  • exact form modified теперь не требует morphology и работает для индексов с включённым поиском infix/prefix

Ломающие изменения

  • новая версия может читать старые индексы, но старые версии не могут читать индексы Manticore 4
  • удалена неявная сортировка по id. Сортируйте явно, если это необходимо
  • значение по умолчанию для charset_table изменяется с 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+451, U+451 на non_cjk
  • OPTIMIZE происходит автоматически. Если вам это не нужно, убедитесь, что установили auto_optimize=0 в разделе searchd в конфигурационном файле
  • #616 ondisk_attrs_default были устаревшими, теперь они удалены
  • для участников: теперь мы используем компилятор Clang для сборок под Linux, так как по нашим тестам он может собрать более быструю Manticore Search и Manticore Columnar Library
  • если max_matches не указан в поисковом запросе, он обновляется неявно с наименьшим необходимым значением ради производительности нового колонного хранилища. Это может повлиять на метрику total в SHOW META , но не на total_found, который является фактическим количеством найденных документов.

Миграция с Manticore 3

  • убедитесь, что вы остановили Manticore 3 корректно:
  • в /var/lib/manticore/binlog/ не должно быть файлов binlog (только binlog.meta должен находиться в директории)
  • в противном случае индексы, для которых Manticore 4 не может воспроизвести binlogs, не будут запущены
  • новая версия может читать старые индексы, но старые версии не могут читать индексы Manticore 4, поэтому убедитесь, что сделали резервную копию, если хотите легко откатить новую версию
  • если вы запускаете кластер репликации, убедитесь, что вы:
  • сначала корректно остановили все ваши узлы
  • а затем запустили узел, который был остановлен последним, с --new-cluster (запустите инструмент manticore_new_cluster в Linux).
  • прочитайте о перезапуске кластера для получения дополнительных деталей

Исправления ошибок

  • Исправлено множество проблем с репликацией:
  • 696f8649 - исправлен сбой во время SST на joiner с активным индексом; добавлена проверка sha1 на узле joiner при записи файловых частей для ускорения загрузки индекса; добавлена ротация измененных файлов индекса на узле joiner при загрузке индекса; добавлено удаление файлов индекса на узле joiner, когда активный индекс заменяется новым индексом с узла донора; добавлены точки журнала репликации на узле донора для отправки файлов и частей
  • b296c55a - сбой на JOIN CLUSTER в случае неправильного адреса
  • 418bf880 - во время первоначальной репликации большого индекса узел joiner мог завершиться с ERROR 1064 (42000): invalid GTID, (null), узел донора мог стать неотзывчивым, пока другой узел присоединялся
  • 6fd350d2 - хеш мог быть рассчитан неправильно для большого индекса, что могло привести к сбою репликации
  • #615 - репликация не удалась при перезапуске кластера
  • #574 - indextool --help не отображает параметр --rotate
  • #578 - высокая загрузка CPU у searchd в режиме ожидания после примерно одного дня
  • #587 - немедленный сброс .meta
  • #617 - manticore.json очищается
  • #618 - searchd --stopwait не работает под root. Это также исправляет поведение systemctl (ранее он показывал сбой для ExecStop и не ждал достаточно долго, чтобы searchd остановился корректно)
  • #619 - INSERT/REPLACE/DELETE против SHOW STATUS. command_insert, command_replace и другие показывали неправильные метрики
  • #620 - charset_table для простого индекса имел неправильное значение по умолчанию
  • 8f753688 - новые дисковые части не блокируются
  • #607 - узел кластера Manticore выдает сбой, когда не может разрешить узел по имени
  • #623 - репликация обновленного индекса может привести к неопределенному состоянию
  • ca03d228 - индексатор мог зависнуть при индексации источника простого индекса с атрибутом json
  • 53c75305 - исправлено выражение фильтра "не равно" в индексе PQ
  • ccf94e02 - исправлены выборки окон в запросах списка выше 1000 совпадений. SELECT * FROM pq ORDER BY id desc LIMIT 1000 , 100 OPTION max_matches=1100 ранее не работал
  • a0483fe9 - HTTPS-запрос к Manticore мог вызвать предупреждение "max packet size(8388608) exceeded"

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

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

curl https://manticoresearch.com | sh

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

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