快速了解ClickHouse原理
ClickHouse是一个列式数据库管理系统,特别适用于在线分析处理(OLAP)场景。它是由Yandex公司的工程师开发,旨在处理大量数据和执行快速查询。以下是ClickHouse原理的一些深入知识点。 ### ClickHouse的使用场景 ClickHouse主要被用于处理以下类型的大数据事件流: - 网站访问者的行为事件(Actions of website visitors) - 广告展示次数(Ad impressions) - 金融交易记录(Financial transactions) - DNS查询(DNS queries) - 其他数据流 ClickHouse的核心功能是将这些事件信息保存并实时更新,以便能够从中提取洞察力。 ### ClickHouse的设计哲学 - 支持在实时更新数据上进行交互式查询(Interactive queries on data updated in real-time)。 - 需要清洁的结构化数据(Cleaned structured data is needed)。 - 避免预先聚合数据(Try hard not to pre-aggregate anything)。 - 查询语言是SQL的方言,并且包含许多扩展(Query language: a dialect of SQL + lots of extensions)。 ### 示例查询 在Web分析系统中,一个查询示例是获取某个计数器(CounterID)在最近一周内的前10个引用来源(Top-10 referers for a counter for the last week)。该查询需要使用SELECT语句,从hits表中筛选出特定条件的数据并进行分组、排序,最后限定查询结果为10条。 ### 查询执行的加速 为了快速执行查询,ClickHouse采用以下策略: 1. **快速读取数据**:只读取所需列(Only needed columns),例如CounterID、Date、Referer,并利用索引进行读取(Locality of reads,需要索引)。 2. **数据压缩**(Data compression):以减少磁盘I/O和网络传输的负担。 3. **快速处理数据**:采用向量化执行(Vectorized execution,基于块的处理),并充分利用所有可用的核心和机器进行并行处理(Parallelize to all available cores and machines),同时进行专业化和底层优化(Specialization and low-level optimizations)。 ### 索引的重要性 ClickHouse遵循与传统DBMS相同的索引原理。大多数查询都包含对CounterID和可能的Date字段的条件,因此这些字段成为了索引的候选。索引是稀疏的,必须能够适应内存,并且默认的粒度值(granularity)通常(8192)已经足够好。它不创建唯一约束(unique constraint),对点查询(point queries)性能不佳,但对于大多数查询来说使用索引总是有益的。 ### 表格排序维持 ClickHouse使用MergeTree引擎来维护一组排序过的部分数据,这与LSM树(日志结构的合并树)的概念类似。为了保持表格排序: - 插入的事件几乎是按时间排序的,但必须按主键排序。 - 主键排序保持在磁盘上的部分(primary key part on disk)。 - 新插入的行(insertion number)通过合并排序后的部分来实现。 ### 实现细节 ClickHouse中的索引以稀疏形式存在,存储在内存中,不需要是唯一的。索引默认粒度值(8192)足够使用,且不强制创建唯一约束。点查询性能不佳,但读取数据时使用索引始终是划算的。表根据索引进行物理排序,且只能有一个索引。索引通过标记文件(.mrk文件),数据文件(.bin文件)和索引文件(.idx文件)来实现内部机制。 ### 总结 ClickHouse的设计哲学和执行机制允许它在处理大数据场景时表现出色。它能够处理高速、实时更新的数据流,并提供实时交互式查询功能。ClickHouse通过利用其专有算法和数据存储机制(如MergeTree和稀疏索引),优化数据读取、压缩和处理的速度,使分析查询能够快速执行并得到结果。对于大数据和需要快速查询响应的应用场景,ClickHouse提供了强有力的数据处理能力。
剩余33页未读,继续阅读
- mazihan06032018-07-16只有很少一部分内容,还是谢谢楼主分享
- 粉丝: 2
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 数据库课程设计-基于的个性化购物平台的建表语句.sql
- 数据库课程设计-基于的图书智能一体化管理系统的建表语句.sql
- Java 代码覆盖率库.zip
- Java 代码和算法的存储库 也为该存储库加注星标 .zip
- 免安装Windows10/Windows11系统截图工具,无需安装第三方截图工具 双击直接使用截图即可 是一款免费可靠的截图小工具哦~
- Libero Soc v11.9的安装以及证书的获取(2021新版).zip
- BouncyCastle.Cryptography.dll
- 5.1 孤立奇点(JD).ppt
- 基于51单片机的智能交通灯控制系统的设计与实现源码+报告(高分项目)
- 什么是 SQL 注入.docx