Вышел свежий релиз Manticore search 6.0.0

Сегодня вышел релиз поисковой машины Manticore Search. Я расскажу, что это такое, для чего используется и почему я так рад новому релизу. Раньше для индексирования данных из MySQL и полнотекстового поиска я использовал Sphinx Search. Не скажу, что использовал его на всю катушку, но одна его фича пришлась мне по душе. Это SphinxSE (Sphinx storage engine). Это кастомный движок хранения для MySQL, который получает данные из Sphinx и выдает их в виде SQL-таблицы. Мы можем использовать эту таблицу в запросах и более того – делать JOIN с ней (ну или JOIN ее и других таблиц). Именно из-за этой фичи я начал использовать Sphinx.

Проблема сборки SphinxSE и MySQL 8

Но моя радость была недолгой. Проект у меня собирается в Docker, а SphinxSE компилируется вместе с исходниками MySQL. А именно MySQL 5.7. А MySQL 8 он не поддерживает от слова совсем. Когда я пытался скомпилировать его с MySQL 8:

то получил просто гору ошибок:

Решение проблемы SphinxSE + MySQL 8

Я честно боролся с ними несколько дней, а потом понял что дело – труба. Полазил по форумам, почитал посты таких же страдальцев и узнал, что проект Sphinx то закрыт. И они даже в планах не собираются поддерживать MySQL 8.

После этого я начал искать аналоги и с удивлением нашел проект Manticore. Ребята перехватили разработку sphinx и выпустили несколько версий. Вместо SphinxSE можно использовать FEDERATED таблицу. Читайте про это в земечательной статье From SphinxSE to FEDERATED. И самое главное Manticore не надо компилить вместе с исходниками MySQL и он поддерживает MySQL 8.
Моей радости не было предела, я начал колдовать. Как результат – я внедрил его в проект, смог ставить MySQL нормально через deb-пакет и НЕ КОМПИЛИТЬ БОЛЬШЕ исходники MySQL. Это была победа!

Время шло, и моей основной рабочей платформой стал MacBook на M1. А это архитектура ARM64V8 со всеми вытекающими. Docker образов для нее было не так много и многие из них приходилось запускать в режиме эмуляции через quemu. И Manticore тоже. Но сегодня ребята из команды разработки зарелизили multi-arch версию Manticore. Это был мой feature-request и я очень рад, что они это сделали!

Что нового в релизе

Читаю свежие release notes и прямо радуюсь, как ребенок. Сегодня команда Manticore рада объявить о выпуске Manticore Search 6.0.0. Этот релиз был трудом любви, на выполнение которого ушло более полугода, почти 800 коммитов и более 80 000 строк кода.

Manticore Buddy – расширение для Manticore на PHP

Начиная с этого выпуска, Manticore Search поставляется с Manticore Buddy, вспомогательным демоном, написанным на PHP, который обрабатывает высокоуровневый функционал, не требующую low latency или высокой пропускной способности. Manticore Buddy работает невидимо дял юзера, и вы можете даже не осознавать, что он работает. Хотя он невидим для юзера, сделать его совместимым с основным C++ демоном было сложной задачей. Это расширение позволяет команде разрабатывать широкий спектр высокоуровневых фич, таких как оркестрация шардов, контроль доступа и аутентификацию, различные интеграции такие, как mysqldump, DBeaver, Grafana mysql connector и другие. Сейчас оно позволяет:
– с помощью SHOW QUERIES возможно посмотреть список запросов, которые выполняются в Manticore в данный момент.
– с помощью BACKUP возможно сделать собственно бекапы инстанса Manticore
– с помощью AUto schema можно создать схему на основе первого вставляемого документа. Без необходимости описывать схему заранее.

Самое интересное, что теперь можно писать свои расширения для Manticore на PHP. Подробнее читайте на страничке Manticore Buddy GitHub project в GitLab

Elasticsearch-совместимые INSERT-ы и REPLACE-ы

Теперь вы можете выполнять совместимые с Elasticsearch JSON запросцы insert и replace, что позволяет использовать Manticore с такими инструментами, как Logstash и Filebeat, а также с другими инструментами из семейства Beats. Это приближает Manticore к тому, чтобы стать заменой Elasticsearch в стеке ELK. Следующая цель — завершить интеграцию Kibana/Opensearch Dashboards.

Вторичные индексы включены по-умолчанию

Если вы используете нашу Manticore columnar library, что настоятельно рекомендуется, вторичные индексы теперь включены по умолчанию. После их появления в предыдущем основном релизе они были значительно улучшены, и теперь авторы считают, что их включение по умолчанию имеет смысл для большинства пользователей. Также есть новая команда ALTER TABLE имя_таблицы REBUILD SECONDARY для перестроения ваших вторичных индексов, например при обновлении с предыдущей версии.

Авто-схема

Теперь вы можете пропустить создание таблицы. Просто вставьте первый документ, и Manticore автоматически создаст таблицу на основе его полей. Подробнее об этом подробно читайте здесь

Апгрейд Cost-based оптимизатора

Когда Manticore выполняет fullscan query, она может либо использовать обычное сканирование для проверки каждого документа на соответствие фильтрам, либо использовать дополнительные данные и/или алгоритмы для ускорения выполнения запроса. Чтобы решить, какой подход выбрать, Manticore использует Cost-based оптимизатор (также известный как «CBO» или «оптимизатор запросов»). Этот релиз включает в себя множество улучшений в его работе.

Телеметрия

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

Утилиты для backup

Крайне важно регулярно создавать резервные копии ваших таблиц, чтобы иметь возможность восстановить их в случае таких проблем, как сбой системы, отказ оборудования или повреждение/потеря данных по любой причине. Резервные копии также необходимы перед обновлением Manticore Search до новой версии, которая вносит изменения в формат таблицы, а также может использоваться для переноса ваших данных в другую систему, когда вы хотите перейти на новый сервер.

Инструмент резервного копирования manticore, который включен в официальные пакеты Manticore Search, может помочь вам автоматизировать процесс резервного копирования таблиц для экземпляра Manticore, работающего в режиме RT, давая вам душевное спокойствие в случае каких-либо сбоев или сбоев.

Вы также можете создать резервную копию данных с помощью SQL, выполнив простую команду BACKUP TO /path/to/backup.

SHOW QUERIES and KILL

Новая команда SQL SHOW QUERIES — это простой способ просмотра выполняемых запросов. Его можно использовать в сочетании с командой KILL для завершения длительного выполнения оператора SELECT.

Dynamic max_matches and accurate aggregation

Параметр max_matches указывает максимальное количество совпадений, которое сервер будет хранить в оперативной памяти для каждой таблицы и возвращать клиенту. В этом выпуске его значение является динамическим и может автоматически увеличиваться до max_matches_increase_threshold для повышения точности запросов агрегации. Кроме того, он также может быть автоматически снижен, если количество уникальных значений атрибута groupby меньше порогового значения.

arm64 support

Это собственно то, чего я так ждал. Теперь Manticore можно запускать нативно на Apple M1 / M2 и ARM-серверах (которые быстрее и дешевле чем amd64-сервера).

И многое другое

– 🚀 10 major фич
– ✅ 35+ minor фич
– 🐞 85 багфиксов

Leave a Comment