Полная поддержка
Manticore Columnar Library. Ранее Manticore Columnar Library поддерживалась только для простых индексов. Теперь она поддерживается:
в индексах реального времени для INSERT, REPLACE, DELETE, OPTIMIZE
в репликации
в ALTER
в indextool --check
Автоматическая компакция индексов (
#478
). Наконец, вам не нужно вручную вызывать OPTIMIZE или через крон-задачи или другие виды автоматизации. Manticore теперь делает это самостоятельно. Вы можете установить порог компакции по умолчанию через
optimize_cutoff
.
Переработка системы снимков и блокировок. Эти изменения могут быть невидимы снаружи на первый взгляд, но они значительно улучшают поведение многих процессов, происходящих в индексах реального времени. Короче говоря, ранее большинство операций манипуляции данными Manticore сильно полагались на блокировки, теперь мы используем вместо этого снимки дисковых чанков. В частности:
операции чтения (например, SELECT, репликация) выполняются с помощью снимков
операции, которые просто изменяют внутреннюю структуру индекса без изменения схемы/документов (например, слияние сегментов в ОЗУ, сохранение дисковых чанков, слияние дисковых чанков) выполняются с помощью снимков только для чтения и в конечном итоге заменяют существующие чанки
UPDATE и DELETE выполняются по существующим чанкам, но в случае слияния, которое может происходить, записи собираются и затем применяются к новым чанкам
UPDATE последовательно получает эксклюзивную блокировку для каждого чанка. Слияния получают общую блокировку при входе в стадию сбора атрибутов из чанка. Таким образом, одновременно только одна (слияние или обновление) операция имеет доступ к атрибутам чанка.
когда слияние достигает фазы, в которой ему нужны атрибуты, оно устанавливает специальный флаг. Когда UPDATE завершается, он проверяет флаг и, если он установлен, всё обновление хранится в специальной коллекции. Наконец, когда слияние завершается, оно применяет набор обновлений к новому дисковому чанку.
ALTER выполняется через эксклюзивную блокировку.
репликация выполняется как обычная операция чтения, но дополнительно сохраняет атрибуты перед SST и запрещает обновления во время SST.
ALTER
может добавлять/удалять полнотекстовое поле. Ранее он мог только добавлять/удалять атрибут.
🔬 Экспериментально: псевдошардинг для полносканирующих запросов - позволяет параллелизовать любой запрос, не являющийся полнотекстовым. Вместо того, чтобы вручную подготавливать шарды, вы теперь можете просто включить новую опцию
searchd.pseudo_sharding
и ожидать до CPU cores более низкого времени отклика для неполнотекстовых поисковых запросов. Обратите внимание, что он может легко занять все существующие ядра ЦП, поэтому, если вы заботитесь не только о задержке, но и о пропускной способности, используйте его с осторожностью.
Незначительные изменения
Linux Mint и Ubuntu Hirsute Hippo поддерживаются через
APT репозиторий
более быстрая обновление по идентификатору через HTTP в больших индексах в некоторых случаях (зависит от распределения идентификаторов)
новая функция
LEVENSHTEIN()
, которая вычисляет расстояние Левенштейна.
добавлены новые
флаги запуска searchd--replay-flags=ignore-trx-errors и --replay-flags=ignore-all-errors, так что можно всё ещё запустить searchd, если бинарный журнал повреждён.
новая версия может читать старые индексы, но старые версии не могут читать индексы Manticore 4.
удалена неявная сортировка по идентификатору. Сортируйте явно, если это необходимо.
значение по умолчанию для 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 в конфигурационном файле.
#616ondisk_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.meta)
в противном случае индексы, для которых Manticore 4 не может воспроизвести журналы, не будут применены
новая версия может читать старые индексы, но старые версии не могут читать индексы Manticore 4, поэтому убедитесь, что вы сделали резервную копию, если хотите легко откатить новую версию
если вы запускаете кластер репликации, убедитесь, что вы:
сначала корректно останавливаете все узлы
а затем запускаете узел, который был остановлен последним с --new-cluster (запустите инструмент manticore_new_cluster в Linux).
696f8649
- исправлен сбой во время SST на узле-участнике с активным индексом; добавлена проверка sha1 на узле-участнике при записи файловых фрагментов для ускорения загрузки индекса; добавлено вращение измененных файлов индекса на узле-участнике при загрузке индекса; добавлено удаление файлов индекса на узле-участнике при замене активного индекса новым индексом от узла-доноров; добавлены точки журнала репликации на узле-доноре для отправки файлов и фрагментов
b296c55a
- сбой при JOIN CLUSTER в случае неверного адреса
418bf880
- во время первоначальной репликации большого индекса узел, присоединяющийся, мог завершиться с ошибкой ERROR 1064 (42000): invalid GTID, (null), узел-донор мог стать недоступным, пока другой узел присоединялся
6fd350d2
- хэш мог быть рассчитан неправильно для большого индекса, что могло привести к сбою репликации
#615
- репликация завершилась неудачей при перезапуске кластера
#574
- indextool --help не отображает параметр --rotate
#578
- высокая загрузка CPU у searchd в режиме ожидания через примерно день
#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”