clickhouse MergeTree 和 Distributed 存储引擎
所属分类 clickhouse
浏览量 1734
Clickhouse提供了丰富的存储引擎,存储引擎的类型决定了数据如何存放、如何做备份、如何被检索、是否使用索引。
不同的存储引擎在数据写入/检索方面做平衡,以满足不同业务需求。
Clickhouse不足
不支持事务
聚合操作取决于单台机器的 RAM
资料及文档较少、运维困难
并发量 单个查询比较短时,官方建议100 QPS
写入性能 MergeTree引擎 写入速度大概 50 - 200M / s ,
按照1 K一条记录,每秒写入 50000 ~ 200000条记录
两种最重要的引擎 MergeTree Distributed
MergeTree是ClickHouse中最先进的引擎,并由MergeTree衍生出了一系列的引擎,统称MergeTree系引擎。
特性
支持主键和日期索引
支持数据更新
必须有一个Date类型列,默认按时间进行分区存放
默认分区以月为单位
同一个分区的数据会被切割到不同的文件夹中
后台线程定时合并数据
数据按照主键排序,索引文件
分区特性
老版本的ClickHouse中只支持按月分区
1.1.54310版之后,支持用户自定义分区
可通过system.parts表查看表的分区情况
索引
每个数据分区的子文件夹都有一个独立索引
where子句 索引列及Date列 过滤
Like 不会使用索引
对于日期索引,查询仅仅在包含这些数据的分区上执行
查询时最好指定主键,因为在一个子分区中,数据按照主键存储。
当定位到某天的数据文件夹时,如果这一天数据量很大,查询不带主键就会扫描大量的数据
Distributed
Distributed引擎不存储真实数据,用来做分布式写入和查询,与其他引擎配合使用
Distributed + MergeTree
一种合理的集群拓扑
Distributed 写节点1 写节点2 ... 读节点1 读节点2 ...
MergeTree 数据节点1 数据节点2 数据节点3 ... 数据节点N
Distributed Proxy 只存表结构
MergeTree DataNode,存储真实数据
Distributed 引擎需要指定如下参数 [集群名称,远程数据库名,远程表名,分片规则]
集群名
远程数据库名 比如存储具体数据的MergeTree引擎的数据库名
远程表名 存储真实数据的表名
分片规则 可选
分片 一个 Distributed 表可以被切成多个分片(shard),分片之间没有数据重合。
副本 一个 Distributed 分片可以有多个副本,副本的数据完全相同。
数据读取过程
查询被分发到远程shards上去并行执行
当查询一个副本连接失败,会尝试其他副本
查询会使用远程服务器上引擎的索引
数据聚合之类的操作也会先在远程数据Node上进行,然后把中间结果发送到Distributed引擎所在服务器,做进一步聚合
数据写入过程
两种数据写入方式
直接将数据写入数据节点。最优方式,数据并发写入数据节点 ,效率高
数据写入distributed表 ,Distributed表 根据 shardingkey将数据分发到相应的shard上去
上一篇
下一篇
JVM Attach机制
arthas原理简介
OLAP引擎介绍及比较
后浪程序员
大数据常用存储格式
Apache Parquet