在《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. 【c++】容器的基本操作

    操作\容器 vector list string set stack queue map 插入 push_bcak().insert() push_back() .push_front().inser ...

  2. CommonsCollection7反序列化链学习

    CommonsCollections7 1.前置知识 Hashtable Hashtable实现了Map接口和Serializable接口,因此,Hashtable现在集成到了集合框架中.它和Hash ...

  3. Mybatis-plugins分页助手实现查询数据分页

    其他具体代码接上文->mybatis自定义处理器 1.导入坐标 <dependency> <groupId>com.github.pagehelper</group ...

  4. 解决pycharm的爬虫乱码问题(初步了解各种编码格式)

    Ascii码(American Standard Code for Information Interchange,美国信息互换标准代码):最初计算机只在美国使用时,只用8位的字节来组合出256(2的 ...

  5. 以ARM和RISC-V为内核的单片机写寄存器

    我以为这是个很简单的问题,没想到还有一些初学者不会.可能他们也是跟我一样是直接学的如何操作单片机并没有学微机原理么. ARM和RISC-V的机器的系统架构都是哈佛结构的,意思是程序存储器.数据存储器和 ...

  6. ASP.NET Core的几种服务器类型[共6篇]

    作为ASP.NET CORE请求处理管道的"龙头"的服务器负责监听和接收请求并最终完成对请求的响应.它将原始的请求上下文描述为相应的特性(Feature),并以此将HttpCont ...

  7. OpenHarmony 3.1 Beta 版本关键特性解析——ArkUI canvas组件

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 江英杰 华为技术有限公司 canvas 是 ArkUI 开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活. ...

  8. Java应用工程结构

    分层的本质是关注点分离,隔离对下层的变化,可以简化复杂性,使得层次结构更加清晰. 1. 主流分层结构介绍 目前业界存在两种主流的应用工程结构:一种是阿里推出的<Java开发手册>中推荐的, ...

  9. 使用Harr特征的级联分类器实现目标检测

    前言  最近在学习人脸的目标检测任务时,用了Haar人脸检测算法,这个算法实现起来太简洁了,读入个.xml,调用函数就能用.但是深入了解我发现这个算法原理很复杂,也很优秀.究其根源,于是我找了好些篇相 ...

  10. 论文阅读 Continuous-Time Dynamic Network Embeddings

    1 Continuous-Time Dynamic Network Embeddings Abstract ​ 描述一种将时间信息纳入网络嵌入的通用框架,该框架提出了从CTDG中学习时间相关嵌入 Co ...