blog-post

Освоение Manticore Search: RT против Plain режима

Вы когда-нибудь запутывались в различных режимах Manticore Search? Вы не одни. Многие разработчики испытывают трудности с пониманием разницы между режимом реального времени (RT) и простым режимом, когда только начинают использовать Manticore Search. Но не волнуйтесь – на самом деле это довольно просто, как только вы поймете основные концепции.

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

Manticore Search предлагает два основных оперативных режима:

  • Режим реального времени (RT) - Режим по умолчанию, который позволяет вам создавать и удалять таблицы на лету
  • Простой режим - Работает со статическими схемами и простыми таблицами, построенными на основе внешних источников хранилища

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

Режим реального времени (RT): Динамичный и гибкий

RT режим является режимом по умолчанию и наиболее часто используемым режимом в Manticore Search. Он предназначен для динамичных окружений, где вам нужно создавать, изменять или удалять таблицы без перезапуска сервиса.

Как идентифицировать RT режим

Ключевым индикатором RT режима является наличие директивы data_dir в вашем конфигурационном файле. Давайте посмотрим на типичную конфигурацию:

cat /opt/homebrew/etc/manticoresearch/manticore.conf
searchd {
    listen = 127.0.0.1:9312
    listen = 127.0.0.1:9306:mysql
    listen = 127.0.0.1:9308:http
    log = /opt/homebrew/var/log/manticore/searchd.log
    query_log = /opt/homebrew/var/log/manticore/query.log
    pid_file = /opt/homebrew/var/run/manticore/searchd.pid
    data_dir = /opt/homebrew/var/manticore
}

Обратите внимание на директиву data_dir в конфигурации. Эта единственная строка и включает RT режим.

Создание таблиц на лету

Одно из главных преимуществ RT режима – это возможность динамического создания таблиц:

mysql -P9306 -h0 -v
Добро пожаловать в MySQL монитор. Команды заканчиваются ; или \g.
Ваш идентификатор соединения MySQL: 759523
Версия сервера: 7.0.1 763f4a0b9@25013111 dev (columnar 4.0.1 9f6686d@25012409) (secondary 4.0.1 9f6686d@25012409) (knn 4.0.1 9f6686d@25012409) git branch master...origin/master

Copyright (c) 2000, 2024, Oracle и/или ее дочерние компании.

Oracle является зарегистрированным товарным знаком Oracle Corporation и/или ее
дочерних компаний. Другие названия могут быть товарными знаками соответствующих
владельцев.

Чтение файла истории /Users/sn/.mysql_history
Введите 'help;' или '\h' для получения справки. Введите '\c' для очистки текущего входного заявления.

Создать таблицу так же просто, как:

mysql> create table t;
Запрос выполнен успешно, затронуто 0 строк (0.00 сек)

А удалить её так же просто:

mysql> drop table t;
Запрос выполнен успешно, затронуто 0 строк (0.01 сек)

Поддержка репликации

Еще одна мощная функция, эксклюзивная для RT режима, – это репликация. Вы можете создавать кластеры и добавлять таблицы к ним:

mysql> create table t;
Запрос выполнен успешно, затронуто 0 строк (0.00 сек)
mysql> create cluster c;
Запрос выполнен успешно, затронуто 0 строк (0.44 сек)
mysql> alter cluster c add t;
Запрос выполнен успешно, затронуто 0 строк (0.00 сек)

Простой режим: Стабильный и структурированный

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

Как идентифицировать простой режим

Отсутствие директивы data_dir в вашем конфигурационном файле указывает на простой режим. Давайте посмотрим на конфигурацию простого режима:

cat ~/manticore/plain.conf
searchd {
  listen = 9315:mysql41
  log = searchd.log
  pid_file = searchd.pid
  binlog_path =
}

source src {
  type = csvpipe
  csvpipe_command = echo "1,abcdef,123"
  csvpipe_field = f
  csvpipe_attr_uint = a
}

table idx {
  type = plain
  source = src
  path = idx
}

table rt {
  type = rt
  path = rt
  rt_field = f
  rt_attr_uint = a
}

Обратите внимание, что нет директивы data_dir, но в конфигурационном файле есть определения таблиц.

Запуск экземпляра в простом режиме

Давайте запустим Manticore Search в простом режиме:

