跳到主要内容
跳到主要内容

StripeLog

此引擎属于日志引擎系列。请参阅 日志引擎系列 文章中日志引擎的通用属性及其差异。

在需要写入大量数据量小的表(少于 100 万行)的场景中使用此引擎。例如,此表可用于存储传入的数据批次以进行转换,其中需要对它们进行原子处理。对于 ClickHouse 服务器,此表类型的 10 万个实例是可行的。当需要大量表时,应优先选择此表引擎而不是 Log。这是以牺牲读取效率为代价的。

创建表

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 = StripeLog

请参阅 CREATE TABLE 查询的详细描述。

写入数据

StripeLog 引擎将所有列存储在一个文件中。对于每个 INSERT 查询,ClickHouse 将数据块追加到表文件的末尾,逐列写入。

对于每个表,ClickHouse 写入以下文件

  • data.bin — 数据文件。
  • index.mrk — 带有标记的文件。标记包含每个插入的数据块的每列的偏移量。

StripeLog 引擎不支持 ALTER UPDATEALTER DELETE 操作。

读取数据

带有标记的文件允许 ClickHouse 并行读取数据。这意味着 SELECT 查询以不可预测的顺序返回行。使用 ORDER BY 子句对行进行排序。

使用示例

创建表

CREATE TABLE stripe_log_table
(
timestamp DateTime,
message_type String,
message String
)
ENGINE = StripeLog

插入数据

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

我们使用了两个 INSERT 查询在 data.bin 文件中创建了两个数据块。

ClickHouse 在选择数据时使用多个线程。每个线程读取一个单独的数据块,并在完成后独立返回结果行。因此,输出中行块的顺序与大多数情况下输入中相同块的顺序不匹配。例如

SELECT * FROM stripe_log_table
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:27:32 │ REGULAR │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING │ The first warning message │
└─────────────────────┴──────────────┴────────────────────────────┘
┌───────────timestamp─┬─message_type─┬─message───────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR │ The first regular message │
└─────────────────────┴──────────────┴───────────────────────────┘

对结果进行排序(默认升序)

SELECT * FROM stripe_log_table ORDER BY timestamp
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR │ The first regular message │
│ 2019-01-18 14:27:32 │ REGULAR │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING │ The first warning message │
└─────────────────────┴──────────────┴────────────────────────────┘