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

Семейство логических движков

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

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

Логические движки
StripeLog
Log
TinyLog

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

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

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

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

Движки:

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

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

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

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

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

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

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

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

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

Отличия

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

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