searchd -c plain.conf
Manticore 7.0.0 92c650401@25013002 (columnar 4.0.0 5aa8e43@25012409) (secondary 4.0.0 5aa8e43@25012409) (knn 4.0.0 5aa8e43@25012409)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2024, Manticore Software LTD (https://manticoresearch.com)

[26:49.002] [20433033] использование конфигурационного файла '/Users/sn/manticore/plain.conf' (344 символов)...
начало демона версии '7.0.0 92c650401@25013002 (columnar 4.0.0 5aa8e43@25012409) (secondary 4.0.0 5aa8e43@25012409) (knn 4.0.0 5aa8e43@25012409)' ...
слушаем на всех интерфейсах для mysql, порт=9315
предварительное кеширование таблицы 'idx'
Формат заголовка индекса не json, попытаемся прочитать его как бинарный...
WARNING: Не удается загрузить заголовок... Ошибка не удалось открыть idx.sph: Нет такого файла или директории
WARNING: таблица 'idx': предвыделение: не удалось открыть idx.sph: Нет такого файла или директории - НЕ ОБСЛУЖИВАЕТСЯ
предварительное кеширование таблицы 'rt'
предварительно закешировано 1 таблица за 0.004 сек

Работа с таблицами в простом режиме

Когда мы проверяем доступные таблицы, мы можем увидеть, что вначале доступна только таблица RT:

mysql -P9315 -h0 -e "show tables"
+-------+------+
| Таблица | Тип   |
+-------+------+
| rt    | rt   |
+-------+------+

Чтобы сделать простую таблицу доступной, нам нужно построить её с помощью инструмента индексирования:

indexer -c plain.conf --all --rotate
Manticore 7.0.0 92c650401@25013002 (columnar 4.0.0 5aa8e43@25012409) (secondary 4.0.0 5aa8e43@25012409) (knn 4.0.0 5aa8e43@25012409)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2024, Manticore Software LTD (https://manticoresearch.com)

using config file '/Users/sn/manticore/plain.conf'...
индексирование таблицы 'idx'...
собрано 1 документ, 0.0 МБ
создание вторичного индекса
создание поиска: 0.0 Кдок, 100.0% выполнено
отсортировано 0.0 Мпопаданий, 100.0% выполнено
всего 1 документ, 6 байт
всего 0.029 сек, 203 байт/сек, 33.96 документов/сек
WARNING: пропуск таблицы не-plain 'rt'...
всего 3 чтения, 0.000 сек, 0.0 кб/вызов в среднем, 0.0 мс/вызов в среднем
всего 15 записей, 0.000 сек, 0.0 кб/вызов в среднем, 0.0 мс/вызов в среднем
поворот таблиц: успешно отправлен SIGHUP на searchd (pid=89954).

После перезагрузки таблиц:

mysql -P9315 -h0 -e "reload tables"

Теперь обе таблицы доступны:

mysql -P9315 -h0 -e "show tables"
+-------+-------+
| Таблица | Тип   |
+-------+-------+
| idx   | local |
| rt    | rt    |
+-------+-------+

Ограничения режима Plain

В режиме Plain вы не можете динамически создавать таблицы:

mysql -P9315 -h0 -e "create table t"
ERROR 1064 (42000) at line 1: CREATE TABLE требует, чтобы data_dir был установлен в конфигурационном файле

Репликация также недоступна:

mysql -P9315 -h0 -e "create cluster c"
ERROR 1064 (42000) at line 1: невозможно создать кластер 'c': не найден 'listen', не удается установить входящие адреса, репликация отключена

Когда использовать каждый режим

Используйте режим RT, когда:

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

Используйте режим Plain, когда:

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

Заключение

Понимание различий между режимами RT и Plain в Manticore Search имеет решающее значение для оптимизации вашей поисковой реализации. Режим RT предлагает гибкость и динамическое управление таблицами, в то время как режим Plain обеспечивает стабильность и структуру.

Для большинства современных приложений режим RT является рекомендуемым выбором благодаря своей гибкости и набору функций. Тем не менее, режим Plain все еще имеет свое место, особенно в средах, где приоритетами являются стабильность схемы и портируемость конфигурации.

Предпочитаете смотреть вместо чтения? Посмотрите наше видео на эту тему:

Помните, ключ к определению того, какой режим вы используете, прост: если в вашей конфигурации есть директива data_dir, вы находитесь в режиме RT; если нет, вы в режиме Plain.

Установить Manticore Search

Установить Manticore Search