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

Движок таблиц TinyLog

Not supported in ClickHouse Cloud

Движок относится к семейству лог-движков. Общие свойства лог-движков и их различия см. в разделе Log Engine Family.

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

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

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

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

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

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

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','Первое обычное сообщение')
INSERT INTO tiny_log_table VALUES (now(),'REGULAR','Второе обычное сообщение'),(now(),'WARNING','Первое предупреждение')

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

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

SELECT * FROM tiny_log_table
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2024-12-10 13:11:58 │ REGULAR      │ Первое обычное сообщение   │
│ 2024-12-10 13:12:12 │ REGULAR      │ Второе обычное сообщение   │
│ 2024-12-10 13:12:12 │ WARNING      │ Первое предупреждение      │
└─────────────────────┴──────────────┴────────────────────────────┘