Мы рады объявить о выпуске Manticore Search 3.0.0, нашего долгожданного первого крупного релиза. Это первая версия Manticore, нарушающая совместимость индексов со старыми версиями.
Загрузки доступны здесь и на странице Manticore Github . Docker‑образ доступен в Docker Hub .
Ключевые изменения
Одной из крупных проблем Manticore Search 2 было ограничение в 4 ГБ строк/JSON‑атрибутов на индекс. Чтобы обойти это ограничение, данные приходилось шардинговать по нескольким индексам. Версия 3 переосмысливает хранение индексов, снимая это ограничение и позволяя уменьшить количество шардов (или просто использовать один индекс), а также полностью оптимизировать RealTime‑индекс до одного чанка в случаях, затронутых ограничением.
Совместимость индексов нарушена, поскольку новое хранилище индексов имеет другую структуру. Существующие индексы, созданные в Manticore 2, не могут быть загружены в Manticore 3, но их можно легко обновить с помощью инструмента конвертации .
Также нет ограничений на динамическое обновление атрибутов (с использованием UPDATE ). Ранее строковые атрибуты можно было обновлять только командой REPLACE, а для JSON‑атрибутов можно было обновлять только скалярные значения ключей.
Списки kill‑list для обычных индексов теперь применяются при загрузке/ротации индекса, а не при каждом запросе. Индекс, содержащий kill‑list, должен определить список индексов , для которых kill‑list будет применяться при загрузке/ротации. Это устраняет необходимость задавать определённый порядок поиска по индексам, как раньше. Если вы ротируете несколько индексов одновременно, Manticore Search выполнит умную ротацию: сначала будут ротированы индексы, не попадающие в kill‑list, а в конце — индексы, отмеченные в kill‑list.
Идентификаторы документов теперь являются положительными знаковыми 64‑битными целыми числами, ранее они были беззнаковыми 64‑битными целыми.
Другие улучшения
Добавлена функция CONCAT() — позволяет объединять две и более строк. Если нужно объединять нестроковые аргументы, можно дополнительно использовать TO_STRING().
Репликация получила несколько улучшений:
node_address директива — позволяет указать сетевой адрес узла
JOIN CLUSTER обеспечивает более простой синтаксис, позволяя указать только адрес и порт одного из узлов кластера с помощью конструкции 'AT'
ALTER CLUSTER обновление узлов кластера — для обновления списка узлов в кластере
список узлов выводится в SHOW STATUS
Заметки о производительности
Запросы AND обычно работают быстрее в v3. Ускорение зависит от частоты ключевых слов. Тесты, включающие топ‑1000 из коллекции, показали небольшие приросты в случае множества часто встречающихся ключевых слов (~10 %) и более 60 % когда некоторые ключевые слова находились в конце топ‑1000. Реже встречающиеся ключевые слова должны давать ещё больший прирост.
Поиск с подстановками несколько процентов быстрее в v3. Поиск OR в некоторых случаях может быть несколько процентов медленнее (не более 9 % в проведённых тестах); эта проблема будет решена в будущих релизах. RT‑индексы с большим количеством дисковых чанков теперь работают значительно быстрее.
Благодаря ранним тестировщикам v3 уже работает в продакшене тысячи часов. Ниже представлены несколько наблюдаемых улучшений:
v3 лучше в плане фрагментации ОЗУ:

Некоторые пользователи, уже тестирующие v3 в продакшене, сообщают о лучшей средней производительности по сравнению с 2.8:

Что нужно знать перед обновлением?
Вам потребуется переиндексировать все индексы или использовать инструмент конвертации .
Если вы используете kill‑list, в объявлении индексов требуются изменения . RT‑индексы не должны содержать данных в RAM‑чанке (выполните FLUSH RAMCHUNK) во время конвертации.
Для распределённых конфигураций миграция может начинаться с дата‑узлов (агентов) к мастер‑узлам, так как мастер‑узел, работающий на v2, может взаимодействовать с агентами, работающими на v3.
Ничего не изменилось в синтаксисе поисковых запросов! Все протоколы подключения не требуют обновлений или изменений для работы с Manticore 3. Как только индексы загружены, существующие клиенты могут просто подключиться к новой версии.
Полный перечень изменений и шагов миграции можно найти в руководстве по миграции .
Хотя Manticore 3 был тщательно протестирован в продакшене несколькими ранними пользователями, могут оставаться некоторые проблемы. Мы будем благодарны, если вы сообщите о любой проблеме в трекер GitHub .
Для полного списка изменений в версии 3.0.0 обратитесь к заметке о выпуске .
Будущие заметки
Что касается HTTP‑протокола, ожидайте следующие изменения в будущих релизах: эндпоинт /search будет устаревшим, а формат ответа /sql будет таким же, как у эндпоинта /json.