Этот движок относится к семейству движков 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 │
└─────────────────────┴──────────────┴────────────────────────────┘