5 лет назад мы сделали форк Manticore из open source версии некогда популярного open source поискового движка Sphinx 2.3.2. У нас было два пакетика травы, семьдесят пять ампул мескалина, три C++ разработчика, один саппорт-инженер, опытный пользователь, менеджер, мать пятерых детей, помогающая нам на полставки и гора багов, крэшей и технических долгов. Взяв в руки напильники и прочий шанцевый инструмент мы начали допиливать форк до индустриальных стандартов (читай "Эластика"). Не то чтобы Sphinx было невозможно использовать, но многих вещей не хватало, а имеющиеся не всегда работали стабильно и корректно, а если уж начал, то к делу надо подходить серьёзно. И вот, по прошествии 5 лет и сотен новых пользователей мы готовы сказать, что Manticore можно использовать как альтернативу Elasticsearch и для полнотекстового поиска и для аналитики данных.

В этой статье хочется:

  • вспомнить, как всё начиналось и что было до SOLR и Elasticsearch;

  • объективно обрисовать текущую ситуацию c Manticore;

  • попытаться понять куда нам двигаться дальше.

Оглавление

Немного истории ✳️ Скорость поиска ✳️ Скорость поиска ✳️ Скорость записи ✳️ На чём написано ✳️ Open source ✳️ Json vs SQL ✳️ Скорость запуска и легковесность процесса ✳️ Near-real-time vs real-time ✳️ Полнотекст ✳️ Schemaless ✳️ Интеграции с приложениями ✳️ Репликация ✳️ Шардинг и распределённые таблицы ✳️ Простота изучения и использования ✳️ Что дальше? ✳️ Выводы

▍Немного истории

2001

Открылся первый Apple store, зарелизился Windows XP, iTunes и Max OS X.

Гениальный Андрей Аксёнов начал работать над Sphinx Search, за что ему большое спасибо! Ещё не было ни SOLR, ни тем более Elasticsearch, но уже был Lucene, на котором они оба и были в дальнейшем построены.

2010

Появился Retina-дисплэй, systemd, айпад и Elasticsearch.

К этому времени Sphinx уже был популярным полнотекстовым движком, но концепция Сфинкса “данные лежат где-то, а мы просто делаем полнотекстовый индекс, который нужно регулярно перестраивать”, оказалась уже не такой интересной, как эластиковская “пишите в меня по HTTP что угодно в real-time, я сам разберусь что к чему и разложу по нодам”. У SOLR на тот момент было не всё хорошо с распределённостью, да и JSON набирал популярность, а XML улетал, но обещал вернуться. В итоге Эластик начал быстро набирать популярность.

2017: прошло ещё 7 лет.

  • Эластик прочно закрепился как стандартный инструмент для полнотекстового поиска и аналитики по логам и данным.

  • Sphinx прекратил своё развитие в виде open source проекта, да и разработка в принципе существенно замедлилась, а на какое-то время была полностью приостановлена

  • Многим пользователям Sphinx, которые умели его готовить было больно переходить на Elasticsearch. Кроме того, к тому моменту повылазили концептуальные недостатки Эластика: чрезмерное потребление памяти, сложности в поддержании больших кластеров, некоторые проблемы с производительностью.

    В итоге, фрустрирующие пользователи и некоторые бывшие разработчики Сфинкса объединились и сделали форк - Manticore Search. Наши первоочередные цели были следующие:

    • Продолжить развитие проекта в виде open source

    • Взглянуть на всё со стороны рядового юзера и добавить функциональность так необходимую ему в современных условиях

    • И всё это вылить в то, чтоб усилить сильные стороны и подтянуть слабые.

2022: прошло ещё пять лет.

Мы строили, строили и наконец построили.

???? Sphinx 2: Основной способ использования - индексация данных из внешней БД: Sphinx возвращает id, затем по id нужно идти в БД и искать там исходных документ. Схема данных соответственно описывается через конфиг.

✅ Manticore: Основной способ использования - ровно такой же, как в Mysql / Postgres и Elasticsearch: таблица создаётся запросом, данные пишут одиночными или bulk insert/replace/delete запросами, в фоне автоматически оптимизируются, за исходными документами никуда ходить не нужно. Добавлена поддержка auto id.


???? Sphinx 2: Нет репликации

✅ Manticore: Есть репликация, основанная на Galera, которую также использую в Mariadb и Percona Server


???? Sphinx 2: Запросы можно выполнять через SQL (протокол - mysql) или бинарный протокол, есть клиенты для некоторых языков программирования.

✅ Manticore: Добавился JSON похожий на эластиковский. На основе нового протокола были сделаны новые клиенты для php, python, java, javascript, elixir. Клиенты генерируются автоматически, что позволяет быстрее делать доступной новую функциональность.


???? Sphinx 2: Сложно настраивать токенизацию текстов для большинства языков

✅ Manticore: Упростили: сделали алиасы cjk и non_cjk. Сделали токенизацию китайского на основе ICU. Добавили много новых стеммеров, в том числе для украинского.


???? Sphinx 2: Нет официального docker’а и никакой поддержки в экосистеме Kubernetes

✅ Manticore: Сделали и поддерживаем официальный docker. Сделали и поддерживаем Helm chart для Kubernetes


???? Sphinx 2: Нет APT/YUM/Homebrew репозиториев

✅ Manticore: Добавили APT/YUM/Homebrew репозитории. Поддерживаются development ветки репозиториев, есть CI: пакеты собираются для всех новых коммитов.


???? Sphinx 2: Некоторым начинающим пользователям сложно понять что к чему.

✅ Manticore: Сделали платформу с интерактивными курсами - https://play.manticoresearch.com/


???? Sphinx 2: Мало примеров в документации

✅ Manticore: переписали документацию, сделали для неё собственный движок - https://manual.manticoresearch.com/


???? Sphinx 2: Баги, часто приводящие к крэшам

✅ Manticore: Крэши теперь - большая редкость. Сотни старых багов были пофикшены.


???? Sphinx 2: Распараллеливание поискового запроса возможно только в режиме один физический индекс (чанк) - один тред

✅ Manticore: Передалали всё на корутины. Сделали возможность распараллеливать любой поисковый запрос так, чтоб полностью загружать проц и уменьшать время отклика до минимума


???? Sphinx 2: Нельзя использовать без полнотекста

✅ Manticore: Можно использовать совсем без полнотекста, как любую другую базу данных


???? Sphinx 2: Неполнотекстовые данные хранятся построчно, для эффективной работы они должны быть в памяти.

✅ Manticore: Реализовали Manticore Columnar Library - внешнюю полностью независимую библиотеку, которая позволяет хранить данные поколоночно в блоках с поддержкой разных кодеков для сжатия для разных типов данных. Памяти почти не требует. Теперь можно обрабатывать намного большие объёмы.


???? Sphinx 2: Нет вторичных индексов

✅ Manticore: Вторая важная функциональность Manticore Columnar LIbrary - поддержка вторичных индексов на основе современного и инновационного алгоритма PGM.


???? Sphinx 2: Нет типа таблиц percolate для реверсивного поиска (когда в таблице лежат запросы, а на вход подаются документы, чтоб понять какие запросы их бы нашли)

✅ Manticore: Добавили таблицы типа percolate.

Это, наверное, только треть нововведений - те, которые можно увидеть невооружённым взглядом. Кроме этого, были долгие месяцы рефакторинга различных частей системы, в результате чего код стал намного проще, надёжнее и производительнее. Мы надеемся, что это привлечёт в проект новых разработчиков.

▍А что там с Эластиком?

С Эластиком всё хорошо: он не очень сложен в использовании до определённого объёма данных, есть репликация, отказоустойчивость, богатый функционал. Но есть нюансы.

Давайте поглядим на эти нюансы и на то, что из себя представляет Manticore по сравнению с Elasticsearch сейчас (июль 2022). Читатель из будущего, мы уже ещё что-то прикрутили, посмотри Changelog.

▍Скорость поиска

Производительность, а именно низкое время отклика важно во многих случаях, особенно в области аналитики по логам и данным, когда данных много, а поисковых запросов не очень. Не хочется же ждать ответа на запрос 30 секунд вместо двух? Не хочется. Так вот, к нюансам: Elasticsearch считается стандартом для log management’а, но, например, не умеет эффективно распараллеливать запрос к одному шарду индекса. А по дефолту у Elasticsearch всего 1 шард, а ядер в современных серверах намного больше. Слишком много шардов, с запасом - тоже плохо. Всё это не делает жизнь девопса, которому не всё равно на время отклика проще: нужно думать о том, на каком железе будет работать Эластик и делать соответствующие изменения.

Manticore же умеет распараллеливать поисковый запрос на все ядра безусловно и по умолчанию. Правильнее будет сказать, что Мантикора сама решает когда распараллеливать, а когда нет, но в большинстве случаев она это делает, что позволяет эффективно загрузить ядра процессора (зачастую простаивающие в случаях аналитики по логам и данным) и существенно уменьшить время отклика.

