clickhouse 引擎
引擎决定了数据的存储位置、存储结构、表的特征(是否修改操作DDL、DDL、是否支持并发操作)
数据库引擎
目前支持的数据库引擎有5种:
-
Lazy:日志引擎,在最后一次访问之后,只在RAM中保存
expiration_time_in_seconds秒。只能用于Log表。它是为存储许多小的Log表而优化的,对于这些表,访问之间有很长的时间间隔。 -
MySQL:MySQL引擎,将远程的MySQL服务器中的表映射到ClickHouse中,常用语数据的合并。
-
Atomic:默认引擎,它支持非阻塞的DROP TABLE和RENAME TABLE查询和原子的EXCHANGE TABLES t1 AND t2查询。默认情况下使用
Atomic数据库引擎。 -
[experimental] Replicated: 该引擎基于Atomic引擎。它支持通过将DDL日志写入ZooKeeper并在给定数据库的所有副本上执行的元数据复制。
-
PostgretSql: 允许连接到远程PostgreSQL服务。支持读写操作(
SELECT和INSERT查询),以在ClickHouse和PostgreSQL之间交换数据。 -
其它
一个ClickHouse服务器可以同时运行和更新多个复制的数据库。但是同一个复制的数据库不能有多个副本。
表引擎
表引擎(即表的类型)决定了:
- 数据的存储方式和位置,写到哪里以及从哪里读取数据
- 支持哪些查询以及如何支持。
- 并发数据访问。
- 索引的使用(如果存在)。
- 是否可以执行多线程请求。
- 数据复制参数。
合并树家族
- MergeTree
日志引擎
这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。
- Log
- StripeLog
- TinyLog
共同属性
-
数据存储在磁盘上。
-
写入时将数据追加在文件末尾。
-
不支持突变操作。
-
不支持索引。
这意味着
SELECT在范围查询时效率不高。 -
非原子地写入数据。
如果某些事情破坏了写操作,例如服务器的异常关闭,你将会得到一张包含了损坏数据的表。
差异
Log 和 StripeLog 引擎支持:
- 并发访问数据的锁。
INSERT请求执行过程中表会被锁定,并且其他的读写数据的请求都会等待直到锁定被解除。如果没有写数据的请求,任意数量的读请求都可以并发执行。
- 并行读取数据。
在读取数据时,ClickHouse 使用多线程。 每个线程处理不同的数据块。
Log 引擎为表中的每一列使用不同的文件。StripeLog 将所有的数据存储在一个文件中。因此 StripeLog 引擎在操作系统中使用更少的描述符,但是 Log 引擎提供更高的读性能。
TinyLog 引擎是该系列中最简单的引擎并且提供了最少的功能和最低的性能。TinyLog 引擎不支持并行读取和并发数据访问,并将每一列存储在不同的文件中。它比其余两种支持并行读取的引擎的读取速度更慢,并且使用了和 Log 引擎同样多的描述符。你可以在简单的低负载的情景下使用它。