Мы рады сообщить о выпуске Manticore Search 3.0.0, нашего долгожданного первого крупного релиза. Это первая версия Manticore, которая нарушает совместимость индексов со старыми версиями.
Загрузки доступны здесь и на странице Manticore Github . Образ Docker доступен на Docker Hub .
Основные изменения
Одна из больших проблем Manticore Search 2 заключалась в ограничении на 4 ГБ строк/json атрибутов на индекс. Чтобы преодолеть это ограничение, данные приходилось делить на несколько индексов. Версия 3 перерабатывает хранение индекса, что снимает это ограничение и делает возможным уменьшение количества шардов (или просто использование одного индекса), а также полностью оптимизировать индекс в реальном времени до одного куска в случаях, затронутых ограничением.
Совместимость индекса нарушена, поскольку новое хранение индекса имеет другую структуру. Существующие индексы, созданные с Manticore 2, не могут быть загружены с помощью Manticore 3, но их можно легко обновить с помощью инструмента конверсии .
Также нет ограничений по динамическому обновлению атрибутов (с использованием UPDATE ). Ранее строковые атрибуты можно было обновлять только с помощью команды REPLACE, а для JSON-атрибутов можно было обновлять только скалярные ключевые значения.
Списки убийств для обычных индексов теперь применяются при загрузке/ротировании индекса, а не по запросу. Индекс, содержащий списки убийств, должен будет определить список индексов , к которым будут применяться списки убийств при загрузке/ротировании. Это устраняет необходимость в определении конкретного порядка для поиска в индексах, как это было раньше. Если вы ротируете несколько индексов одновременно, Manticore Search выполнит умную ротацию для вас - сначала он ротирует индексы, не предназначенные для списков убийств, а затем индексы, помеченные целями списков убийств.
Идентификаторы документов теперь положительные знаковые 64-битные целые числа, ранее это были беззнаковые 64-битные целые числа.
Другие улучшения
Добавлена функция CONCAT() - позволяет конкатенировать две или более строки. Если вы хотите конкатенировать нестроковые аргументы, вы также можете использовать TO_STRING().
Репликация получила несколько улучшений:
Директива node_address - позволяет указать сетевой адрес узла
JOIN CLUSTER обеспечивает более простой синтаксис, предоставляя только адрес и порт одного из узлов кластера с использованием условия ‘AT’
ALTER CLUSTER обновление узлов кластера - для обновления списка узлов в кластере
список узлов выводится в SHOW STATUS
Примечания по производительности
Запросы AND в целом быстрее в версии 3. Ускорение зависит от частоты ключевых слов. Тесты, включая топ-1000 из коллекции, показали небольшие приросты в случае нескольких самых распространенных ключевых слов (~10%) до более 60%, когда некоторые ключевые слова находились в конце топ-1000. Редкие ключевые слова должны обеспечивать еще большие приросты.
Поисковые запросы с подстановочными знаками на несколько процентов быстрее в версии 3. Запросы OR в некоторых случаях могут быть на несколько процентов медленнее (максимум 9% в проведенных тестах), эта проблема будет решена в будущих релизах. Индексы RT с большим количеством дисковых кусков теперь значительно быстрее.
Благодаря ранним тестировщикам версия 3 уже работает тысячи часов в производственной среде. Ниже приведены несколько наблюдаемых улучшений:
Версия 3 лучше в отношении фрагментации ОЗУ:
Некоторые пользователи, уже тестирующие версию 3 в производственной среде, сообщают о лучшей средней производительности по сравнению с 2.8:
Что нужно знать перед обновлением?
Вам нужно будет переиндексировать все индексы или использовать инструмент конверсии .
Если вы используете списки убийств, в декларациях индексов требуются изменения . Индексы RT не должны иметь данных в кусках ОЗУ (выполните FLUSH RAMCHUNK) в процессе конверсии.
Для распределенных конфигураций миграция может начаться от узлов данных (агентов) к главному узлу(узлам), так как главный узел, работающий на версии 2, может общаться с агентами, работающими на версии 3.
Ничего не изменилось в плане синтаксиса поисковых запросов! Все протоколы подключения не требуют никаких обновлений или изменений для работы с Manticore 3. Как только индексы загружены, существующие клиенты могут просто подключиться к новой версии.
Полная справка об изменениях и шагах для миграции доступна в руководстве по миграции .
Хотя Manticore 3 был внимательно протестирован в производственной среде несколькими ранними пользователями, могут все еще возникать некоторые проблемы. Мы будем признательны, если вы сообщите о любых проблемах в трекере github .
Полная версия изменений для 3.0.0 доступна в заметках о релизе .
Будущие заметки
Concerning HTTP protocol, expect the following changes in next releases: /search endpoint will be deprecated and /sql response format will be the same as /json endpoint.