Но даже если в Эластике сделать столько шардов, сколько есть ядер на сервере, то Мантикора оказывается существенно быстрее, а именно: вот тест на 1.7 миллиарда документов, из него видно, что в общем и целом Manticore в 4 раза быстрее Эластика. Интересны детали или хотите сами воспроизвести на своём железе? Вот статья https://db-benchmarks.com/test-taxi/ (все примеры ниже также подкреплены скриптами и ссылками, пустословия в этой статье вы не найдёте).

Manticore в 4 раза быстрее тюненого Эластика на тесте в 1.7 миллиарда документов.
Manticore в 4 раза быстрее тюненого Эластика на тесте в 1.7 миллиарда документов.

Вот полярная ситуация: данных очень мало - всего 1.1 миллиона комментариев с Hacker News. И тут Manticore в разы быстрее Эластика. Детали здесь.

Manticore в 15.6 раз быстрее Эластика на тесте в 1.1 миллиона документов.
Manticore в 15.6 раз быстрее Эластика на тесте в 1.1 миллиона документов.

И ещё один тест показательный для Эластика как стандартного инструмента для анализа логов - 10 миллионов логов Nginx'а и различные вполне реалистичные аналитические запросы - Мантикора в 22 раза быстрее Эластика. Все детали по ссылке https://db-benchmarks.com/test-logs10m/ .

Manticore в 22 раз быстрее Эластика на тесте в 10 миллиона логов Nginx.
Manticore в 22 раз быстрее Эластика на тесте в 10 миллиона логов Nginx.

В общем, в низкий latency мы умеем, можем и у нас это неплохо получается на данных разного масштаба и разной структуры.

▍Скорость записи

Со скоростью записи в Эластик тоже есть нюансы. Например, датасет для теста на 1.7 миллиарда документов, рассмотренного выше был загружен:

  • В Elasticsearch - за 28 часов 33 минуты;

  • В Manticore - за 1 час 8 минут.

Это на 32-ядерном сервере с SSD. Объёмы данных после индексации получились плюс-минус одинаковые. Про то, как именно происходила загрузка можно узнать здесь. Вкратце:

  • Источник - csv.

  • В Эластике загрузка через logstash c PIPELINE_BATCH_SIZE=10000 и PIPELINE_WORKERS=32 в 32 шарда.

  • В Мантикоре - параллельная индексация в 32 шарда.

Логи загрузочного скрипта получились такие:

Elasticsearch
root@perf3 /perf/test_engines/tests/taxi # ./init                                                                                                                           WARNING: The cpuset variable is not set. Defaulting to a blank string.
Removing elasticsearch_engine ... done
Removing network test_engines_default
No stopped containers
Manticore Search (type columnar):
No stopped containers
WARNING: The cpuset variable is not set. Defaulting to a blank string.
Building manticoresearch
Step 1/4 : FROM manticoresearch/manticore:5.0.0
 ---> 32e4119b4d86
Step 2/4 : RUN apt-get -y update && apt-get -y install wget
 ---> Using cache
 ---> 6322fd861e6d
Step 3/4 : RUN wget https://repo.manticoresearch.com/manticore-repo.noarch.deb && dpkg -i manticore-repo.noarch.deb
 ---> Using cache
 ---> b70ad32ac505
Step 4/4 : RUN apt-get -y update && apt-get -y install manticore-columnar-lib
 ---> Using cache
 ---> 1fcc45e375ba

Successfully built 1fcc45e375ba
Successfully tagged manticoresearch:test
        No need to rebuild
Elasticsearch (type tuned):
No stopped containers
        Starting elasticsearch (test=taxi suffix=_tuned docker-compose -f ../../docker-compose.yml --env-file ../../.env up -d elasticsearch)
WARNING: The cpuset variable is not set. Defaulting to a blank string.
Creating network "test_engines_default" with the default driver
Creating elasticsearch_engine ... done
        Waiting for elasticsearch to come up
        Starting loading at Fri Jul  1 04:13:20 PM CEST 2022
