Manticore Search — это высокопроизводительная мультихранилищная база данных, созданная специально для поиска и аналитики, предлагающая молниеносный полнотекстовый поиск, индексирование в реальном времени и расширенные функции, такие как векторный поиск и колоночное хранение для эффективного анализа данных. Разработанная для работы с малыми и большими наборами данных, она обеспечивает бесшовную масштабируемость и мощную аналитику для современных приложений.
Будучи открытой базой данных (доступной на GitHub), Manticore Search была создана в 2017 году как продолжение движка Sphinx Search. Наша команда разработчиков взяла все лучшие функции Sphinx и значительно улучшила его функциональность, исправив сотни ошибок на этом пути (подробности в нашем журнале изменений). Manticore Search — это современная, быстрая и легковесная база данных с исключительными возможностями полнотекстового поиска, построенная на практически полном переписывании своего предшественника.
Manticore Search поддерживает возможность добавления эмбеддингов, созданных вашими моделями машинного обучения, к каждому документу, а затем выполнения поиска ближайших соседей по ним. Это позволяет создавать функции, такие как поиск по сходству, рекомендации, семантический поиск и ранжирование по релевантности на основе алгоритмов NLP, а также поиск по изображениям, видео и звукам.
Manticore Search поддерживает запросы JOIN через SQL и JSON, позволяя комбинировать данные из нескольких таблиц.
Manticore Search использует умное параллелирование запросов для уменьшения времени отклика и полного использования всех ядер процессора при необходимости.
Оптимизатор запросов на основе стоимости использует статистические данные о индексированных данных для оценки относительных затрат различных планов выполнения для данного запроса. Это позволяет оптимизатору определить самый эффективный план получения нужных результатов, учитывая такие факторы, как размер индексированных данных, сложность запроса и доступные ресурсы.
Manticore предлагает как построчное, так и колоночное хранение для работы с наборами данных различных размеров. Традиционный и по умолчанию используемый построчный вариант доступен для наборов данных всех размеров — малых, средних и больших, тогда как колоночное хранение предоставляется через Manticore Columnar Library для еще больших наборов данных. Главное отличие этих вариантов хранения в том, что построчное хранение требует, чтобы все атрибуты (исключая полнотекстовые поля) хранились в ОЗУ для оптимальной производительности, тогда как колоночное хранение этого не требует, обеспечивая меньшее потребление памяти, но с возможным слегка более медленным выполнением (как демонстрируют статистические данные на https://db-benchmarks.com/).
Manticore Columnar Library использует индекс Piecewise Geometric Model index, который использует обучаемое отображение между индексируемыми ключами и их расположением в памяти. Компактность этого отображения, в сочетании с особым рекурсивным алгоритмом построения, делает PGM-индекс структурой данных, которая превосходит традиционные индексы по объему памяти на порядки, при этом обеспечивая лучшее время выполнения запросов и обновлений. Вторичные индексы включены по умолчанию для всех числовых и строковых полей, и их можно включить для json-атрибутов.
Нативный синтаксис Manticore — SQL, он поддерживает SQL через HTTP и протокол MySQL, что позволяет подключаться через популярные клиенты mysql на любом языке программирования.
Для более программируемого подхода к управлению данными и схемами Manticore предоставляет протокол HTTP JSON, аналогичный Elasticsearch.
Вы можете выполнять совместимые с Elasticsearch insert и replace JSON-запросы, что позволяет использовать Manticore с такими инструментами, как Logstash (версии < 7.13), Filebeat и другими из семейства Beats.
Легко создавать, обновлять и удалять таблицы онлайн или через конфигурационный файл.
Демон Manticore Search разработан на C++, что обеспечивает быстрое время запуска и эффективное использование памяти. Низкоуровневые оптимизации дополнительно повышают производительность. Другой важный компонент, называемый Manticore Buddy, написан на PHP и используется для высокоуровневой функциональности, не требующей молниеносного времени отклика или чрезвычайно высокой вычислительной мощности. Хотя внесение вклада в код C++ может быть сложной задачей, добавление новой SQL/JSON команды с помощью Manticore Buddy должно быть простым процессом.
Новые или обновленные документы могут быть прочитаны немедленно.
Мы предлагаем бесплатные интерактивные курсы, чтобы сделать обучение легким.
Хотя Manticore не полностью соответствует ACID, он поддерживает изолированные транзакции для атомарных изменений и бинарное логирование для безопасной записи.
Данные могут быть распределены по серверам и центрам обработки данных, причем любой узел Manticore Search может выступать как балансировщиком нагрузки, так и узлом данных. Manticore реализует практически синхронную мультимастерную репликацию с использованием библиотеки Galera, обеспечивая согласованность данных на всех узлах, предотвращая потерю данных и предоставляя исключительную производительность репликации.
Manticore оснащен внешним инструментом manticore-backup и SQL-командой BACKUP для упрощения процесса резервного копирования и восстановления ваших данных. В качестве альтернативы вы можете использовать mysqldump для создания логических резервных копий.
Инструмент indexer и всеобъемлющий синтаксис конфигурации Manticore позволяют легко синхронизировать данные из таких источников, как MySQL, PostgreSQL, совместимые с ODBC базы данных, XML и CSV.
Вы можете интегрировать Manticore Search с сервером MySQL/MariaDB, используя движок FEDERATED или через ProxySQL.
Вы можете использовать Apache Superset и Grafana для визуализации данных, хранящихся в Manticore. Различные инструменты MySQL могут быть использованы для интерактивной разработки запросов Manticore, такие как HeidiSQL и DBForge.
Вы также можете использовать Manticore Search с Kibana.
Manticore предлагает специальный тип таблицы — таблицу типа "percolate", которая позволяет искать запросы вместо данных, что делает ее эффективным инструментом для фильтрации потоков полнотекстовых данных. Просто сохраните ваши запросы в таблице, обрабатывайте поток данных, отправляя каждую партию документов в Manticore Search, и получайте только те результаты, которые соответствуют вашим сохраненным запросам.
Manticore Search универсален и может применяться в различных сценариях, включая:
Полнотекстовый поиск:
Аналитика данных:
Фасетный поиск:
Геопространственный поиск:
Исправление орфографии:
Автодополнение:
Фильтрация потоков данных: