ClickHouse基础知识及与MySQL性能对比( 二 )


6.查询频率相对较低(通常每台服务器每秒查询数百次或更少)
7.对于简单查询,允许大约50毫秒的延迟
8.列的值是比较小的数值和短字符串(例如,每个URL只有60个字节)
9.在处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)
10.不需要事务
11.数据一致性要求较低
12.每次查询中只会查询一个大表 。除了一个大表,其余都是小表
13.查询结果显著小于数据源 。即数据有过滤或聚合 。返回结果不超过单个服务器内存大小
引擎 Log系列引擎
Log家族具有最小功能的轻量级引擎 。当您需要快速写入许多小表(最多约100w行)并在以后整体读取它们时,该类型的引擎是最有效的 。
1、引擎
2、引擎(数据分块列在一起)
3、Log引擎(数据分块记录偏移量)
系列表引擎
系列的表引擎支持主键索引、数据分区、数据副本和数据采样这些特性,同时也只有此系列的表引擎支持ALTER相关操作
特点:
create table tb_merge_tree(id Int8 ,name String ,ctime Date)engine=MergeTree()partition by name--选填,如果不声明分区键,则ClickHouse会生成一个名为all的分区 。order by id --必填,默认情况下主键(PRIMARY KEY)与排序键相primary id --选填,主键字段生成一级索引,主键允许存在重复数据sample by intHash32(id) --选填,用于声明数据以何种标准进行采样settings index_granularity = 8192,--选填,索引的粒度index_granularity_bytes= 0, --自适应间隔大小,根据每一批次写入数据的体量大小,动态划分间隔大小 。0表示不启动自适应功能 。enable_mixed_granularity_parts = true, --选填,是否开启自适应索引间隔的功能,默认开启merge_with_ttl_timeout = 10, --选填,数据TTL功能storage_policy = 1; --选填,多路径存储策略
表引擎中的数据是拥有物理存储的,数据会按照分区目录的形式保存到磁盘上 。
一张数据表的完整物理结构分为3个层级,依次是数据表目录、分区目录及各分区下具体的数据文件 。
是一种通过以增代删的思路,支持行级数据修改和删除的表引擎 。
通过定义一个sign标记位字段,记录数据行的状态 。如果sign标记为1,则表示这是一行有效的数据;如果sign标记为-1,则表示这行数据需要被删除 。当分区合并时,同一数据分区内,sign标记为1和-1的一组数据会被抵消删除 。
**注意:**虽然解决了主键相同的数据即时删除的问题,但是状态持续变化且多线程并行写入情况下,状态行与取消行位置可能乱序,导致无法正常折叠 。只有保证老的状态行在在取消行的上面, 新的状态行在取消行的下面! 但是多线程无法保证写的顺序!
解决乱序写入情况下无法正常删除(折叠)问题,在建表语句中新增了一列,用于在乱序情况下记录状态行与取消行的对应关系
主键(排序)相同,且相同,sign相反的行,在合并时会被删除 。
只需要查询汇总结果,不关心明细数据 。并且数据的汇总条件是预先明确的(group by条件明确,不会随意改变)
通过定义(聚合函数,数据类型) 决定针对哪些列字段计算 。
写入时需要使用-state语法,查询时使用-merge语法 。
外部存储引擎 HDFS引擎
可以直接从HDFS中指定的目录下加载数据,自己不存储数据,仅仅读取数据
engine=HDFS('hdfs://linux01:8020/ck/test/*','csv')-clickhouse支持的文件格式有CSV、TSV、JSON等
mysql引擎
engine=MYSQL('localhost:3306','test','test','root','123456')