Семейство движков таблиц Log
Движки таблиц семейства
Log могут хранить данные в распределённых файловых системах HDFS или S3.
Общие свойства
- Хранят данные на диске.
- При записи дописывают данные в конец файла.
-
Поддерживают блокировки для одновременного доступа к данным.
Во время запросов
INSERTтаблица блокируется, и другие запросы на чтение и запись данных ждут снятия блокировки. Если запросов на запись данных нет, одновременно может выполняться любое количество запросов на чтение данных. - Не поддерживают мутации.
-
Не поддерживают индексы.
Это означает, что запросы
SELECTпо диапазонам данных выполняются неэффективно. - Не записывают данные атомарно. Таблица может оказаться с поврежденными данными, если что-то прервет операцию записи, например аварийное завершение работы сервера.
Отличия
TinyLog — самый простой в этом семействе: он предоставляет меньше всего возможностей и отличается самой низкой эффективностью. Движок TinyLog не поддерживает параллельное чтение данных несколькими потоками в рамках одного запроса. Он читает данные медленнее, чем другие движки этого семейства, поддерживающие параллельное чтение в рамках одного запроса, и использует почти столько же файловых дескрипторов, сколько и движок Log, поскольку хранит каждый столбец в отдельном файле. Используйте его только в простых сценариях.
Движки Log и StripeLog поддерживают параллельное чтение данных. При чтении данных ClickHouse использует несколько потоков. Каждый поток обрабатывает отдельный блок данных. Движок Log использует отдельный файл для каждого столбца таблицы. StripeLog хранит все данные в одном файле. В результате движок StripeLog использует меньше файловых дескрипторов, но движок Log обеспечивает более высокую эффективность при чтении данных.