blog-post

Освоение Manticore Search: Объяснение режимов RT и Plain

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

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

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

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

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

Режим реального времени (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
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 759523
Server version: 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 and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Reading history-file /Users/sn/.mysql_history
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

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

mysql> create table t;
Query OK, 0 rows affected (0.00 sec)

А удалить её так же легко:

mysql> drop table t;
Query OK, 0 rows affected (0.01 sec)

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

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

mysql> create table t;
Query OK, 0 rows affected (0.00 sec)
mysql> create cluster c;
Query OK, 0 rows affected (0.44 sec)
mysql> alter cluster c add t;
Query OK, 0 rows affected (0.00 sec)

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

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

Как определить режим Plain

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

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, но есть определения таблиц непосредственно в конфигурационном файле.

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

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

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] using config file '/Users/sn/manticore/plain.conf' (344 chars)...
starting daemon version '7.0.0 92c650401@25013002 (columnar 4.0.0 5aa8e43@25012409) (secondary 4.0.0 5aa8e43@25012409) (knn 4.0.0 5aa8e43@25012409)' ...
listening on all interfaces for mysql, port=9315
precaching table 'idx'
Index header format is not json, will try it as binary...
WARNING: Unable to load header... Error failed to open idx.sph: No such file or directory
WARNING: table 'idx': prealloc: failed to open idx.sph: No such file or directory - NOT SERVING
precaching table 'rt'
precached 1 tables in 0.004 sec

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

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

mysql -P9315 -h0 -e "show tables"
+-------+------+
| Table | Type |
+-------+------+
| 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'...
indexing table 'idx'...
collected 1 docs, 0.0 MB
creating secondary index
creating lookup: 0.0 Kdocs, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 1 docs, 6 bytes
total 0.029 sec, 203 bytes/sec, 33.96 docs/sec
WARNING: skipping non-plain table 'rt'...
total 3 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 15 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
rotating tables: successfully sent SIGHUP to searchd (pid=89954).

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

mysql -P9315 -h0 -e "reload tables"

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

mysql -P9315 -h0 -e "show tables"
+-------+-------+
| Table | Type  |
+-------+-------+
| idx   | local |
| rt    | rt    |
+-------+-------+

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

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

mysql -P9315 -h0 -e "create table t"
ERROR 1064 (42000) at line 1: CREATE TABLE requires data_dir to be set in the config file

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

mysql -P9315 -h0 -e "create cluster c"
ERROR 1064 (42000) at line 1: can not create cluster 'c': no 'listen' is found, cannot set incoming addresses, replication is disabled

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

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

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

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

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

Заключение

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

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

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

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

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

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