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

StripeLog

该引擎属于日志引擎系列。有关日志引擎的通用属性及其差异,请参阅 Log Engine Family 文章。

在需要写入许多表且数据量较小(少于 100 万行)的场景中使用此引擎。例如,此表可用于存储需要原子处理的传入数据批次。此类型的表在 ClickHouse 服务器上可以有效地使用 100k 个实例。当需要大量表时,应优先使用此表引擎而非 Log,尽管这会影响读取效率。

创建表

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

写入数据

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

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

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

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

读取数据

包含标记的文件使 ClickHouse 能够并行读取数据。这意味着 SELECT 查询返回的行顺序是不确定的。使用 ORDER BY 子句对行进行排序。

使用示例

创建一个表:

插入数据:

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

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

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