Таблицу можно очистить с помощью SQL-запроса TRUNCATE TABLE или функции клиента PHP truncate().
Вот синтаксис для SQL-запроса:
TRUNCATE TABLE table_name [WITH RECONFIGURE]
При выполнении этого запроса таблица RT или распределённая таблица полностью очищается. Удаляются данные из памяти, отвязываются все файлы данных таблицы и освобождаются связанные бинарные логи.
Для очистки распределённой таблицы используйте синтаксис без опции with reconfigure. Просто выполните стандартный запрос TRUNCATE для вашей распределённой таблицы.
TRUNCATE TABLE distributed_table
ПРИМЕЧАНИЕ: Очистка распределённой таблицы требует Manticore Buddy. Если это не работает, убедитесь, что Buddy установлен.
Таблицу также можно очистить с помощью DELETE FROM index WHERE id>0, но это не рекомендуется, так как это медленнее, чем TRUNCATE.
- SQL
- JSON
- PHP
- Python
- Python-asyncio
- javascript
- Java
- C#
- Rust
TRUNCATE TABLE products;POST /cli -d "TRUNCATE TABLE products"$params = [ 'table' => 'products' ];
$response = $client->indices()->truncate($params);utilsApi.sql('TRUNCATE TABLE products')await utilsApi.sql('TRUNCATE TABLE products')res = await utilsApi.sql('TRUNCATE TABLE products');utilsApi.sql("TRUNCATE TABLE products", true);utilsApi.Sql("TRUNCATE TABLE products", true);utils_api.sql("TRUNCATE TABLE products", Some(true)).await;Query OK, 0 rows affected (0.02 sec){
"total":0,
"error":"",
"warning":""
}Array(
[total] => 0
[error] =>
[warning] =>
){u'error': u'', u'total': 0, u'warning': u''}{u'error': u'', u'total': 0, u'warning': u''}{"total":0,"error":"","warning":""}{total=0, error=, warning=}{total=0, error="", warning=""}{total=0, error="", warning=""}Одно из возможных применений этой команды — перед присоединением таблицы.
Когда используется опция RECONFIGURE, новые настройки токенизации, морфологии и другой обработки текста, указанные в конфигурации, вступают в силу после очистки таблицы. Если объявление схемы в конфигурации отличается от схемы таблицы, новая схема из конфигурации применяется после очистки таблицы.
ПРИМЕЧАНИЕ: Опция
RECONFIGUREимеет смысл только в Plain режиме, где применяются настройки из конфигурационного файла. Обратите внимание, чтоTRUNCATEподдерживается только для RT таблиц, а опцияRECONFIGUREможет использоваться с RT таблицами только при работе Manticore в Plain режиме.
С этой опцией очистка и перенастройка таблицы становятся одной атомарной операцией.
- SQL
- HTTP
- PHP
- Python
- Python-asyncio
- javascript
- Java
- C#
- Rust
TRUNCATE TABLE products with reconfigure;POST /cli -d "TRUNCATE TABLE products with reconfigure"$params = [ 'table' => 'products', 'with' => 'reconfigure' ];
$response = $client->indices()->truncate($params);utilsApi.sql('TRUNCATE TABLE products WITH RECONFIGURE')await utilsApi.sql('TRUNCATE TABLE products WITH RECONFIGURE')res = await utilsApi.sql('TRUNCATE TABLE products WITH RECONFIGURE');utilsApi.sql("TRUNCATE TABLE products WITH RECONFIGURE", true);utilsApi.Sql("TRUNCATE TABLE products WITH RECONFIGURE" ,true);utils_api.sql("TRUNCATE TABLE products WITH RECONFIGURE", Some(true)).await;Query OK, 0 rows affected (0.02 sec){
"total":0,
"error":"",
"warning":""
}Array(
[total] => 0
[error] =>
[warning] =>
){u'error': u'', u'total': 0, u'warning': u''}{u'error': u'', u'total': 0, u'warning': u''}{"total":0,"error":"","warning":""}{total=0, error=, warning=}{total=0, error="", warning=""}Manticore Search — это высокораспределённая система, которая предоставляет все необходимые компоненты для создания высокодоступной и масштабируемой базы данных для поиска. Это включает:
- распределённую таблицу для шардинга
- Зеркалирование для высокой доступности
- Балансировку нагрузки для масштабируемости
- Репликацию для безопасности данных
Manticore Search предлагает большую гибкость в том, как вы настраиваете свой кластер. Нет никаких ограничений, поэтому вы сами решаете, как спроектировать кластер в соответствии с вашими потребностями. Просто изучите упомянутые выше инструменты и используйте их для достижения желаемой цели.
Чтобы добавить новый узел в кластер, просто запустите еще один экземпляр Manticore и убедитесь, что он доступен для других узлов в кластере. Подключите новый узел к остальной части кластера с помощью распределенной таблицы и обеспечьте безопасность данных с помощью репликации.
Чтобы понять, как добавить распределённую таблицу с удалёнными агентами, важно сначала иметь базовое представление о распределённых таблицах. В этой статье мы сосредоточимся на том, как использовать распределённую таблицу в качестве основы для создания кластера экземпляров Manticore.
Вот пример того, как разделить данные на 4 сервера, каждый из которых обслуживает один из шардов:
- ini
table mydist {
type = distributed
agent = box1:9312:shard1
agent = box2:9312:shard2
agent = box3:9312:shard3
agent = box4:9312:shard4
}В случае сбоя сервера распределённая таблица продолжит работать, но результаты с вышедшего из строя шарда будут отсутствовать.
Теперь, когда мы добавили зеркала, каждый шард находится на 2 серверах. По умолчанию мастер (экземпляр searchd с распределённой таблицей) будет случайным образом выбирать одно из зеркал.
Режим выбора зеркал можно задать с помощью настройки ha_strategy. Помимо режима по умолчанию random, существует также ha_strategy = roundrobin.
Более продвинутые стратегии, основанные на вероятностях с учётом задержек, включают noerrors и nodeads. Они не только исключают зеркала с проблемами, но и отслеживают время отклика и выполняют балансировку. Если зеркало отвечает медленнее (например, из-за выполняющихся на нём операций), оно будет получать меньше запросов. Когда зеркало восстанавливается и обеспечивает лучшее время отклика, оно будет получать больше запросов.
- ini
table mydist {
type = distributed
agent = box1:9312|box5:9312:shard1
agent = box2:9312:|box6:9312:shard2
agent = box3:9312:|box7:9312:shard3
agent = box4:9312:|box8:9312:shard4
}