Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

TinyLog — движок таблицы

Не поддерживается в ClickHouse Cloud

Этот движок относится к семейству движков Log. Общие свойства движков этого семейства и различия между ними описаны в разделе Семейство движков Log.

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

Запросы выполняются в одном потоке. Иными словами, этот движок предназначен для сравнительно небольших таблиц (примерно до 1 000 000 строк). Его имеет смысл использовать, если у вас много маленьких таблиц, поскольку он проще, чем движок Log (требуется открывать меньше файлов).

Характеристики

  • Более простая структура: В отличие от движка Log, TinyLog не использует файлы меток. Это упрощает структуру, но также ограничивает возможности оптимизации производительности для больших наборов данных.
  • Запросы в одном потоке: Запросы к таблицам TinyLog выполняются в одном потоке, что делает этот движок подходящим для сравнительно небольших таблиц — обычно до 1 000 000 строк.
  • Эффективен для небольших таблиц: Благодаря простоте движок TinyLog удобен при работе с большим количеством небольших таблиц, так как требует меньше файловых операций по сравнению с движком Log.

В отличие от движка Log, TinyLog не использует файлы меток. Это упрощает структуру, но также ограничивает возможности оптимизации производительности для более крупных наборов данных.

Создание таблицы

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = TinyLog

См. подробное описание запроса CREATE TABLE.

Запись данных

Движок TinyLog хранит все столбцы в одном файле. Для каждого запроса INSERT ClickHouse дописывает блок данных в конец файла таблицы, записывая столбцы по одному.

Для каждой таблицы ClickHouse записывает следующие файлы:

  • <column>.bin: файл данных для каждого столбца, содержащий сериализованные и сжатые данные.

Движок TinyLog не поддерживает операции ALTER UPDATE и ALTER DELETE.

Пример использования

Создание таблицы:

CREATE TABLE tiny_log_table
(
    timestamp DateTime,
    message_type String,
    message String
)
ENGINE = TinyLog

Вставка данных:

INSERT INTO tiny_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO tiny_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')

Мы использовали два запроса INSERT, чтобы создать два блока данных в файлах <column>.bin.

ClickHouse использует один поток при выборке данных. В результате порядок блоков строк в выходных данных соответствует порядку этих же блоков во входных данных. Например:

SELECT * FROM tiny_log_table
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2024-12-10 13:11:58 │ REGULAR      │ The first regular message  │
│ 2024-12-10 13:12:12 │ REGULAR      │ The second regular message │
│ 2024-12-10 13:12:12 │ WARNING      │ The first warning message  │
└─────────────────────┴──────────────┴────────────────────────────┘
Navigation