ClickHouse 的 MergeTree 引擎有哪些性能优势?

news/2024/10/4 13:27:48/

ClickHouse 的 MergeTree 引擎是其最核心的表引擎之一,具有以下性能优势:

1. 高吞吐量的数据写入:MergeTree 引擎将数据以不可变的片段形式写入磁盘,这些片段会定期通过后台线程合并,优化存储并提高查询性能。

2. 主键索引:MergeTree 支持主键索引,通过 ORDER BY 或 PRIMARY KEY 定义。索引是稀疏的,这意味着不是每行数据都有一个索引条目,而是每隔一定的数据量(由 index_granularity 控制)创建一个索引条目,这样可以在保持索引较小的同时快速定位数据。

3. 数据分区:MergeTree 允许按某个键(如日期)分区数据,使得查询可以只扫描相关的分区,从而加快查询速度。

4. 数据压缩:MergeTree 存储时会对数据进行压缩,减少存储空间的使用,并且压缩算法(如 LZ4)是针对列式存储优化的,可以提高读取速度。

5. 自适应索引粒度:从 ClickHouse 19.11 版本开始,支持自适应索引间隔大小,可以根据写入数据的大小动态调整索引粒度,以优化查询性能。

6. 多版本并发控制(MVCC):MergeTree 支持数据的多版本控制,允许旧数据版本在后台合并过程中存在,而不会影响新数据的写入和查询。

7. 后台合并:MergeTree 会在后台自动合并数据片段,这个过程是增量和优化的,不会对前台查询造成太大影响。

8. 支持数据副本:通过在表引擎名前添加 Replicated 前缀(如 ReplicatedMergeTree),MergeTree 支持数据的多副本,提高数据的可用性和容错性。

9. 支持 ALTER 操作:MergeTree 支持对表结构进行实时修改,如添加或删除列,这对于在线服务来说非常重要。

10. 列式存储:MergeTree 按列存储数据,这样可以在查询时只读取必要的列,减少 I/O 操作。

11. 数据标记和稀疏索引的协同工作:MergeTree 使用数据标记文件(.mrk)和稀疏索引协同工作,快速定位到具体的数据块,提高查询效率。

12. 冷热数据分离:从 ClickHouse 19.15 版本开始,支持多路径存储策略(storage_policy),可以将频繁访问的数据和不常访问的数据分别存储到不同的路径上。

这些特性使得 MergeTree 引擎非常适合处理大规模数据集,尤其是在读多写少的场景下,能够提供极高的查询性能。
 


http://www.ppmy.cn/news/1533790.html

相关文章

【openwrt-21.02】T750 openwrt switch划分VLAN之后网口插拔状态异常问题分析及解决方案

Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …

【深度学习】—线性回归 线性回归的基本元素 线性模型 损失函数 解析解 随机梯度下降

【深度学习】— 线性回归 线性回归的基本元素 线性模型 损失函数 解析解 随机梯度下降 线性回归线性回归的基本元素 线性模型损失函数解析解随机梯度下降小批量随机梯度下降梯度下降算法的详细步骤解释公式 线性回归 回归(regression)是能为⼀个或多个⾃…

开发微信小程序 基础03

WXSS(类似CSS) 定义: WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML的组件样式,类似于网页开发中的 CSS。 分类: 全局样式:定义在 app.wxss 中的样式为全局样式,作用于每一个页面 局部样式&…

如何封装微信小程序中的图片上传功能

文章目录 前言一、需求分析与设计思路二、上传图片功能封装三、页面调用示例四、功能改进与扩展4.1 压缩图片4.2 上传进度4.3 重试机制 五、总结 前言 在微信小程序开发中,图片上传功能是一个十分常见的需求,不管是社交分享、商城中的商品图片上传&…

「C++系列」预处理器

【人工智能教程】,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站:【人工智能教程】 文章目录 一、预处理器1. 宏定义(Macro Definition)2…

Python FastApi 实现签名验证

大家在写后台接口时,都想要设计一个安全的,稳定的架构来支持各种业务,此文章介绍的Token的机制,和签名的验证。Token作为鉴权,签名作防篡改 目录 1.Token 2.签名 3.接口中的实现 1.Token 此处介绍的实现方式较简单…

docker pull 超时Timeout失败的解决办法

当国内开发者docker pull遇到如下提示时,不要惊讶 [rootvm /]# docker pull postgres Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 128.121.146.235:443: i/o timeout [rootvm /]# 自2024…

关于对比学习(简单整理

什么是对比学习? ​ 对比学习是一种学习方法,侧重于通过对比正反两方面的实例来提取有意义的表征。它利用的假设是,在学习到的嵌入空间中,相似的实例应靠得更近,而不相似的实例应离得更远。通过将学习作为一项辨别任务…