写点什么

比 MySQL 快 839 倍!揭开分析型数据库 JCHDB 的神秘面纱

发布于: 2020 年 10 月 15 日

前不久,京东智联云云产品研发部架构师王向飞老师在线上公开课《Clickhouse在京东智联云的大规模应用和架构改良》中,介绍了Clickhouse 数据库在京东智联云的落地应用与优化改进经历,为想要深入了解Clickhouse的小伙伴们送上了一堂干货满满的技术分享课程。

 

精彩分享回顾:《亿级数据库毫秒级查询?看完这一篇,海量数据赋能你也行》

 

现在,这个基于Clickhouse的分析型云数据库JCHDB已正式上线,大家可以前往京东智联云控制台开通试用。

 

JCHDB是京东智联云基于ClickHouse打造的联机分析(OLAP)服务,采用分布式架构,可实现多核、多节点的并行化大型查询,其查询性能比传统开源数据库快1~2个数量级,可充分满足大型业务系统数据分析的需求。

 

ClickHouse为什么快?



ClickHouse是Yandex公司开源的一款分析型数据库。Yandex是俄罗斯最大的提供搜索服务的公司,包含各类在线流量分析服务。ClickHouse就是在这样的背景下出现的。下面有一组数据,可以先来让你感受一下ClickHouse的强悍性能:





▲各种类型数据库在1亿数据量下的查询性能▲

 

上图列举了包含count、sum、group by、order by等情况的查询对比,同等条件下,ClickHouse的查询性能异常强悍:



  • 是MySQL的839倍

  • 是Greenplum的24倍

  • 是Vertica的5倍

 

那么,ClickHouse 为什么能这么快呢?下面我就带大家来一起揭开它的神秘面纱:

 

1,列式存储与高效的数据压缩

ClickHouse为了处理大数据量,同样选择了列式存储,这种方式不但可以节省数据查询时的IO,更有利于数据压缩。ClickHouse在数据压缩上默认使用LZ4算法,总体压缩比可达8:1。高压缩比减小了数据体量,进而会提高磁盘IO及网络IO的效率,但压缩和解压还是会消耗CPU资源,所以ClickHouse对数据块的大小做了优化控制来达到最佳效果。

 

2, 分布式多主架构提高并发性能

ClickHouse使读请求可以随机打到任意节点,均衡读压力,写请求也无需转发到master节点,不会产生单点压力。并且使用分片(shard)分区(partition)的概念,使数据可以通过随机或是hash的方式准均分地落在所有分片上,即数据的水平拆分,加速数据查询时的并行能力。在节点内部使用分区分割表数据,在进一步提升并行处理能力的同时,更能加快数据块的快速定位。



3,向量引擎利用SIMD指令实现并行计算

向量引擎是ClickHouse很重要的一个特点,向量计算就是ClickHouse自底向上极尽优化设计思路的重要体现。向量引擎借助CPU的SIMD实现,对多个数据块来说,一次SIMD指令会同时操作多个块,大大减少了命令执行次数,缩短了计算时间。向量引擎在结合多核后会将ClickHouse的性能淋漓尽致的发挥出来。



4,稀疏索引及跳数索引 

ClickHouse使用稀疏索引大大提高了搜索性能。ClickHouse的索引是固定间隔(默认8192)抽样形成的,而不是一一对应的索引,这样就在大数据量情况下,大大缩减了索引大小,进而可以将索引加载到内存中,加快索引速度。如果不够快,ClickHouse还提供了二级索引(跳数索引),这类索引是建立在主键索引(稀疏索引)之上的,以跳表的原理为实现,加快主键索引的定位速度。当然这种设计对于单条数据的查询来讲并不适合,这也是ClickHouse作为OLAP行数据库对OLTP类部分功能舍弃,也证明了ClickHouse对于OLAP领域的特有针对性。

 

5,提供丰富的表引擎匹配各类分析场景



ClickHouse针对特殊业务需求做许多业务抽象,如:

  • ReplacingMergeTree

  • CollapsingMergeTree

  • VersionedCollapsingMergeTree

  • SummingMergeTree

  • AggregatingMergeTree



如果数据有去重场景可以使用前三种,如果数据有简单字段预聚合操作可以使用SummingMergeTree,如果有自定义复杂预聚合操作可以使用AggregatingMergeTree。总之,ClickHouse通过各类表引擎,省去了对数据预处理的环节,加快了数据处理速度。

 

