【clickhouse专栏】clickhouse性能为何如此卓越
在《clickhouse专栏》上一篇文章中《数据库、数据仓库之间的区别与联系》,我们介绍了什么是数据库,什么是数据仓库,二者的区别联系。clickhouse的定位是“数据仓库”,所以理解了上一篇的内容,其实就能够知道clickhouse适用于什么样的应用场景,不适合什么样的应用场景。
下面本节我们就来继续为大家介绍clickhouse的一些非常有意义的特性,来帮助大家更深入的理解ck的应用场景,以及它为什么被称为“性能怪兽”。
一、列式数据存储
clickhouse的性能之所以彪悍,其列式存储设计是非常重要的原因之一。给大家举一个例子,假如我们现在有一张学生信息表student
id | name | age |
---|---|---|
1 | 小红 | 7 |
2 | 小明 | 8 |
3 | lucy | 7 |
如果这张表采用行式数据存储,其在磁盘上的结构是下面这样的:
如果这张表采用列式数据存储,其在磁盘上的结构是下面这样的:
对比上面的两张图我们可以看到,采用列式存储的优点。
- 比如:我们查询学生年龄的最大值,列式数据存储只需要定位到年龄那一列的起始地址,然后顺序读取数据进行排序计算即可。而行式数据存储的方式,因为年龄这一字段的数据单元不是连续的,需要根据索引不断的寻址,或者全表扫描才能获取到所有的年龄数据。所以在采用列式存储时,我们需要针对某一列进行查询过滤、统计计算性能就远胜于行式数据存储方式。
- 另外,因为数据库的设计一列的数据通常是同一种数据类型,列式数据存储有比行式存储高达10倍以上的压缩比,节省了大量的磁盘及内存空间,可以有效降低服务器成本。
二、支持SQL并且性能卓越
目前开源世界里的大部分的列式存储数据库是不支持SQL的,即使很多号称支持SQL,其实支持SQL也是伪SQL,并且支持能力有限。
但是经过笔者的实验,clikhouse对于标准SQL的支持已经可以与传统的关系型数据库媲美,虽然对于数据仓库click house,我更建议大家使用宽表进行数据存储,但是不代表ck不具备多表关联查询的能力。
可以访问:https://clickhouse.com/benchmark/dbms/ ,获取click house官方在线的针对各种数据统计型SQL的性能对比。
三、分布式分片存储集群
clikhouse不仅支持单机模式,也支持分布式分片数据存储的集群模式。数据以分片的行式,存储在多台服务器节点上面,因此ck可以利用集群服务器的规模计算能力,快速的做出数据统计结果的响应。ck数据分片分布式存储的机制,使得clickhouse具备了横向扩展,海量数据分析处理的能力。
数据分片包括很多的方式,比如:数据随机写入不同服务器分片存储上、数据被发往指定的服务器分片存储之上、数据按照hash值进行分片、当然我们还可以自定义数据分片的方式。
分布式数据存储将数据分散到集群内的各个服务器上(以分片(shard)的行式存在),为了保证数据的安全,每一个分片又有多个副本(replica),副本也是分布式存储的,这样即使部分服务器宕机,仍然可以保障ck集群可用。
四、 支持按序存储
与传统的RMDB数据库不同的是,clickhouse支持在建表的时候就通过sort by关键字指定排序字段。这样在数据入表的时候,实际是先进行了排序操作,按照排序字段进行排序后的数据有序存放。
后续在进行数据查询、过滤、统计的时候,就能够有效的、快速的获取连续的数据块中的数据,提升查询统计的性能。这种按序存储的特性其实还是有非常广泛的应用场景的,比如:股票K线图都是按照交易日时间排序的,预设排序字段、按序存储有效的提升了统计性能。
五、支持数据TTL
在数据统计分析的数据库中,通常我们需要数据TTL能力,也就是说:某些数据达到一定的存储周期之后自动删除。ck就提供了这种能力,降低了系统运维人员的工作难度。
ck支持以下几种粒度的TTL
- 列级别TTL:为某一列设置TTL时间,当这一列中的部分数据过期之后,列值会被自动替换为默认值,全部数据过期之后会自动删除该列。
- 行级别TTL:为某一行设置TTL时间,当某一行过期后,会直接删除该行。
- 分区级别TTL:ck支持数据分区并设置TTL时间,当分区过期后,会直接删除该分区。
推荐阅读
限于博文篇幅,更多精彩内容我就不一一列举了,推荐阅读
《原创精品视频及配套文档:springboot-已录制97节(免费)》
等等等等
相关文章
- 程序员,保险公司招聘不要轻易跑过去,省省路费省省时间,别浪费感情,特别是招聘什么业务主管经理的
- 求助,有谁能跟杭州公安局的人说上话?西湖区文新派出所更好,想解决一下女儿名字的问题,万分感谢。
- 走通用软件架构路线?走通用软件产品路线?我们都要有梦想与大家一起分享走过的经验
- 实施行政审批流程系统程组件的经验总结,规范化电子化流程管理(有点儿长,准备好茶叶)
- 当项目经理要么学会向客户说"不",要么选择折磨自己,增加成本延长项目周期
- 半天打造小型万能OA办公系统, 靠的就是万能表单提交 + 轻量级工作流审批组件
- 用一个系统去控制管理多个现有系统, 实现核心集中的统一管理控制系统
- C# GetSchema Get List of Table 获取数据库中所有的表名以及表中的纪录条数的方法
- C#缺省参数可以让代码变得更加简洁明了与时俱进心里敞亮了很多了
- 让一个软件系统同时支持多个多种数据库灵活配置,让客户可以任意配置各个核心数据库部分
- 浅谈管理软件开发类项目是怎么来的,怎么接到项目的,欢迎大家补充
- 开发各种信息管理系统的标准演示数据都帮你整理好了,少了录入演示\测试\模拟数据的烦恼了[提供下载]
- C# winform 窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试
- 从深圳回杭州的飞机上捡了一个不错的手机,被小考验了一下
- 国内的IT生意还真TMD难做,想生存发展大家还得多思考一下,出路在哪里?稍微迷茫了一点点
- 工作流引擎组件[行政审批流程组件] 开发实施过程中遇到的问题汇总,希望能对大家有参考价值
- 大哥你需求里说只要工作流引擎组件[行政审批流程组件],怎么真正需要的东西这么....悲剧了,客户需求无止境.........
- 浅谈专心只学一门C#的优缺点[邀月补充:一精胜于十专]
- CTO(首席技术官)
- C# C/S 图片验证码功能源码