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

Семейство Log

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

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

Log Engines
StripeLog
Log
TinyLog

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

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

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

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

Движки:

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

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

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

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

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

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

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

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

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

Различия

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

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