6,支持数据采样统计

这是ClickHouse比较特别的一个设计,支持百分比数据采样,并进行统计分析,有很多场景是不需要取到所有完整数据的,或者在大数据量条件下只需获取大体趋势,这类场景不需要业务端做额外工作,使用ClickHouse就可以了。

 其实ClickHouse并不是在某个方面用了特别的技术,而是在所有可以优化的方面都极尽优化,所以跬步千里。

 

ClickHouse使用场景



ClickHouse是针对OLAP场景而设计研发的,所以在OLTP场景还是会有些水土不服,所以结合以上特点,推荐ClickHouse在如下场景中使用:

 

  • 海量数据的存储和查询统计

  • 用户行为分析

  • 实时报表

  • 商业智能

  • 其他实时分析的业务或场景



 京东智联云分析型数据库JCHDB



结合种种优势及京东集团内部多年的使用经验,京东智联云基于开源ClickHouse研发了分析型数据库JCHDB服务,并将其对外赋能。京东智联云JCHDB主要是依赖开源ClickHouse,并基于云K8s平台构建的分新型数据库服务,可以为用户提供快速创建、自定义规格、规格变配等服务的同时,可以让用户使用ClickHouse各种丰富的功能。

 

▲JCHDB架构图▲

 

JCHDB采用Zookeeper集群和ClickHouse集群的组合方式结合ReplicatedMergeTree表引擎来提供多副本机制,使多副本实现单写,并且多节点异步同步数据。这样可确保数据的冗余存储,保证数据的高可用性。JCHDB通过用户VPC、服务VPC和管理VPC互相隔离的方式保证ClickHouse节点的数据安全性。同时,JCHDB通过将丰富的指标及日志数据对接到统一监控平台,实现了数据库节点对用户的可观测性,可使用户更加透明安心地使用JCHDB。

 

JCHDB如何跑在K8s上



ClickHouse的集群架构天然就适合跑在K8s上,外加K8s已经成熟的StatefulSet,更加适合使用K8s进行调度,并且基于K8s进行架构部署也会更好地顺应多云思想。

 

1.jpg

▲JCHDB K8s架构图▲

 

针对ClickHouse集群的复杂度,使用Operator自定义CRD进行监听和调度。以Helm的方式进行chart包管理,通过values.yaml进行渲染,可灵活对集群进行复杂多样的属性配置。利用StatefulSet并挂载云盘,使存储和计算分离,同时也可以使pod故障实现秒级恢复。JCHDB不但使用多副本保证计算节点的高可用,还使用云盘三备份方式保证数据的高可用。

 

JCHDB支持多可用区,实现高可用



JCHDB支持多可用区部署。虽然上面提到了很多可以保证高可用的机制和措施,但如果大部分数据库实例都被调度到了同一台物理机,在这台物理机突发故障的时候也是不可想象的。



▲JCHDB多可用区架构图▲

 

JCHDB会根据用户对可用区的选择实现不同的调度方式,如果用户选择3副本3可用区,则会将3个副本节点调度到3个可用区,如果多余3个节点,会在此基础上再近似均分的方式进行调度。ClickHouse和Zookeeper节点都是类似的调度方式。如果用户选择了单可用区,也会保证同分片的不同副本节点不会被调度到同一台物理机。用户可以根据自己的需求自行选择可用区配置。

 

JCHDB丰富的监控指标

 

JCHDB不但提供了许多实例级的基础指标(如CPU使用率、内存使用率、磁盘使用及IO指标等),还提供了针对ClickHouse的许多相关指标(QPS、每秒插入记录数、积压job数、当前活跃连接数等)。



▲JCHDB部分指标数据监控图▲

 

小结

当然,以上所述只是JCHDB的冰山一角,本篇文章先让大家对JCHDB有个初步了解,欢迎有兴趣的或有需求的同学们来试用。点击阅读即可详细了解京东智联云JCHDB



发布于: 2020 年 10 月 15 日阅读数: 100
用户头像

拥抱技术,与开发者携手创造未来! 2018.11.20 加入

我们将持续为AI、云计算、IoT等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东智联云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩~

评论

发布
暂无评论
比MySQL快839倍!揭开分析型数据库JCHDB的神秘面纱