clickhouse 02. 引擎的基本认识

172 阅读3分钟

clickhouse 引擎

引擎决定了数据的存储位置、存储结构、表的特征(是否修改操作DDL、DDL、是否支持并发操作)

数据库引擎

目前支持的数据库引擎有5种:

  • Lazy:日志引擎,在最后一次访问之后,只在RAM中保存expiration_time_in_seconds秒。只能用于Log表。它是为存储许多小的Log表而优化的,对于这些表,访问之间有很长的时间间隔。

  • MySQL:MySQL引擎,将远程的MySQL服务器中的表映射到ClickHouse中,常用语数据的合并。

  • Atomic:默认引擎,它支持非阻塞的DROP TABLERENAME TABLE查询和原子的EXCHANGE TABLES t1 AND t2查询。默认情况下使用Atomic数据库引擎。

  • [experimental] Replicated: 该引擎基于Atomic引擎。它支持通过将DDL日志写入ZooKeeper并在给定数据库的所有副本上执行的元数据复制。

  • PostgretSql: 允许连接到远程PostgreSQL服务。支持读写操作(SELECTINSERT查询),以在ClickHouse和PostgreSQL之间交换数据。

  • 其它

一个ClickHouse服务器可以同时运行和更新多个复制的数据库。但是同一个复制的数据库不能有多个副本。

表引擎

表引擎(即表的类型)决定了:

  • 数据的存储方式和位置,写到哪里以及从哪里读取数据
  • 支持哪些查询以及如何支持。
  • 并发数据访问。
  • 索引的使用(如果存在)。
  • 是否可以执行多线程请求。
  • 数据复制参数。
合并树家族
  • MergeTree
日志引擎

这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。

  • Log
  • StripeLog
  • TinyLog

共同属性

  • 数据存储在磁盘上。

  • 写入时将数据追加在文件末尾。

  • 不支持突变操作。

  • 不支持索引。

    这意味着 SELECT 在范围查询时效率不高。

  • 非原子地写入数据。

    如果某些事情破坏了写操作,例如服务器的异常关闭,你将会得到一张包含了损坏数据的表。

差异

Log 和 StripeLog 引擎支持:

  • 并发访问数据的锁。

INSERT 请求执行过程中表会被锁定,并且其他的读写数据的请求都会等待直到锁定被解除。如果没有写数据的请求,任意数量的读请求都可以并发执行。

  • 并行读取数据。

在读取数据时,ClickHouse 使用多线程。 每个线程处理不同的数据块。

Log 引擎为表中的每一列使用不同的文件。StripeLog 将所有的数据存储在一个文件中。因此 StripeLog 引擎在操作系统中使用更少的描述符,但是 Log 引擎提供更高的读性能。

TinyLog 引擎是该系列中最简单的引擎并且提供了最少的功能和最低的性能。TinyLog 引擎不支持并行读取和并发数据访问,并将每一列存储在不同的文件中。它比其余两种支持并行读取的引擎的读取速度更慢,并且使用了和 Log 引擎同样多的描述符。你可以在简单的低负载的情景下使用它。

集成的表引擎
special