1、像MySQL一样,CH也有引擎,分为库引擎和表引擎
库引擎有内存,mysql,lazy等。比如建库的时候指定mysql连接,就可以在CH CLI里面操作连接到的mysql数据;表引擎有memory,log,合并树等等。引擎决定数据的存储方式,是否索引,是否能分区,是否支持副本等等
2、为什么快
底层c++开发,可以充分利用硬件优势;建立索引;使用大量算法处理数据;支持向量化处理
3、mergetree数据存储文件详解
字段.bin 存储各个字段的二进制压缩数据
字段.mrk 标记对应的 字段.bin 文件中的数据(块)的偏移量
primary.idx 主键索引(稀疏索引)
通过这上面三个文件,可以快速查询数据信息
4、浓密索引:一个索引对应一个数据
稀疏索引:一个索引对应多个数据
5、replacing合并树,有以下两个扩展功能,基于这两个功能可实现数据更新
1)分区内合并文件(optimize table)的时候,将分区内主键相同的数据去重
2)有版本号概念,只保留最大版本数据
6、建表的时候设置order by字段,排好序,那么会加快查询效率
7、mysql的主键是唯一的,但是ch的主键不唯一,只是用来做索引,排序使用
8、web展示hdfs的海量数据的方法
利用计算引擎:presto,impala,spark sql,这些计算引擎不存储数据;
利用计算存储引擎:clickhouse, es等,将数仓dm层数据导入ch,ch负责快速查询
9、ClickHouse 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
相比HBase和Redis这类NoSQL数据库,ClickHouse使用关系模型描述数据并提供了传统数据库的概念 ( 数据库、表、视图和函数等 )。与此同时,ClickHouse完全使用SQL作为查询语言 ( 支持GROUP BY、ORDER BY、JOIN、IN等大部分标准SQL )
10、HDFS、Spark、HBase和Elasticsearch这类分布式系统,都采用了Master-Slave主从架构,由一个管控节点作为Leader统筹全局。而ClickHouse则采用Multi-Master多主架构
11、CH架构设计
- 1)Column和Field是ClickHouse数据最基础的映射单元,内存中的一列数据由一个Column对象表示
- 2)ClickHouse的集群由分片 ( Shard ) 组成,而每个分片又通过副本 ( Replica )组成。这种分层的概念,在一些流行的分布式系统中十分普遍。例如,在Elasticsearch的概念中,一个索引由分片和副本组成,副本可以看作一种特殊的分片。如果一个索引由5个分片组成,副本的基数是1,那么这个索引一共会拥有10个分片( 每1个分片对应1个副本 )。
如果你用同样的思路来理解ClickHouse的分片,那么很可能会在这里栽个跟头。ClickHouse的某些设计总是显得独树一帜,而集群与分片就是其中之一。这里有几个与众不同的特性。
ClickHouse的1个节点只能拥有1个分片,也就是说如果要实现1分片、1副本,则至少需要部署2个服务节点。
分片只是一个逻辑概念,其物理承载还是由副本承担的。
12、ES和CH的区别
- 1)ClickHouse比ES服务器成本更低。一方面ClickHouse的数据压缩比比ES高,相同数据占用的磁盘空间只有ES的1/3到1/30,节省了磁盘空间的同时,也能有效的减少磁盘IO,这也是ClickHouse查询效率更高的原因之一;另一方面ClickHouse比ES占用更少的内存,消耗更少的CPU资源。我们预估用ClickHouse处理日志可以将服务器成本降低一半。
- 2)CH稳定性更好。ES中一个大查询可能导致OOM的问题;ClickHouse通过预设的查询限制,会查询失败,不影响整体的稳定性。
13、Clickhouse中最强大的表引擎当属 MergeTree (合并树)引擎及该系列(***MergeTree)中的其他引擎。MergeTree表引擎主要用于海量数据分析,支持数据分区、存储有序、主键索引、稀疏索引、数据TTL等