2022/07/01 14:13:20 Setting 'pipeline.batch.size' from environment.
2022/07/01 14:13:20 Setting 'xpack.monitoring.enabled' from environment.
2022/07/01 14:13:20 Setting 'pipeline.workers' from environment.
Using bundled JDK: /usr/share/logstash/jdk
Sending Logstash logs to /usr/share/logstash/logs which is now configured via log4j2.properties
[2022-07-01T14:13:29,080][INFO ][logstash.runner          ] Log4j configuration path used is: /usr/share/logstash/config/log4j2.properties
[2022-07-01T14:13:29,084][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"7.15.2", "jruby.version"=>"jruby 9.2.19.0 (2.5.8) 2021-06-15 55810c552b OpenJDK 64-Bit Server VM 11.0.12+7 on 11.0.12+7 +jit [linux-x86_64]"}
[2022-07-01T14:13:29,087][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
[2022-07-01T14:13:29,088][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
[2022-07-01T14:13:29,240][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"5ae0d5d3-2824-4ba7-bcc0-a25e899223b0", :path=>"/usr/share/logstash/data/uuid"}
[2022-07-01T14:13:29,534][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
[2022-07-01T14:13:29,973][INFO ][org.reflections.Reflections] Reflections took 66 ms to scan 1 urls, producing 120 keys and 417 values
[2022-07-01T14:13:30,192][WARN ][deprecation.logstash.codecs.plain] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:13:30,201][WARN ][deprecation.logstash.inputs.file] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:13:30,223][WARN ][deprecation.logstash.filters.csv] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:13:30,270][WARN ][deprecation.logstash.codecs.plain] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:13:30,283][WARN ][deprecation.logstash.outputs.elasticsearch] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:13:30,292][INFO ][logstash.outputs.elasticsearch][main] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["//127.0.0.1:9200"]}
[2022-07-01T14:13:30,412][INFO ][logstash.outputs.elasticsearch][main] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://127.0.0.1:9200/]}}
[2022-07-01T14:13:30,448][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://127.0.0.1:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :message=>"Elasticsearch Unreachable: [http://127.0.0.1:9200/][Manticore::ClientProtocolException] 127.0.0.1:9200 failed to respond"}
[2022-07-01T14:13:30,460][INFO ][logstash.javapipeline    ][main] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>32, "pipeline.batch.size"=>10000, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>320000, "pipeline.sources"=>["/usr/share/logstash/pipeline/logstash.conf"], :thread=>"#<Thread:0x3cf654c4@/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:125 run>"}
[2022-07-01T14:13:30,461][WARN ][logstash.javapipeline    ][main] CAUTION: Recommended inflight events max exceeded! Logstash will run with up to 320000 events in memory in your current configuration. If your message sizes are large this may cause instability with the default heap size. Please consider setting a non-standard heap size, changing the batch size (currently 10000), or changing the number of pipeline workers (currently 32) {:pipeline_id=>"main", :thread=>"#<Thread:0x3cf654c4@/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:125 run>"}
[2022-07-01T14:13:31,275][INFO ][logstash.javapipeline    ][main] Pipeline Java execution initialization time {"seconds"=>0.81}
[2022-07-01T14:13:31,286][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
[2022-07-01T14:13:31,290][INFO ][filewatch.observingread  ][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] START, creating Discoverer, Watch with file and sincedb collections
[2022-07-01T14:13:31,305][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2022-07-01T14:13:31,336][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:13:35,455][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://127.0.0.1:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :message=>"Elasticsearch Unreachable: [http://127.0.0.1:9200/][Manticore::SocketException] Connection reset"}
[2022-07-01T14:13:40,811][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=>"http://127.0.0.1:9200/"}
[2022-07-01T14:13:40,945][INFO ][logstash.outputs.elasticsearch] Elasticsearch version determined (7.15.2) {:es_version=>7}
[2022-07-01T14:13:40,946][WARN ][logstash.outputs.elasticsearch] Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7}
[2022-07-01T14:13:44,465][INFO ][logstash.outputs.elasticsearch] Using mapping template from {:path=>"/template.json"}
[2022-07-01T14:13:44,483][INFO ][logstash.outputs.elasticsearch] Installing Elasticsearch template {:name=>"logstash"}

[2022-07-01T14:25:18,564][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:36:51,663][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:47:48,196][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T14:58:24,202][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T15:09:34,405][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T15:21:00,702][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T15:32:29,427][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T15:43:59,768][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T15:55:24,851][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T16:06:51,722][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T16:18:22,191][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T16:29:54,860][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T16:41:22,213][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T16:52:53,302][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T17:04:26,699][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T17:16:05,588][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T17:27:40,146][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T17:39:11,727][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T17:50:43,353][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T18:02:13,095][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T18:13:59,913][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T18:25:38,646][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T18:37:17,263][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T18:48:55,751][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T19:00:51,379][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T19:13:09,935][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T19:25:16,811][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T19:37:15,727][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T19:48:59,923][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T20:00:46,024][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T20:12:27,410][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T20:24:06,169][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T20:35:44,409][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T20:47:16,165][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T20:58:55,137][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T21:10:32,131][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T21:22:13,640][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T21:33:58,533][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T21:45:30,972][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T21:57:09,853][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T22:08:51,288][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T22:20:38,762][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T22:32:13,204][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T22:43:49,824][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T22:55:52,191][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T23:07:49,883][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T23:20:17,374][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T23:32:19,973][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T23:44:15,294][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-01T23:55:47,100][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T00:07:11,897][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T00:18:40,233][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T00:30:32,451][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T00:42:16,614][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T00:53:53,569][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T01:05:28,623][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T01:17:13,903][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T01:29:10,660][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T01:41:00,455][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T01:52:42,559][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T02:04:14,124][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T02:16:04,127][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T02:27:51,732][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T02:39:56,423][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T02:51:54,136][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T03:03:46,056][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T03:15:54,520][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T03:26:58,089][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T03:38:05,988][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T03:48:58,174][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T03:59:49,479][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T04:10:37,353][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T04:21:19,909][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T04:31:52,571][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T04:42:25,201][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T04:53:00,526][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T05:03:39,891][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T05:14:19,439][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T05:24:59,133][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T05:35:34,450][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T05:46:12,227][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T05:56:52,682][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T06:07:30,958][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T06:18:08,658][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T06:28:49,737][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T06:39:34,836][WARN ][deprecation.logstash.codecs.plain][main][df6082e07bf59ecdc49074832e93c5e058465344886b3ad93818b05a69e52527] Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
[2022-07-02T06:46:35,043][INFO ][logstash.javapipeline    ][main] Pipeline terminated {"pipeline.id"=>"main"}
[2022-07-02T06:46:35,202][INFO ][logstash.pipelinesregistry] Removed pipeline from registry successfully {:pipeline_id=>:main}
[2022-07-02T06:46:35,211][INFO ][logstash.runner          ] Logstash shut down.
        Finished loading at Sat Jul  2 08:46:36 AM CEST 2022
Clickhouse:
        No need to rebuild

Manticore Search
root@perf3 /perf/test_engines/tests/taxi # ./init
WARNING: The cpuset variable is not set. Defaulting to a blank string.
Stopping elasticsearch_engine ... done
Removing elasticsearch_engine ... done
Removing network test_engines_default
No stopped containers
Manticore Search (type columnar):
No stopped containers
WARNING: The cpuset variable is not set. Defaulting to a blank string.
Building manticoresearch
Step 1/4 : FROM manticoresearch/manticore:5.0.0
 ---> 32e4119b4d86
Step 2/4 : RUN apt-get -y update && apt-get -y install wget
 ---> Using cache
 ---> 6322fd861e6d
Step 3/4 : RUN wget https://repo.manticoresearch.com/manticore-repo.noarch.deb && dpkg -i manticore-repo.noarch.deb
 ---> Using cache
 ---> b70ad32ac505
Step 4/4 : RUN apt-get -y update && apt-get -y install manticore-columnar-lib
 ---> Using cache
 ---> 1fcc45e375ba

Successfully built 1fcc45e375ba
Successfully tagged manticoresearch:test
        Starting loading at Sun Jul  3 07:26:48 PM CEST 2022
WARNING: The cpuset variable is not set. Defaulting to a blank string.
Creating network "test_engines_default" with the default driver
Creating test_engines_manticoresearch_run ... done
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi2'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi5'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi6'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi9'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi15'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi1'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi12'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi14'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi8'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi7'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi13'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi10'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi3'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi4'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi11'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi16'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi17'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi18'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi19'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi20'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi21'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi22'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi23'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi24'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi25'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi26'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi27'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi28'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi29'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi30'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi31'...
Manticore 5.0.0 b4cb7da02@220518 release (columnar 1.15.2 b0bcafb@220518) (secondary 1.15.2 b0bcafb@220518)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2022, Manticore Software LTD (https://manticoresearch.com)

using config file '/etc/manticoresearch/manticore.conf'...
indexing index 'taxi32'...
collected 40000000 docs, 80.0 MB
collected 40000000 docs, 80.0 MB
collected 40000000 docs, 80.0 MB
collected 40000000 docs, 80.0 MB
collected 40000000 docs, 80.0 MB
collected 40000000 docs, 80.0 MB
collected 40000000 docs, 80.0 MB
collected 40000000 docs, 80.0 MB
collected 40000000 docs, 814.9 MB
creating lookup: 40000.0 Kdocs, 100.0% done
creating lookup: 40000.0 Kdocs, 100.0% done
creating lookup: 40000.0 Kdocs, 100.0% done
creating lookup: 40000.0 Kdocs, 100.0% done
creating lookup: 40000.0 Kdocs, 100.0% done
creating lookup: 40000.0 Kdocs, 100.0% done
creating lookup: 40000.0 Kdocs, 100.0% done
creating lookup: 40000.0 Kdocs, 100.0% done
sorted 80.0 Mhits, 100.0% done
total 40000000 docs, 80000000 bytes
total 2116.941 sec, 37790 bytes/sec, 18895.18 docs/sec
total 530 reads, 3.914 sec, 1916.2 kb/call avg, 7.3 msec/call avg
total 8347 writes, 5.855 sec, 406.9 kb/call avg, 0.7 msec/call avg
sorted 80.0 Mhits, 100.0% done
total 40000000 docs, 80000000 bytes
total 2118.297 sec, 37766 bytes/sec, 18883.09 docs/sec
total 530 reads, 3.850 sec, 1916.2 kb/call avg, 7.2 msec/call avg
total 8371 writes, 5.813 sec, 406.5 kb/call avg, 0.6 msec/call avg
sorted 80.0 Mhits, 100.0% done
total 40000000 docs, 80000000 bytes
total 2119.772 sec, 37739 bytes/sec, 18869.94 docs/sec
total 530 reads, 4.239 sec, 1916.2 kb/call avg, 7.9 msec/call avg
total 8742 writes, 5.988 sec, 399.9 kb/call avg, 0.6 msec/call avg
sorted 80.0 Mhits, 100.0% done
total 40000000 docs, 80000000 bytes
total 2121.282 sec, 37713 bytes/sec, 18856.51 docs/sec
total 530 reads, 3.697 sec, 1916.2 kb/call avg, 6.9 msec/call avg
total 8941 writes, 3.312 sec, 396.6 kb/call avg, 0.3 msec/call avg
sorted 80.0 Mhits, 100.0% done
sorted 80.0 Mhits, 100.0% done
total 40000000 docs, 80000000 bytes
total 2124.098 sec, 37663 bytes/sec, 18831.52 docs/sec
total 530 reads, 3.686 sec, 1916.2 kb/call avg, 6.9 msec/call avg
total 8972 writes, 3.289 sec, 396.1 kb/call avg, 0.3 msec/call avg
total 40000000 docs, 80000000 bytes
total 2124.121 sec, 37662 bytes/sec, 18831.31 docs/sec
total 530 reads, 3.497 sec, 1916.2 kb/call avg, 6.5 msec/call avg
total 8916 writes, 3.380 sec, 397.0 kb/call avg, 0.3 msec/call avg
sorted 80.0 Mhits, 100.0% done
total 40000000 docs, 80000000 bytes
total 2130.926 sec, 37542 bytes/sec, 18771.17 docs/sec
total 530 reads, 7.057 sec, 1916.2 kb/call avg, 13.3 msec/call avg
total 9074 writes, 3.303 sec, 394.5 kb/call avg, 0.3 msec/call avg
sorted 80.0 Mhits, 100.0% done
total 40000000 docs, 80000000 bytes
total 2131.300 sec, 37535 bytes/sec, 18767.88 docs/sec
total 530 reads, 7.140 sec, 1916.2 kb/call avg, 13.4 msec/call avg
total 9005 writes, 5.885 sec, 395.6 kb/call avg, 0.6 msec/call avg
collected 52817071 docs, 105.6 MB
creating lookup: 40000.0 Kdocs, 100.0% done
sorted 163.8 Mhits, 100.0% done
total 40000000 docs, 814943250 bytes
total 2387.474 sec, 341341 bytes/sec, 16754.10 docs/sec
total 748 reads, 5.297 sec, 1846.8 kb/call avg, 7.0 msec/call avg
total 15726 writes, 8.017 sec, 363.3 kb/call avg, 0.5 msec/call avg
creating lookup: 52817.0 Kdocs, 100.0% done
sorted 105.6 Mhits, 100.0% done
total 52817071 docs, 105634142 bytes
total 2752.827 sec, 38372 bytes/sec, 19186.48 docs/sec
total 947 reads, 3.342 sec, 1416.1 kb/call avg, 3.5 msec/call avg
total 11846 writes, 6.872 sec, 396.2 kb/call avg, 0.5 msec/call avg
collected 60000000 docs, 1663.3 MB
collected 60000000 docs, 1760.9 MB
collected 60000000 docs, 2526.3 MB
collected 60000000 docs, 2526.9 MB
collected 60000000 docs, 2521.6 MB
collected 60000000 docs, 2527.2 MB
collected 60000000 docs, 2519.4 MB
collected 60000000 docs, 2528.9 MB
collected 60000000 docs, 2550.7 MB
collected 60000000 docs, 2530.5 MB
collected 60000000 docs, 2535.5 MB
collected 60000000 docs, 2521.5 MB
collected 60000000 docs, 2524.7 MB
collected 60000000 docs, 2530.4 MB
collected 60000000 docs, 2541.5 MB
collected 60000000 docs, 2523.3 MB
collected 60000000 docs, 2545.0 MB
collected 60000000 docs, 2523.0 MB
collected 60000000 docs, 2529.6 MB
collected 60000000 docs, 2533.7 MB
collected 60000000 docs, 2533.7 MB
collected 60000000 docs, 2533.0 MB
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
sorted 296.5 Mhits, 100.0% done
total 60000000 docs, 1663373694 bytes
total 3755.841 sec, 442876 bytes/sec, 15975.11 docs/sec
total 1890 reads, 6.795 sec, 1210.9 kb/call avg, 3.5 msec/call avg
total 27244 writes, 8.377 sec, 360.1 kb/call avg, 0.3 msec/call avg
sorted 286.6 Mhits, 100.0% done
total 60000000 docs, 1760925599 bytes
total 3781.297 sec, 465693 bytes/sec, 15867.56 docs/sec
total 1861 reads, 5.982 sec, 1223.1 kb/call avg, 3.2 msec/call avg
total 32940 writes, 9.832 sec, 338.7 kb/call avg, 0.2 msec/call avg
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
creating lookup: 60000.0 Kdocs, 100.0% done
sorted 394.0 Mhits, 100.0% done
total 60000000 docs, 2526368830 bytes
total 4003.871 sec, 630981 bytes/sec, 14985.49 docs/sec
total 2506 reads, 15.430 sec, 1085.0 kb/call avg, 6.1 msec/call avg
total 36437 writes, 10.878 sec, 346.9 kb/call avg, 0.2 msec/call avg
sorted 398.1 Mhits, 100.0% done
total 60000000 docs, 2550752406 bytes
total 4030.026 sec, 632936 bytes/sec, 14888.23 docs/sec
total 2608 reads, 11.693 sec, 1047.5 kb/call avg, 4.4 msec/call avg
total 35896 writes, 10.655 sec, 349.2 kb/call avg, 0.2 msec/call avg
sorted 394.5 Mhits, 100.0% done
total 60000000 docs, 2526941479 bytes
total 4039.151 sec, 625611 bytes/sec, 14854.60 docs/sec
total 2508 reads, 10.428 sec, 1084.2 kb/call avg, 4.1 msec/call avg
total 36716 writes, 10.820 sec, 345.5 kb/call avg, 0.2 msec/call avg
sorted 395.6 Mhits, 100.0% done
total 60000000 docs, 2533004314 bytes
total 4040.958 sec, 626832 bytes/sec, 14847.96 docs/sec
total 2599 reads, 10.602 sec, 1047.5 kb/call avg, 4.0 msec/call avg
total 36421 writes, 13.513 sec, 346.1 kb/call avg, 0.3 msec/call avg
sorted 395.0 Mhits, 100.0% done
total 60000000 docs, 2528909232 bytes
total 4042.235 sec, 625621 bytes/sec, 14843.27 docs/sec
total 2510 reads, 12.530 sec, 1084.5 kb/call avg, 4.9 msec/call avg
total 35811 writes, 13.278 sec, 348.4 kb/call avg, 0.3 msec/call avg
sorted 395.1 Mhits, 100.0% done
total 60000000 docs, 2530457184 bytes
total 4043.242 sec, 625848 bytes/sec, 14839.57 docs/sec
total 2510 reads, 10.881 sec, 1084.3 kb/call avg, 4.3 msec/call avg
total 36415 writes, 13.446 sec, 346.8 kb/call avg, 0.3 msec/call avg
sorted 394.6 Mhits, 100.0% done
total 60000000 docs, 2519499069 bytes
total 4043.766 sec, 623057 bytes/sec, 14837.65 docs/sec
total 2508 reads, 11.577 sec, 1082.6 kb/call avg, 4.6 msec/call avg
total 35936 writes, 10.685 sec, 348.6 kb/call avg, 0.2 msec/call avg
sorted 396.3 Mhits, 100.0% done
total 60000000 docs, 2535539179 bytes
total 4045.012 sec, 626831 bytes/sec, 14833.08 docs/sec
total 2601 reads, 10.332 sec, 1047.6 kb/call avg, 3.9 msec/call avg
total 36545 writes, 10.750 sec, 345.9 kb/call avg, 0.2 msec/call avg
sorted 394.8 Mhits, 100.0% done
total 60000000 docs, 2527225224 bytes
total 4045.299 sec, 624731 bytes/sec, 14832.03 docs/sec
total 2509 reads, 10.903 sec, 1084.0 kb/call avg, 4.3 msec/call avg
total 35913 writes, 10.725 sec, 348.2 kb/call avg, 0.2 msec/call avg
sorted 394.9 Mhits, 100.0% done
total 60000000 docs, 2523385127 bytes
total 4045.569 sec, 623740 bytes/sec, 14831.03 docs/sec
total 2509 reads, 7.503 sec, 1081.6 kb/call avg, 2.9 msec/call avg
total 36191 writes, 10.624 sec, 347.4 kb/call avg, 0.2 msec/call avg
sorted 394.9 Mhits, 100.0% done
total 60000000 docs, 2524711893 bytes
total 4046.779 sec, 623881 bytes/sec, 14826.60 docs/sec
total 2509 reads, 10.721 sec, 1082.9 kb/call avg, 4.2 msec/call avg
total 36326 writes, 10.709 sec, 346.5 kb/call avg, 0.2 msec/call avg
sorted 395.1 Mhits, 100.0% done
total 60000000 docs, 2529673951 bytes
total 4048.110 sec, 624902 bytes/sec, 14821.72 docs/sec
total 2510 reads, 9.881 sec, 1083.9 kb/call avg, 3.9 msec/call avg
total 36528 writes, 10.929 sec, 346.3 kb/call avg, 0.2 msec/call avg
sorted 394.8 Mhits, 100.0% done
total 60000000 docs, 2530548084 bytes
total 4048.832 sec, 625006 bytes/sec, 14819.08 docs/sec
total 2509 reads, 11.065 sec, 1085.1 kb/call avg, 4.4 msec/call avg
total 36033 writes, 13.487 sec, 348.0 kb/call avg, 0.3 msec/call avg
sorted 396.6 Mhits, 100.0% done
total 60000000 docs, 2541500170 bytes
total 4049.268 sec, 627644 bytes/sec, 14817.49 docs/sec
total 2603 reads, 9.141 sec, 1047.9 kb/call avg, 3.5 msec/call avg
total 35976 writes, 10.642 sec, 348.3 kb/call avg, 0.2 msec/call avg
sorted 397.1 Mhits, 100.0% done
total 60000000 docs, 2545075714 bytes
total 4049.585 sec, 628478 bytes/sec, 14816.33 docs/sec
total 2605 reads, 10.802 sec, 1048.6 kb/call avg, 4.1 msec/call avg
total 36079 writes, 10.748 sec, 348.3 kb/call avg, 0.2 msec/call avg
sorted 393.8 Mhits, 100.0% done
total 60000000 docs, 2521600380 bytes
total 4050.387 sec, 622557 bytes/sec, 14813.39 docs/sec
total 2505 reads, 8.642 sec, 1084.8 kb/call avg, 3.4 msec/call avg
total 37029 writes, 10.997 sec, 345.8 kb/call avg, 0.2 msec/call avg
sorted 394.4 Mhits, 100.0% done
total 60000000 docs, 2521590009 bytes
total 4050.635 sec, 622517 bytes/sec, 14812.48 docs/sec
total 2507 reads, 9.764 sec, 1084.3 kb/call avg, 3.8 msec/call avg
total 36405 writes, 10.763 sec, 346.0 kb/call avg, 0.2 msec/call avg
sorted 395.5 Mhits, 100.0% done
total 60000000 docs, 2533750585 bytes
total 4052.470 sec, 625235 bytes/sec, 14805.78 docs/sec
total 2598 reads, 8.921 sec, 1046.4 kb/call avg, 3.4 msec/call avg
total 35573 writes, 10.726 sec, 350.0 kb/call avg, 0.3 msec/call avg
sorted 394.6 Mhits, 100.0% done
total 60000000 docs, 2523017966 bytes
total 4054.196 sec, 622322 bytes/sec, 14799.48 docs/sec
total 2508 reads, 9.315 sec, 1083.1 kb/call avg, 3.7 msec/call avg
total 36474 writes, 10.862 sec, 346.0 kb/call avg, 0.2 msec/call avg
sorted 395.9 Mhits, 100.0% done
total 60000000 docs, 2533751399 bytes
total 4058.118 sec, 624366 bytes/sec, 14785.17 docs/sec
total 2600 reads, 9.010 sec, 1046.6 kb/call avg, 3.4 msec/call avg
total 35132 writes, 13.446 sec, 351.9 kb/call avg, 0.3 msec/call avg
        Finished loading at Sun Jul  3 08:34:27 PM CEST 2022
Elasticsearch (type tuned):
        No need to rebuild
Clickhouse:
        No need to rebuild

Выходит, что Manticore в 25 раз быстрее в плане скорости заливки. Может быть я конечно не умею ни в Logstash, ни в Elasticsearch, но у известного в узких кругах Марка Литвинчика импорт этого же датасета (но чуть меньшего объёма) занял ещё больше - 4 дня 16 часов.

Может Logstash всё портит? Давайте попробуем без него. Схема индекса такая:

"mappings": {
  "properties": {
  "name": {"type": "text"},
  "email": {"type": "keyword"},
  "description": {"type": "text"},
  "age": {"type": "integer"},
  "active": {"type": "integer"}
}

Запустим Мантикору и Эластик в докере вот так:

docker run --name manticore --rm -p 9308:9308 -v $(pwd)/manticore_idx:/var/lib/manticore manticoresearch/manticore:5.0.2
docker run --name elasticsearch --rm -p 9200:9200 -e discovery.type=single-node -e xpack.security.enabled=false -v $(pwd)/es_idx/:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:8.3.2

и запишем в Эластик и Мантикору 50 миллионов подобных документов:

{
  1,
  84,
  "Aut corporis qui necessitatibus architecto est. Harum laboriosam temporibus praesentium quis et nulla. Consequuntur quia neque et repellat.",
  "[terrill52@herzog.com](<mailto:terrill52@herzog.com>)",
  "Keely Doyle Sr."
}

Писать будем php-скриптами с batch size 10,000 документов и в 32 потока (на сервере 16 физических ядер с гипертредингом, т.е. 32 виртуальных) через JSON интерфейс.

root@perf3 ~ # php load_elasticsearch.php 10000 32 1000000 50
preparing...
found in cache
querying...
finished inserting
Total time: 178.24096798897
280519 docs per sec

root@perf3 ~ # php load_manticore.php 10000 32 1000000 50
preparing...
found in cache
querying...
finished inserting
Total time: 215.7572619915
231742 docs per sec

Эластик быстрее на 21%, но опять же есть интересный нюанс: Elasticsearch по умолчанию буферизирует добавленные документы на одну секунду, то есть для поиска очередной батч будет доступен не сразу. Это во многих случаях ок, но для чистоты эксперимента если в Эластике сделать /bulk?refresh=1 , то перформанс получается уже другой:

root@perf3 ~ # php load_elasticsearch.php 10000 32 1000000 50
preparing...
found in cache
querying...
finished inserting
Total time: 307.47588610649
162614 docs per sec

В этом случае уже Мантикора на 43% быстрее.

Если же гнаться за максимальной производительностью, то можно:

  • Использовать шардинг и в Эластике, и в Мантикоре.

  • В Эластике по максимуму использовать буферизацию и обработать буфер уже после заливки.

  • Заливать в Мантикору через mysql протокол, а не JSON.

  • Отключить в Мантикоре binlog (в Эластике так нельзя).

Тогда получится:

Manticore:

// docker run -p9306:9306 --name manticore --rm -v $(pwd)/manticore_idx:/var/lib/manticore -e searchd_binlog_path= manticoresearch/manticore:5.0.2
root@perf3 ~ # php load_manticore_sharded.php 10000 32 1000000 32 50
preparing...
found in cache /tmp/bc9719fb0d26e18fc53d6d5aaaf847b4_10000_1000000
querying...
finished inserting
Total time: 55.874907970428
894856 docs per sec

Elasticsearch:

root@perf3 ~ # php load_elasticsearch_sharded.php 10000 32 1000000 32 50
preparing...
found in cache
querying...
finished inserting
Total time: 119.96515393257
416788 docs per sec

Но после этого видимых документов в индексе не будет и нужно ещё 13 секунд, чтобы сделать их таковыми:

root@perf3 ~ # curl -s -X POST "localhost:9200/_sql?format=json&pretty" -H 'Content-Type: application/json' -d'{"query": "select count(*) from user"}'                 {
  "columns" : [
    {
      "name" : "count(*)",
      "type" : "long"
    }
  ],
  "rows" : [
    [
      0
    ]
  ]
}

root@perf3 ~ # time curl -XPOST "localhost:9200/user/_refresh"
{"_shards":{"total":64,"successful":32,"failed":0}}
real    0m13.505s
user    0m0.003s
sys     0m0.000s

root@perf3 ~ # curl -s -X POST "localhost:9200/_sql?format=json&pretty" -H 'Content-Type: application/json' -d'{"query": "select count(*) from user"}'
{
  "columns" : [
    {
      "name" : "count(*)",
      "type" : "long"
    }
  ],
  "rows" : [
    [
      50000000
    ]
  ]
}

В данном случае Мантикора в 2 раза быстрее Эластика.

И при этом данные доступны для поиска сразу же после заливки очередного батча, а не через 2 минуты. Использованные для этого теста скрипты можно найти здесь.

▍На чём написано

  • Эластик и сам написан на Джаве, и библиотека Lucene, который она использует и от которой зависит - тоже Java.

  • Мантикора - С++. Что это даёт:

    • Код писать сложнее.

    • Но ближе к железу, поэтому можно сделать более оптимизированный код.

    • Не надо думать о JVM heap size.

    • Нет риска запуска JVM garbage collector’а в неподходящий момент, что может сильно влиять на производительность.

    • При старте не нужно запускать тяжелую JVM и тратить на это несколько секунд.

▍Open source

  • Эластик - уже не чистый open source. В 2021 году лицензия была изменена с Apache 2 на Elastic License.

  • Мантикора - чистый open source на GPLv2 у демона и Apache2 у columnar library .

▍Json vs SQL

И Эластик и Manticore умеют и SQL и JSON, но разница в том, что:

  • В Эластике по умолчанию подразумевается JSON, а в Manticore SQL. На SQL многие вещи делать намного проще на этапе proof of concept. Вот например 2 запроса, которые делают одно и то же. Решайте сами что интереснее: потратить минуту на скобочки или:

  • SQL в эластике очень ограниченный, например нет:

    • SELECT id;

    • INSERT/UPDATE/DELETE;

    • Cлужебных команд (создание кластера, отображение статуса и т.п.).

  • В Manticore наоборот:

    • SQL умеет всё;

    • А JSON покрывает базовую функциональность: поисковые запросы и запросы на вставку и обновление данных.

▍Скорость запуска и легковесность процесса

В некоторых случаях нужно уметь быстро запустить сервис. Например, в IOT (Internet of things) или в каких-то ETL сценариях.

▍Near-real-time vs real-time

Как говорилось выше, по умолчанию когда вы пишете в Elasticsearch, данные становятся доступны для поиска только через секунду. Это можно настроить, но тогда скорость заливки будет существенно ниже, как видно выше.

Manticore всегда работает в real-time режиме.

▍Полнотекст

Про это можно написать отдельную статью. Если коротко: и Мантикора и Эластик умеют много что в плане полнотекстового поиска, много общего, но есть много отличий. По объективным тестам (что важно при оценке релевантности) на практически дефолтных настройках Manticore может дать более высокую релевантность, чем Elasticsearch. Вот соответствующий PR в BEIR (Information retrieval benchmark).

▍Schemaless

По этому пункту есть существенные отличия. Эластик славится тем, что в него можно писать что угодно. В Мантикоре нужно заранее создать схему. Возможность работы с Manticore в schemaless режиме у нас в планах. Мы считаем, что это важно, так как это делает жизнь проще, особенно в области log management’а.

▍Интеграции с приложениями

  • Клиенты для различных языков программирования есть и у Эластика и у Мантикоры.

  • MySQL:

    • Важным отличием Мантикоры является возможность использования mysql-клиентов для полноценной работы с сервером. Даже если для какого-то ЯП нет официального клиента, то там точно есть mysql-клиент, который можно использовать. Использование command line mysql клиента для администрирования удобнее, чем curl, потому что команды намного компактнее и поддерживается сессия.

    • Поддержка mysql-протокола позволила также сделать поддержку FEDERATED для интеграции Manticore Search c MySQL и Mariadb.

    • Кроме того, Мантикору можно использовать через ProxySQL.

  • HTTP JSON API есть и в Эластике, и в Мантикоре.

  • Logstash, Kibana: Мантикора уже умеет работать с обоими, но пока в бета/альфа-версии. Скоро доведём эту интеграцию до ума. Вот так можно попробовать Мантикору с Кибаной:

# download manticore beta version with support for Kibana, check https://repo.manticoresearch.com/repository/kibana_beta/ for different OS versions
wget https://repo.manticoresearch.com/repository/kibana_beta/ubuntu/jammy.zip

# unarchive it
unzip jammy.zip

# install the packages
dpkg -i build/*

# switch Manticore to the mode supporting Kibana
mysql -P9306 -h0 -e "set global log_management = 0; set global log_management = 1;"

# start Kibana pointing it to Manticore Search instance listening on port 9308
docker run -d --name kibana --rm -e ELASTICSEARCH_HOSTS=http://127.0.0.1:9308 -p 5601:5601 --network=host docker.elastic.co/kibana/kibana:7.4.2

# install php and composer, download loading script and put into Manticore 1 million docs of fake users
apt install php composer php8.1-mysql
wget https://gist.githubusercontent.com/sanikolaev/13bf61bbe6c39350bded7c577216435f/raw/8d8029c0d99998c901973fd9ac66a6fb920deda7/load_manticore_sharded.php
composer require fakerphp/faker
php load_manticore_sharded.php 10000 16 1000000 16 1 

# don't forget to create an index patter in Kibana (user*)

# run `docker stop kibana` to stop the Kibana server
Kibana с Manticore Search вместо Эластика на бэкенде
Kibana с Manticore Search вместо Эластика на бэкенде

▍Репликация

  • И в Эластике и в Мантикоре используется синхронная репликация. Мы не стали изобретать велосипед и интегрировались с библиотекой Galera, которую также используют Mariadb и Percona Xtradb cluster.

  • Важным отличием в управлении репликацией и кластеризацией в Мантикоре и Эластике является то, что в Эластике для этого нужно править конфиг, а в Мантикоре всё делается онлайн. В Мантикоре репликация всегда включена и очень легко подключиться к другой ноде и синхронизироваться с ней:

▍Шардинг и распределённые таблицы (индексы)

В Мантикоре в отличие от Эластика пока ещё нет автоматического шардирования, но объединение нескольких таблиц в одну для ручного шардирования делается проще, чем в Эластике:

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

▍Простота изучения и использования

  • В Мантикоре главенствует более простой SQL, чем JSON. В Эластике - JSON первичен, SQL вторичен.

  • В Мантикоре есть интерактивные курсы - play.manticoresearch.com . В Эластике нет.

  • Есть гайд по тому, как начать с примерами для разных ОС и языков - https://manual.manticoresearch.com/Quick_start_guide.

  • Есть возможность пообщаться напрямую с разработчиками в публичных каналах: Слак, Телеграм, Форум.

  • Мы даже специально завели короткий созвучный домен mnt.cr и интегрировали его с документацией так, что mnt.cr/<keyword> делает поиск по документации в особом режиме - сразу перематывает на наиболее релевантную секцию. Это особенно удобно, когда нужно вспомнить какие-то детали по какой-то настройке, например mnt.cr/max_packet_size.

▍Cloud native

▍Императивный и декларативный режимы использования

В Эластике большинство вещей делаются только через API. Нет возможности дописать в конфиг схемы таблиц (индексов), чтоб они были доступны сразу после запуска.

Мантикора, как Kubernetes, поддерживает два режима работы:

  • Императивный: когда всем можно управлять онлайн через CREATE TABLE/DROP TABLE/ALTER TABLE, CREATE CLUSTER/JOIN CLUSTER/DELETE CLUSTER

  • Декларативный: когда можно описать таблицы в конфиге, что даёт более высокую переносимость и более лёгкую возможность интегрировать Manticore в CI/CD, ETL и прочие процессы.

▍Percolate

Percolate или Persistent Query - это когда в таблице записаны не документы, а запросы, а поиск осуществляется по документам, а не по запросам. Результат поиска - запросы, удовлетворяющие документам. Такой тип поиска полезен для подписок пользователей: подписался, например, пользователь на запрос “Телевизор диагональ > 42” и как только он появился на сайте, то ему про это приходит оповещение. В Мантикоре это есть, как и в Эластике. По нашим тестам пропускная способность такого типа поиска в Мантикоре существенно выше.

▍Что дальше?

Сейчас мы развиваем проект по следующим направлениям:

  • Drop-in replacement для Эластика в рамках использования с Logstash и Kibana (Opensearch Dashboards). Хотим, чтоб низкий latency, которого несложно достичь с Мантикорой был доступен людям для анализа логов. У нас уже есть бета. Будем благодарны за фидбэк и баг репорты.

  • Schemaless режим работы. Хотим чтоб про схемы данных не нужно было думать в большинстве случаев.

  • Автоматический шардинг и оркестрирование шардов, чтоб заливать данные в Мантикору можно было ещё быстрее, а шарды расползались по кластеру в оптимальном порядке для большей отказоустойчивости.

  • Дальнейшие оптимизации производительности. Хотим latency ещё ниже, а пропускную способность выше.

▍Выводы

Таки что мы имеем Мантикора сейчас может заинтересовать тех:

  • Кому важно низкое время отклика и на малых и на больших объёмах данных.

  • Кто любит SQL.

  • Кто хочет попроще и побыстрее интегрировать поиск в приложение.

  • Кто хочет чего-то более легковесного.

  • Кому важно использовать чистый open source.

А мы продолжаем. Поддержать наше начинание можно звездой на Гитхабе https://github.com/manticoresoftware/manticoresearch/

Спасибо, что дочитали!

Комментарии (66)


  1. epicloyd
    18.07.2022 11:01

    Круто! А аггрегации есть? Если нет, то планируете реализовывать?


    1. ManticoreSearch Автор
      18.07.2022 11:01

      Конечно есть: и просто GROUP BY и FACET.


  1. tumbler
    18.07.2022 11:17

    Фатальный недостаток: отсутствие JOIN ). На самом деле, проблема в исключении из результатов поиска чего-угодно содержимого персонального черного списка. Есть идеи, как это могло бы работать в мантикоре?


    1. ManticoreSearch Автор
      18.07.2022 11:40
      +2

      В Эластике тоже нет JOIN. Возможно variables могут помочь https://manual.manticoresearch.com/Server_settings/Setting_variables_online#SET


      1. tumbler
        18.07.2022 11:52

        Были бы пользовательские переменные сессионными, можно было бы попробовать. А так персонификация всё портит.


        1. ManticoreSearch Автор
          18.07.2022 12:01
          +2

          Сделайте feature request с описанием ситуации, когда без этого никак - https://github.com/manticoresoftware/manticoresearch/issues

          Это в принципе не должно быть сложно прикрутить.


          1. tumbler
            18.07.2022 12:43
            +1

            Так и сделаю, спасибо. Хотя там есть и другие варианты, но все не идеальные.


    1. cadovvl
      18.07.2022 13:28
      +4

      Фатальный недостаток - это немного про другое.


  1. zizop
    18.07.2022 12:59
    +11

    Отличная статья! Теперь я вижу какой это был огромный труд продолжить дело Sphinx. Не просто подхватить разработку, а вот так вот серьезно за нее взяться. Очень рад, что месяц назад набрел на Manticoere в поисках замены SphinxSE для MySQL 8. Думал, все, труба! Не компилился он у меня, ошибок куча. Пошарился по форумам и узнал, что Sphinx пылью покрылся. И случайно набрел на Manticore. Разработчики в чате оперативно пофиксили баг с Federated и все завелось! В общем, Manticore - это search engine здорового человека!


  1. borovinskiy
    18.07.2022 15:40

    Спасибо, Manticore действительно быстро развивается вашими усилиями!

    Смигрировал электронную библиотеку со Sphinx в Manticore.

    Все вроде ок, но при обновлениях (CentOS8) из офф. репозитария часто (в большинстве обновлений) портится индекс (документы перестают находиться, иногда сервер не может стартовать), хотя документов немного (в районе 1 млн.). Помогает перестроение индекса, но это долго и требует ручного вмешательства в процесс.

    Можете подсказать, это у меня какие-то проблемы или такое у многих бывает при обновлении сервера?


    1. ManticoreSearch Автор
      18.07.2022 15:45

      Среди известных багов такого нет. Нужно смотреть логи searchd в первую очередь. Если они остались - заведите issue, пожалуйста https://github.com/manticoresoftware/manticoresearch/issues/new/choose


  1. FoXiGeN2021
    18.07.2022 15:46

    А скажите насколько он производительный? Какое максимальное количество одновременных запросов может выдерживать?


    1. ManticoreSearch Автор
      18.07.2022 15:52
      +1

      Наверное имеется в виду пропускная способность (т.е. кол-во запросов в секунду), а не просто кол-во одновременных запросов. Тут всё очень сильно зависит от данных в индексе и запросов. К сожалению, мы ещё не делали детальных сравнительных тестов пропускной способности Manticore аналогичных тестам latency, описанным в статье. Но в общем и целом можно предположить, что с производительность в плане throughput всё хорошо, т.к. пользователи не жалуются.


  1. leotsarev
    18.07.2022 15:47
    -2

    Я все еще не понимаю, кому и зачем интересна производительность чего угодно с выключенными кешами.


    1. ManticoreSearch Автор
      18.07.2022 15:58

      Если вы про методику тестирования на http://db-benchmarks.com/ , то в каждой статье (например https://db-benchmarks.com/test-taxi/#about-caches) там подробно описано почему было решено сделать именно так. Вкратце: не хочется тестировать скорость извлечения пары килобайт из памяти по ключу, а хочется тестировать алгоритмы и структуры данных. Кэш ОС наоборот используется! Зло - это именно query cache. Он есть в Мантикоре, есть в Эластике, поэтому в обоих отключается, иначе просто везде даже для очень тяжёлых запросов будет очень низкое latency - бессмысленные результаты.


      1. leotsarev
        18.07.2022 17:07
        -3

        В реальном проде не важно, с какой latency сервис обслуживает эти холодные запросы. Эта метрика интереса не представляет.

        Вы, наверное, правы, что нет смысла тестировать 100% попадание в query cache. Или кстати почему?
        Если говорить про запрос типа `SELECT avg(total_amount) FROM taxi` он как раз будет повторяться раз за разом, логично тестировать его при горячих кешах и постоянно идущих вставках.
        А если говорить про запросы типа `SELECT * FROM taxi where match('harlem east') LIMIT 20` то их логично тестировать при горячих кешах и разных значениях предиката. А если у вас достаточно памяти, чтобы все возможные значения предиката попали в query cache, то у вас скорее всего данные плохи.


        1. ManticoreSearch Автор
          18.07.2022 17:25
          +2

          В реальном проде не важно, с какой latency сервис обслуживает эти холодные запросы

          Не соглашусь. Это важно, когда прод - это аналитика данных, в том числе log management: открываете вы dashboard в Кибане раз в сутки посмотреть как дела, а он делает десятки холодных запросов, это с Эластиком может занимать до минуты и больше, потом сутки вы ничего не делаете. Или data analyst, делающий разнообразные запросы, чтобы поймать какие-то закономерности и найти интересные факты: каждый из запросов он сделает один раз. И чем быстрее он закончится, тем больше разных запросов он может сделать или хотя бы меньше шанс, что он пойдёт попить кофе в ожидании окончания совсем уж тяжелого запроса.

          Вы, наверное, правы, что нет смысла тестировать 100% попадание в query cache. Или кстати почему?

          Потому что сложность алгоритма получается O(1).

          тестировать его при горячих кешах и постоянно идущих вставках

          их логично тестировать при горячих кешах и разных значениях предиката

          Да конечно можно и такое тестировать, просто будет уже другой тест. В имеющихся была идея максимально точно протестировать latency конкретного запроса. Про тестирование throughput есть в roadmap'е https://github.com/db-benchmarks/db-benchmarks#features-wishlist . Тестирование чтения при одновременной записи тоже интересно, но опасаюсь плохой повторяемости результатов теста (сейчас погрешность 2-3% вплоть до 1-2 мс).


          1. leotsarev
            18.07.2022 17:55
            -2

            >в том числе log management

            В моей практике по логам работает алертинг.


          1. leotsarev
            18.07.2022 17:56
            -2

            Или data analyst, делающий разнообразные запросы, чтобы поймать какие-то закономерности и найти интересные факты: каждый из запросов он сделает один раз


            Это не запросы в холодную. Это каждый из запросов он сделает один раз ПОСЛЕ ДРУГОГО запроса. Т.е. внутренние кеши БД будут прогреты, даже если не будет 100% попадания к query cache


            1. ManticoreSearch Автор
              18.07.2022 18:09
              +1

              И Эластик и Мантикора используют mmap и page cache операционки, именно там обычно и происходит прогревание. В сделанных тестах это никаким образом не блокируется, а даже наоборот - в главную метрику "Fast avg" не попадает 20% наиболее холодных запросов на ещё возможно непрогретом кэше, который обеспечивает операционная система посредством mmap.

              Если вы имеете в виду какие-то другие конкретные кэши, то скажите.


              1. leotsarev
                18.07.2022 18:14
                -2

                Ну например вы уничтожаете request cache Эластика зачем-то


                1. ManticoreSearch Автор
                  18.07.2022 20:32
                  +1

                  Ну они же пишут в своей доке:

                  The shard-level request cache module caches the local results on each shard. This allows frequently used (and potentially heavy) search requests to return results almost instantly.

                  Т.е. это обычный query cache, просто не глобальный, а пошардовый. Но ситуацию это особо не меняет. "almost instantly" там потому, что никаких вычислений и не делается, просто тупо достают из памяти готовенький результат. Мерить производительность такой операции в наши планы не входило, т.к. из полезной нагрузки остаётся только мерджинг результатов, но там сложность тоже невысокая и его вклад в общее время отклика среднего запроса обычно пренебрежительно мал.


          1. leotsarev
            18.07.2022 17:56
            -2

            >Потому что сложность алгоритма получается O(1).

            Так это же наоборот хорошо


            1. ManticoreSearch Автор
              18.07.2022 17:57
              +2

              Ну если цель - померить исключительно производительность query cache'а каждой базы данных, то да :)


              1. leotsarev
                18.07.2022 18:00
                -3

                Надо мерять не производительность query cache/чего угодно, а производительность ПОЛЬЗОВАТЕЛЬСКИХ СЦЕНАРИЕВ. Я готов вам поверить, что пользовательский сценарий «база после перезагрузки начистую, в которую никто не пишет, и абсолютно холодная», в нее делаются одноразовые запросы — этот сценарий у Мантикоры хорош. Я просто ни разу в жизни с ним не встречался.


                1. ManticoreSearch Автор
                  18.07.2022 18:14

                  А можно пример тестов, где так делается? Интересно было бы понять больше про методику таких тестов.


                  1. leotsarev
                    18.07.2022 18:18
                    -2

                    Ну например логи: давайте сделаем сценарий, куда мы пишем всюду логи постоянным случайным потоком, 1% Error, 99%info, и будем дергать раз в 5 минут запрос «ошибки за последний день».


                    1. ManticoreSearch Автор
                      18.07.2022 18:39
                      +1

                      Я понимаю, что это можно сделать. Интересно сделано ли, есть ли вообще такая практика в сфере бенчмарков. Я просто читал много статей от разных вендоров бд и независимых специалистов по бд с разными бенчмарками. Есть TPC. Есть Кликхаусовские бенчмарки. И я вижу, что обычно тестируют или latency (и часто неправильно в плане точности измерений) или throughput. Поэтому и интересуюсь, т.к. возможно что-то упускаю и есть какой показательный бенчмарк, демонстрирующий то, что вы имеете в виду.


                      1. ManticoreSearch Автор
                        18.07.2022 19:16

                        Кликхаус кстати недавно заоупенсурсили свои бенчмарки и вот что они пишут про кэши https://github.com/ClickHouse/ClickBench/#caching


          1. leotsarev
            18.07.2022 17:57
            -1

            > В имеющихся была идея максимально точно протестировать latency конкретного запроса.
            Эта идея очень малоинтересная, если честно.


            1. orcy
              20.07.2022 06:30
              +1

              По моему наоборот, смысл тестировать уровни кэшей, надо интересно именно ядро поиска. Именно там вся мякотка, кэши это более простая штука поверху. Надо сильно накосячить в кэшах чтобы с более тормозным поиском было бы в итоге приятней работать, чем с более производительным.


  1. pingo
    18.07.2022 18:06
    +1

    спасибо большое за продукт, на самом деле юзаю в проде уже дольше 4 лет, вроде с начала 2018ого. напишу завтра в офис, чтобы вам задонатили, если есть у вас для этого ссылка.


  1. DmitryKoterov
    18.07.2022 20:42
    +6

    Поною, как «счастливый» пользователь Elasticsearch с 2015 года. Если вы заборете Elasticsearch, то это будет невероятный буст прогресса для всего человечества. Потому что Elasticsearch ~могуч, вонюч и колюч~ крив и тормозён до невозможности чисто в силу своей архитектуры даже. Это жаба-глюкалово надо убить, но он также слишком живуч и чрезвычайно энтерпрайзен кармически, поэтому пока что никому не удалось этого сделать.

    С названием/брендингом у вас только что-то не то. Очень трудно читается и трудно запомнить (но это ИМХО).

    Еще C++ будет портить карму. Трудно избавится от стереотипа про то, что так и будет крэшиться (а это и не всегда стереотип). Вот если бы Раст, было бы современно, надежно, молодежно.


    1. orcy
      20.07.2022 07:50

      Ну это же все-таки форк sphinx. Ну и как используют же люди написанные на C++ postgres, mysql, clickhouse, tarantul.


      1. TyVik
        20.07.2022 11:06

        Несколько я знаю, Postgres всё-таки на C.


  1. greevex
    18.07.2022 20:51

    "Немного" удивляет разница в скорости заливки данных.

    Насколько я понимаю, Эластик при записи анализирует текст по-дефолту.
    Мантикора в этом случае тоже анализирует текст? Если да, то, получается, анализатор работает со скоростью более 400 тыс. объектов в секунду на указанных ресурсах?


    1. ManticoreSearch Автор
      19.07.2022 05:53

      Да, и Мантикора тоже анализирует.


      1. greevex
        19.07.2022 10:20

        Круто! Правильно ли я понимаю, что в обоих случаях это просто токенизация без нормализации?

        Есть ли статистика по скорости нормализации?


        1. ManticoreSearch Автор
          19.07.2022 10:30

          Что конкретно вы имеете в виду под нормализацией?


          1. greevex
            19.07.2022 10:55

            Нормализация текста для полнотекстового поиска. Или стоит дождаться отдельной статьи про полнотекст? :)

            У вас указано в тексте про релевантность и широкие возможности, но хочется понимать: а) более детальную разницу б) разницу в скорости работы с полнотекстом.


            1. ManticoreSearch Автор
              19.07.2022 10:58

              Ну нормализация это что в вашем понимании? Стемминг? Лемматизация? Превращение html в простой текст? Что-то ещё? Разные вещи по-разному влияют на перф. Если приведёте пример конкретного normalizer'а в Эластике, то будет проще.


              1. greevex
                19.07.2022 11:20

                Я говорю о таких анализаторах в эластике, как hunspell и ныне "сторонних" для эластика russian_morphology, english_morphology


  1. olku
    18.07.2022 23:23
    +1

    После второй версии ElasticSearch, которая требует 256Мб оперативки и вполне крутится на двухядерных VPS, Шай пошел за деньгами и превратил свое детище в прожорливый энтерпрайз.

    Кстати, схема все равно нужна, записать что угодно получится только при первом запросе. Бессхемность сомнительная штука, как и эвристика типов.


  1. screwer
    19.07.2022 01:12

    А есть гайд "для дебилов" ? Я вот далек от веб технологии, но уже долгое время вынашиваю мечту сделать поиск по своим 100гб пдф файлов, разложенных по папкам. Чего бы хотелось - Линукс сервер, примитивный Web UI, с возможностью отметить галками папки, аналогичной структуры как на диске. И поискать документы в них с выдачей а-ля Гугл (какой кусок нашелся, подсветка ключевых слов).

    Вроде бы типичная задача для создания портала документов в небольшой организации ?


    1. ManticoreSearch Автор
      19.07.2022 05:55

      Вот гайд https://manual.manticoresearch.com/Quick_start_guide . Справа можно переключать язык программирования.


    1. vasilisc
      20.07.2022 09:01
      +1

      Не помню точно у кого есть Web UI в дополнение к обычному GUI и CLI. Но, возможно, вашу задачу осилят локальные поисковики. Сам активно использовал Recoll, но перебрался на DocFetcher. У меня схожая задача - в огромной массе документов, в том числе pdf, часто приходится искать нужную информацию.

      https://en.wikipedia.org/wiki/List_of_search_engines#Desktop_search_engines


      1. screwer
        20.07.2022 12:34

        У меня всё-таки не локальный поиск. Есть группа энтузиастов (менее 10 человек) и накопленная база знаний. Вот хотелось бы привести ее в централизованный вид. На имеющемся сервере. Идеально ещё иметь для пользователей возможность ставить пометки и хештеги, а также иметь историю версий для документа. (Они, обычно, уже версилнированы вендором, типичное число версий 1-5. Самое мерзкое - есть тенденция убирать из новых версий полезности, бывшие в старых). Поэтому я и написал про "небольшую организацию" - ИМХО задача такая же.


        1. vasilisc
          20.07.2022 13:37

          Согласен, у вас не просто поиск и всё. Тогда удачи вам в проекте с Мантикорой.


  1. SlavikF
    19.07.2022 01:16

    Правильно ли я понимаю, что Manticore — это только backend (аналог Elastic Server), а что с Front End, что с UI? Есть что-то типа Kibana?


    1. ManticoreSearch Автор
      19.07.2022 05:57

      Да, вы правильно понимаете. Чего-то типа Кибаны у Мантикоры, т.к. мы решили не изобретать велосипед, т.к. имеющиеся и так достаточно хорошо ездят. Так что:

      • про интеграцию с Кибаной сказано в статье

      • интеграция с графаной тоже в планах


  1. click0
    19.07.2022 06:52

    Я не нашел поддержки FreeBSD :(


    1. ManticoreSearch Автор
      19.07.2022 07:02

      FreeBSD ограниченно поддерживается. Наш CI проверяет, что Мантикора собирается под FreeBSD, но автотесты не делаются. Пакетирование мы тоже пока не осилили. Но вручную собрать можно, вот инструкция https://manual.manticoresearch.com/dev/Installation/Compiling_from_sources#Building-using-CI-docker .


      1. click0
        19.07.2022 07:11

        Ох, там еще проверка сборки с кучей библиотек :(


        1. ManticoreSearch Автор
          19.07.2022 08:16

          Через сборочный докер собираться должно легко. Вручную искать какие-то либы и пр. не нужно, всё уже в докере.


          1. click0
            19.07.2022 08:47

            Docker не поддерживается FreeBSD.
            Нужно будет нативная сборка, чтоб устанавливать во FreeBSD через порты и пакеты.


            1. ManticoreSearch Автор
              19.07.2022 08:52

              В том-то и фишка нашего сборочного докера, что собирать можно в линуксе. Sysroot'ы от всех систем уже готовы https://repo.manticoresearch.com/repository/sysroots/roots_with_zstd/ , что делает возможным такой трюк. Мы даже под винду собираем под линуксом.


              1. click0
                19.07.2022 09:22

                Вы предлагаете FreeBSD crossbuild with GCC/CLANG on Linux host.
                Для разработки и автоматизированных тестов, возможно и подойдет, но для пакетирования придется дополнительно обмазаться тестами из 4-х веток FreeBSD, разных версий библиотек Mysql,Postgre, OpenSSL/LibreSSL.
                Отдельно тестить варианты с ODBC, icu, expat, iconv, pcre2.
                Все это перечисленное должно ставиться из пакетной базы.


                1. ManticoreSearch Автор
                  19.07.2022 09:25
                  +2

                  Всё так. Вот поэтому мы это и не осилили пока.


  1. Tkachenko-Ivan
    19.07.2022 09:12
    +2

    Спасибо за статью. Используем во многих проектах Sphinx и Manticore. Знаком со Sphinx наверно с 2014 года. Действительно обидно когда решение незаслуженно уходит на второй план, многие даже про Sphinx и Manticore не слышали.

    Нужно больше статей про Manticore. Я когда-то написал парочку на хабр. Возможно ещё напишу, - есть что рассказать.


    1. ManticoreSearch Автор
      19.07.2022 09:16
      +3

      Категорически поддерживаю. Если можем как-то помочь с написанием статей (консультацией и т.п.), то будем рады это сделать.


      1. Tkachenko-Ivan
        19.07.2022 09:48
        +1

        Буду иметь в виду


  1. xDimus
    19.07.2022 09:55

    Если бы пользователи не ошибались всё было бы отлично :).

    Но в реальном мире хотелось бы:

    • функцию проверки расстояния Дамерау-Левенштейна в дополнение к уже имеющейся LEVENSHTEIN(), т.к. перестановки иногда случаются;

    • поиск похожих по расстоянию Дамерау-Левенштейна, в дополнение к SUGGEST();

    • исправить ошибку в SUGGEST();

    • сделать levenshtein() multibyte safe

    • есть и другие хотелки, но они не так актуальны :)


  1. sm0g
    20.07.2022 17:48

    Подскажите, пожалуйста, какое максимальное количество маппингов(свойств) поддерживает индекс? В эластике не рекомендуют заводить много индексов для разделения по tenant, а советуют всё держать в одном индексе. Как стоит делать в Manticore?


    1. ManticoreSearch Автор
      20.07.2022 18:45

      256 полнотекстовых полей и несколько тысяч атрибутов.

      Я догадываюсь почему про Эластик может быть такая рекомендация - из-за ограничения на количество файловых дескрипторов. На Мантикор это ограничение действует аналогично: каждый индекс съедает сколько-то файловых десрипторов, если индексов очень много - они могут кончиться. В остальном же не вижу причин рекомендовать в Мантикоре держать всё в одном индексе, когда требуется делать иначе.


  1. endeveit
    20.07.2022 20:23
    +1

    Хорошая статья, жаль с англоязычными коллегами не получится поделиться.
    Может, планируете английский вариант статьи в блоге?
    И еще, планируете ли в дополнение к стандартному и enterprise планам SaaS-решение? А еще лучше managed-solution (типа Bring Your Own Cloud у Redpanda)


    1. ManticoreSearch Автор
      21.07.2022 04:29

      Вариант на английском будет на блоге на днях.

      планируете ли в дополнение к стандартному и enterprise планам SaaS-решение? А еще лучше managed-solution

      Да, планируем и то и то, уже есть некоторые наработки.