Перейти к основному содержимому
Перейти к основному содержимому

Семейство движков журналов

Эти движки были разработаны для сценариев, когда вам необходимо быстро записывать много небольших таблиц (до примерно 1 миллиона строк) и затем читать их целиком.

Движки семейства:

Движки журналов
StripeLog
Log
TinyLog

Движки таблиц семейства Log могут хранить данные в распределённых файловых системах HDFS или S3.

Этот движок не предназначен для данных журналов.

Несмотря на название, *движки таблиц журнала не предназначены для хранения данных журналов. Они должны использоваться только для небольших объемов, которые необходимо быстро записывать.

Общие свойства

Движки:

  • Хранят данные на диске.

  • Добавляют данные в конец файла при записи.

  • Поддерживают блокировки для одновременного доступа к данным.

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

  • Не поддерживают мутации.

  • Не поддерживают индексы.

    Это означает, что запросы SELECT для диапазонов данных неэффективны.

  • Не записывают данные атомарно.

    Вы можете получить таблицу с поврежденными данными, если что-то нарушает операцию записи, например, ненормальное завершение работы сервера.

Отличия

Движок TinyLog является самым простым в семействе и предоставляет наименьшую функциональность и эффективность. Движок TinyLog не поддерживает параллельное чтение данных несколькими потоками в одном запросе. Он читает данные медленнее, чем другие движки в семействе, которые поддерживают параллельное чтение из одного запроса, и использует почти столько же файловых дескрипторов, сколько и движок Log, потому что он хранит каждую колонку в отдельном файле. Используйте его только в простых сценариях.

Движки Log и StripeLog поддерживают параллельное чтение данных. При чтении данных ClickHouse использует несколько потоков. Каждый поток обрабатывает отдельный блок данных. Движок Log использует отдельный файл для каждой колонки таблицы. StripeLog хранит все данные в одном файле. В результате движок StripeLog использует меньше файловых дескрипторов, но движок Log обеспечивает более высокую эффективность при чтении данных.