Сегодня команда Manticore с радостью анонсирует Manticore Search 5.0.0 . На это у нас ушло почти 5 месяцев, 450 коммитов и почти 50 тысяч строк кода были изменены. Мы хотим поблагодарить всех наших:
кто помогал нам на этом пути. Пожалуйста, поприветствуйте новую версию Manticore Search 5.0.0!
Все по умолчанию хранится
Наши старые пользователи могут помнить, что когда Manticore был форкнут от Sphinx в 2017 году, его возможности работы с базами данных были сильно ограничены, поскольку это было скорее расширением для другой базы данных, чем самостоятельной базой данных. Например:
- если вы хотели хранить оригинальные данные, вам нужно было создать строковый атрибут и поместить его туда, что может занять много ОЗУ, поскольку тогда Manticore имел только построчное хранилище, что требует хранения всех атрибутов в ОЗУ.
- и вы даже не могли выполнить
CREATE TABLE
, чтобы создать новую таблицу, вы могли только добавить новую схему в файл конфигурации.
Затем в Manticore мы добавили:
- Хранилище документов для полнотекстовых полей, что сделало возможным экономить ОЗУ, храня оригинальные документы на диске.
- Режим реального времени, чтобы включить команды, такие как
CREATE TABLE
. - Новый тип данных
text
, который индексируется + хранится по умолчанию.
Но в обычном режиме вам все еще нужно было указывать stored_fields = ...
.
Теперь вам больше не нужно, все хранится по умолчанию с Manticore 5. Если вам это не нужно, вы можете отключить это, указав stored_fields =
(пустое значение). Это сделает все поля ненастраиваемыми.
Вторичные индексы
Manticore 5 предоставляет поддержку Manticore Columnar Library 1.15.2 , которая добавляет поддержку вторичных индексов . Функциональность предоставляется в Manticore 5 на этапе бета-версии, поэтому:
- Создание вторичных индексов включено по умолчанию для обычных и режимов колоночных и построчных индексов (если используется Manticore Columnar Library ),
- но чтобы включить его для поиска, вам нужно установить
secondary_indexes = 1
либо в вашем файле конфигурации, либо с помощью SET GLOBAL .
Новая функциональность поддерживается во всех операционных системах, кроме старого Debian Stretch и Ubuntu Xenial.
Библиотека Manticore Columnar использует индекс по кусочным геометрическим моделям , который использует изученное отображение между индексируемыми ключами и их расположением в памяти. Лаконичность этого отображения в сочетании с необычным рекурсивным алгоритмом построения делает PGM-индекс структурой данных, которая значительно превосходит традиционные индексы по пространству, при этом предлагая лучшее время выполнения запросов и обновлений.
Псевдошардирование по умолчанию
Псевдошардирование, добавленное в предыдущих релизах, было протестировано и оптимизировано и теперь включено по умолчанию. Напоминаем, что псевдошардирование параллелизует выполнение поисковых запросов, используя все ваши ядра процессора.
Веб-интерфейс командной строки
Manticore 5 предоставляет новый /cli эндпоинт для запуска SQL запросов через HTTP еще проще.
Режим только для чтения
Новый режим только для чтения позволяет вам указывать слушателей, которые обрабатывают только запросы на чтение, отвергая любые записи. Это может быть полезно, если вы хотите сделать Manticore Search доступным из Интернета или менее защищенной части вашей локальной сети или просто хотите убедиться, что приложение, которое должно только читать, не может модифицировать ваши данные никаким образом.
Более быстрая загрузка данных
Ранее вы могли предоставлять несколько команд записи через HTTP JSON протокол, но они обрабатывались по одной. Теперь они обрабатываются как одна транзакция. Массовые INSERT/REPLACE/DELETE через JSON по HTTP теперь также массовые, как и через SQL. И еще больше:
Кодирование с разделением на фрагменты
Manticore 5 получает поддержку
кодирования с разделением на фрагменты
в HTTP протоколе. Теперь вы можете использовать кодирование с разделением на фрагменты в вашем приложении для передачи больших пакетов с меньшими затратами ресурсов (поскольку вам больше не нужно рассчитывать Content-Length
). На стороне сервера Manticore теперь всегда обрабатывает входящие HTTP данные поточно, не дожидаясь, пока весь пакет будет передан, как это было ранее, что:
- уменьшает пиковое потребление ОЗУ, что снижает вероятность OOM
- уменьшает время отклика (наши тесты показали снижение на 11% для обработки пакета в 100 МБ)
- позволяет вам преодолевать
max_packet_size
и передавать пакеты гораздо большего размера, чем допустимое значение
max_packet_size
(128 МБ), например, 1 ГБ за раз.
100 Continue
Кроме того, HTTP протокол теперь поддерживает заголовок 100 Continue
, который позволяет вам быстрее передавать большие партии из curl
(включая библиотеки curl, используемые различными языками программирования). Curl по умолчанию делает Expect: 100-continue
и ждет некоторое время, прежде чем фактически отправить партию. Ранее вам нужно было добавлять заголовок Expect:
, теперь это не требуется.
Все это делает Manticore 5 быстрее с точки зрения загрузки данных через HTTP.
Manticore Search без полнотекстового поиска
Ранее Manticore Search, будучи движком полнотекстового поиска, всегда требовал хотя бы одно полнотекстовое поле. Больше не требуется. Теперь вы можете использовать Manticore даже в случаях, не связанных с полнотекстовым поиском, поэтому требование наличия хотя бы одного полнотекстового поля устранено.
Быстрое получение колоннарных атрибутов
В Manticore 5 мы добавили
Быструю выборку
для атрибутов, поддерживаемых
Manticore Columnar Library
: запросы типа select * from <columnar table>
теперь значительно быстрее, чем раньше, особенно если в схеме много полей.
Неявный порог
Теперь Manticore не тратит время и ресурсы на обработку данных, которые вам не нужны в результирующем наборе, автоматически выбирая оптимальное значение cutoff
. Для некоторых запросов это значительно улучшает производительность. Недостаток в том, что это влияет на total_found
в
SHOW META
и
hits.total
в JSON-выводе. Теперь это значение является точным только в случае, если вы видите total_relation: eq
, в то время как total_relation: gte
означает, что фактическое количество совпадающих документов больше, чем значение total_found
, которое вы получили. Чтобы сохранить предыдущее поведение, вы можете использовать параметр поиска cutoff=0
, который делает total_relation
всегда равным eq
.
HTTP JSON параметры поиска
С Manticore 5 вы можете устанавливать различные параметры поиска, если используете Manticore через HTTP JSON протокол или любой клиент, основанный на нем.
HTTP JSON вложенные фильтры
JSON протокол также включает поддержку
Вложенных фильтров
с Manticore 5. Ранее вы не могли кодировать такие конструкции, как a=1 and (b=2 or c=3)
в JSON: must
(AND), should
(OR) и must_not
(NOT) работали только на самом верхнем уровне. Теперь их можно вкладывать.
И многое другое
Вышеуказанное только часть того, что было сделано с Manticore 4.2.0 и теперь стало общедоступным в новом релизе. Пожалуйста, ознакомьтесь с:
🚀 13 основными изменениями
✅ 20+ незначительными изменениями
🐞 45 исправлениями ошибок
Мы надеемся, что вам понравится использовать новую версию Manticore Search. Пожалуйста, поделитесь вашим мнением об этом:
- опубликовав тему на Форуме сообщества
- сделав отчет об ошибке или запрос функции на GitHub
- пообщавшись об этом в Общем Slack-чате
- отправив нам электронное письмо на [email protected]