首页  

clickhouse MergeTree 和 Distributed 存储引擎     所属分类 clickhouse 浏览量 1556
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