一、表引擎即表的类型

特性:

数据的存储方式和位置,写到哪里以及从哪里读取数据

支持哪些查询以及如何支持

并发数据访问

索引的使用(如果存在)

是否可以执行多线程请求

数据复制参数

1、日志引擎

写入许多小的数据量(少于100万行)的表场景

共性:

        数据存储在磁盘上

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

        不支持突变操作

        不支持索引

                select在范围查询时效率不高

        非原子地写入数据

                某些事情破坏了写操作,例如:服务器异常关闭,表会损坏

差异:

        Log和StripeLog引擎支持:

        并发访问数据的锁

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

          并行读取数据

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

1)TinyLog

数据存储在磁盘上,每列都存储在单独的压缩文件中,写入时,数据将附加到文件末尾。

并发数据访问不受任何限制:

        如果同时从表中读取并在不同的查询中写入,则读取操作将抛出异常。

如果同时写入多个查询中的表,则数据将会被破坏

特性:适用于一次写入多次读取,不支持索引

适合:小批量处理的中间数据

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据访问_02

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据_03

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_读取数据_04

2)StripeLog 

创建表:[if not exists]  可选项,如果表不存在则创建

create table if not exists ttt (id Int8,name String) engine=StripeLog;

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_读取数据_05

写数据:

 将所有列写在一个文件中,数据追加在表文件的末尾,逐列写入

文件格式:

        data.bin   --数据文件

        index.mrk --带标记文件,存储带有每个数据块每列的偏移量

不支持alter update、alter delete

读数据:

并行读取数据,select返回数据顺序不可知,可以用order by排序

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据_06

插入数据:

insert 每次都会在data.bin中创建一个新的数据块

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据访问_07

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据_08

3)Log

适用于临时数据

每列分开存储,可以多个线程读取表中的数据

并发数据访问,可以同时支持读取操作,而写入操作则会堵塞读取和其它写入

不支持索引

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据_09

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据访问_10

spark 查询clickhouse 添加筛选条件 clickhouse查询并发_数据_11