在《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节(免费)》

等等等等

【clickhouse专栏】clickhouse性能为何如此卓越的更多相关文章

  1. 【clickhouse专栏】数据库、数据仓库之间的区别与联系

    从本篇文章开始,笔者打算写一个系列的<clickhouse专栏>,其全称是Click Stream,Data WareHouse,简称ClickHouse.从其全称中的"Data ...

  2. 【clickhouse专栏】单机版的安装与验证

    <clickhouse专栏>第三节内容,先安装一个单机版的clickhouse,是后续学习多副本或者分布式集群安装的基础内容.但基本的clickhouse是不依赖于zookeeper的,只 ...

  3. 【clickhouse专栏】基础数据类型说明

    本文是clickhouse专栏第五篇,更多内容请关注本号历史文章! 一.数据类型表 clickhouse内置了很多的column数据类型,可以通过查询system.data_type_families ...

  4. ClickHouse(03)ClickHouse怎么安装和部署

    本文会介绍如何安装和部署ClickHouse,官方推荐的几种安装模式,以及安装之后如何启动,ClickHouse集群如何配置等. 简单来说,ClickHouse的搭建流程如下: 环境检查,环境依赖安装 ...

  5. ClickHouse(05)ClickHouse数据类型详解

    ClickHouse属于分析型数据库,ClickHouse提供了许多数据类型,它们可以划分为基础类型.复合类型和特殊类型.其中基础类型使ClickHouse具备了描述数据的基本能力,而另外两种类型则使 ...

  6. ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计

    ClickHouse核心架构设计是怎么样的?ClickHouse核心架构模块分为两个部分:ClickHouse执行过程架构和ClickHouse数据存储架构,下面分别详细介绍. ClickHouse执 ...

  7. ClickHouse(07)ClickHouse数据库引擎解析

    目录 Atomic 建表语句 特性 Table UUID RENAME TABLES DROP/DETACH TABLES EXCHANGE TABLES ReplicatedMergeTree in ...

  8. ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析

    目录 建表语法 数据处理策略 资料分享 参考文章 MergeTree拥有主键,但是它的主键却没有唯一键的约束.这意味着即便多行数据的主键相同,它们还是能够被正常写入.在某些使用场合,用户并不希望数据表 ...

  9. 【clickhouse专栏】对标mongodb存储类JSON数据文档统计分析

    一.文档存储的需求 很多的开发者都使用过mongodb,在mongodb中数据记录是以文档的形式存在的(类似于一种多级嵌套SQL的形式).比如下面的JSON数据结构:dev_ip表示某一台服务器的ip ...

随机推荐

  1. 【Android Studio】Gradle统一管理版本号引用配置

    1.在根目录下的build.gradle文件下添加 ext{ .... } 中的内容 ...... // Define versions in a single place ext { // SDK ...

  2. PAT1018 锤子剪刀布

    大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...

  3. java多线程的状态转换以及基本操作

    1. 新建线程 一个java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上java程序天生就是一个多线程程序,包含了:(1)分发处理发送给给JVM信号的线程 ...

  4. 动态修改svg的颜色,svg做背景色时候修改颜色

    svg修改背景色可以使用fill属性来修改,但是我现在需要动态改变svg的颜色,例如我hover的时候 现在发现一种兼容性还不错的方法是css属性mask 类似于给路径填充上颜色,结合backgrou ...

  5. spring原始注解开发-01

    我们使用xml-Bean标签的配置方式和注解做对比理解 1.创建UserDao接口以及UserDao的实现类UserDaoImpl(接口代码省略) public class UserDaoImpl i ...

  6. Nuxt.js(二、解决首屏速度与SEO)

    Nuxt.js(二.解决首屏速度与SEO) 1.普通的Vue SPA初始化加载速度很慢 在传统的web应用中,当用户请求一个页面时,服务器直接返回一个html文件,浏览器直接渲染出来.但是,在vue应 ...

  7. Educational Codeforces Round 121 (Rated for Div. 2)——A - Equidistant Letters

    A - Equidistant Letters 题源:https://codeforces.com/contest/1626/problem/A 今天上午VP了这场CF,很遗憾的是一道题也没写出来,原 ...

  8. Service vs Factory vs provider的迷惑

    刚开始我很迷惑的,但是经过一段时间的项目,还有看大漠老师的东西,似乎明白了,他们的区别也就是  一个人喜欢吃面还是吃饭或者肯德基区别.目的就是填饱肚子! 以下是它们在AngularJS源代码中的定义: ...

  9. Java语言学习day38--8月13日

    ###11哈希表的数据结构 A:哈希表的数据结构:(参见图解) 加载因子:表中填入的记录数/哈希表的长度 例如: 加载因子是0.75 代表: 数组中的16个位置,其中存入16*0.75=12个元素 如 ...

  10. 『现学现忘』Git基础 — 7、设置Git Bash终端默认路径

    目录 1.Git Bash默认路径 2.如何查看Git Bash终端默认路径 3.如何修改Git Bash终端的默认路径 4.拓展:指定目录进入Git Bash终端 5.注意事项 如果您不熟悉Git命 ...