TinyLog
该引擎属于日志引擎系列。请参阅 Log Engine Family 以了解日志引擎的通用属性及其差异。
此表引擎通常与一次写入方法一起使用:写入数据一次,然后根据需要多次读取。例如,您可以将 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 │
└─────────────────────┴──────────────┴────────────────────────────┘