网站销售系统怎么做,从零开始学微信公众号运营推广,广告公司首页,厦门做商城网站Clickhouse 的缘起
Clickhouse 最初是为 Yandex.Metrica 这个世界上第二大的Web分析平台开发的#xff0c;并且一直是这个系统的核心组件。ClickHouse在Yandex.Metrica中的主要任务是使用非聚合数据在在线模式下构建报告#xff0c;使用374台服务器组成的集群#xff0c;在…Clickhouse 的缘起
Clickhouse 最初是为 Yandex.Metrica 这个世界上第二大的Web分析平台开发的并且一直是这个系统的核心组件。ClickHouse在Yandex.Metrica中的主要任务是使用非聚合数据在在线模式下构建报告使用374台服务器组成的集群在数据库中存储的数据超过20.3万亿行压缩后的数据量约为2PB未压缩的数据量(TSV格式)大约17PB。
Clickhouse 是一款面向数据仓库提供实时计算的产品传统数仓普遍存在计算效率低、查询和写入延时高、投资和运维成本高等缺陷。Clickhouse 放弃了很多传统数据仓库习以为常的设计致力于充分发挥单机性能优势提供低成本、高效率的实时数据仓库环境。今天我们就来分析Clickhouse 是如何通过精妙的存储引擎和计算引擎来实现这些目标的。
Clickhouse 为什么这么快
向量化的存储引擎
Clickhouse 是一款列式存储数据库。数据库表通常包含数十甚至数百的列而分析计算只会使用其中的几个列。行存读取时将整行数据读取到内存中然后再选择相关的列进行计算而列式存储仅读取需要参与计算的列因此列存能够极大的降低数据分析过程中需要读取的数据量。
而在计算引擎设计上Clickhouse 首次使用了向量化计算引擎借助于CPU提供的SIMD(Single Instruction Multiple Data单指令多数据流)技术可以充分发挥现代计算机体系架构的优势最大限度的压榨单机性能。在实际使用中百亿以下的单表基本上使用单机就可以处理这种处理能力已经可以满足绝大多数企业的需求也在很大程度上解决了传统数据仓库系统效率低和成本高的问题。 高比例的数据压缩
列存为Clickhouse 带来另一个非常明显的优势是大幅提高了数据压缩空间。列存是将同一列数据存储在连续的空间上字段类型都是相同的数据相似度更高相比于行存数据能够提供更高的数据压缩比从而大幅减少压缩后的数据大小降低磁盘的I/O时间。
实际项目中Clickhouse 的数据压缩比能够达到8:1即8T数据压缩后只需要1T的存储空间。Yandex.Metrica 未压缩数据17PB压缩后2PB压缩比也接近8:1。
高效的I/O优化
超高的压缩比例为Clickhouse 带来了更低的数据存储成本和I/O访问开销同时也带来了额外的计算开销 – 数据解压缩。数据压缩后存储到磁盘上访问时需要进行解压还原数据之后才能参与分析和计算。如何最大程度减少解压时间甚至在数据被程序读取前就过滤掉不相干的数据成为具备压缩能力引擎的一大挑战。
Clickhouse 底层存储引擎使用MergeTree为了应对海量数据查询和管理需求Clickhouse 使用了一种和B树索引完全不同的索引结构 – 稀疏索引。
Clickhouse 批量数据插入形成一个最小的存储单元称为Part每个Part中的数据按照主键排序表是由多个Part组成的。
ClickHouse 的表通常都比较大因此表中的数据通常都是先按照分区键被划分为多个分区分区键常采用日期的方式比如下图中按照月份分区。分区表的Part归属于某一个分区为了实现高效的数据存储ClickHouse会在后台定期对归属于同一个分区的Part进行合并。 每个数据Part被逻辑上拆分为多个颗粒(granules)granules是Clickhouse访问时读取的最小数据集不可分割。granules中的第一行用该行的主键值来标记这个标记保存在 Part 的索引文件中Clickhouse 会为每个granules创建独立的索引文件。不仅仅是主键每一列都会存储类似的标记可以通过这些标记直接在列文件中查找数据。 和B树索引主键和数据一一对应的结构不同稀疏索引的数据并没有精确到行而是通过索引文件中的Mark快速定位到数据所在的granules然后将定位到的候选granules以并行流的方式加载到ClickHouse引擎找到最终匹配的数据。这种索引最大的好处是主键索引占用的存储空间很小扫描的效率也很高非常适合海量数据分析中的范围查询。
简单举例
以下是一个简单的数据查询过程通过这个过程我们可以了解到如何从Clickhouse中获取到最终数据。
select count(distinct action) where datetoDate(2020-01-01) and city’bj’查找primary.idx并找到对应的Mark集合即数据block集合;对于要读取的每个列根据.mrk文件定位到Mark对应在数据文件.bin中的数据offset读取到对应的数据供后续计算。
Clickhouse 的不足
天下没有免费的午餐ClickHouse在提供超强查询性能的同时也会在其他方面做一些取舍。
没有完全成熟的事务能力对于已存在的数据缺乏高效的数据修改和删除能力稀疏索引使得ClickHouse在按键值检索单行的点查询时效率不高。
写在最后
任何架构都不是万能的都有其自身的优点在获取这些优点的同时也存在局限。尽管ClickHouse还存在着些许的不足使得其并不适合作为OLTP型的数据库但并不妨碍其成为优秀的MPP架构数据仓库。
国内诸如字节跳动、腾讯、携程、滴滴出行等众多头部互联网公司都在使用ClickHouse作为分析查询引擎提供业务决策、用户画像等场景。在当前基础架构国产化的背景下还有一众公司基于ClickHouse推出了自己的数据仓库产品将ClickHouse的产品和理念推广到更广阔的领域。