Log 引擎家族
这些引擎是为需要快速写入许多小表(最多约 100 万行)并在以后作为一个整体读取它们的场景而开发的。
家族引擎
Log
家族表引擎可以将数据存储到 HDFS 或 S3 分布式文件系统。
此引擎不适用于日志数据。
尽管名称如此,*Log 表引擎并非旨在存储日志数据。它们仅应用于需要快速写入的小容量数据。
通用属性
引擎
-
在磁盘上存储数据。
-
写入时将数据追加到文件末尾。
-
支持并发数据访问的锁。
在
INSERT
查询期间,表被锁定,其他用于读取和写入数据的查询都等待表解锁。如果没有数据写入查询,则可以并发执行任意数量的数据读取查询。 -
不支持 mutation。
-
不支持索引。
这意味着对于数据范围的
SELECT
查询效率不高。 -
不原子地写入数据。
如果某些操作中断了写入操作,例如服务器异常关闭,您可能会得到数据损坏的表。
差异
TinyLog
引擎是该家族中最简单的引擎,提供最差的功能和最低的效率。 TinyLog
引擎不支持在单个查询中由多个线程并行读取数据。 它读取数据的速度比家族中其他支持从单个查询并行读取数据的引擎慢,并且它使用的文件描述符几乎与 Log
引擎一样多,因为它将每列存储在单独的文件中。 仅在简单场景中使用它。
Log
和 StripeLog
引擎支持并行数据读取。 读取数据时,ClickHouse 使用多个线程。 每个线程处理一个单独的数据块。 Log
引擎为表的每一列使用一个单独的文件。 StripeLog
将所有数据存储在一个文件中。 因此,StripeLog
引擎使用的文件描述符更少,但 Log
引擎在读取数据时提供更高的效率。