Clickhouse的基本介绍

本文介绍了ClickHouse,一款专为OLAP设计的列式数据库,其特点包括C++编写的高效引擎、SQL支持、列式存储的优势、向量化处理和高吞吐能力。文章还对比了其与其他数据库在性能和数据压缩上的表现,以及数据分区和并行处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Clickhouse的简介

  ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用 C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。

2. Clickhouse的列式存储

  ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

在传统的行式数据库系统中,数据按如下顺序存储:

RowWatchIDJavaEnableTitleGoodEventEventTime
#0893543506621Investor Relations12016/5/18 5:19
#1903295099580Contact us12016/5/18 8:10
#2899537060541Mission12016/5/18 7:38
#N

  处于同一行中的数据总是被物理的存储在一起。常见的行式数据库系统有: MySQL、Postgres、oracle和MS SQL Server。

在列式数据库系统中,数据按如下的顺序存储:

Row:#0#1#2#N
WatchID:893543506629032950995889953706054
JavaEnable:101
Title:Investor RelationsContact usMission
GoodEvent:111
EventTime:2016-05-18 05:19:202016-05-18 08:10:202016-05-18 07:38:00

  该示例中只展示了数据在列式数据库中数据的排列顺序。对于存储而言,列式数据库总是将同一列的数据存储在一起,不同列的数据也总是分开存储。

  常见的列式数据库有: Vertica、 Paraccel (Actian Matrix,Amazon Redshift)、 Sybase IQ、 Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb+。

  不同的存储方式适合不同的场景,这里的查询场景包括: 进行了哪些查询,多久查询一次以及各类查询的比例; 每种查询读取多少数据————行、列和字节;读取数据和写入数据之间的关系;使用的数据集大小以及如何使用本地的数据集;是否使用事务,以及它们是如何进行隔离的;数据的复制机制与数据的完整性要求;每种类型的查询要求的延迟与吞吐量等等。

  系统负载越高,根据使用场景进行定制化就越重要,并且定制将会变的越精细。没有一个系统同样适用于明显不同的场景。如果系统适用于广泛的场景,在负载高的情况下,所有的场景可以会被公平但低效处理,或者高效处理一小部分场景。

列式储存的好处:

  • 对于列的聚合,计数,求和等统计操作原因优于行式存储。
  • 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
  • 由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于 cache 也有了更大的发挥空间。

3. Clickhouse的SQL引擎和向量化

  支持SQL
ClickHouse支持基于SQL的声明式查询语言,该语言大部分情况下是与SQL标准兼容的。 支持的查询包括 GROUP BY,ORDER BY,IN,JOIN以及非相关子查询。 不支持窗口函数和相关子查询。

  向量引擎
为了高效的使用CPU,数据不仅仅按列存储,同时还按向量(列的一部分)进行处理,这样可以更加高效地使用CPU。

4. Clickhouse的吞吐能力

  ClickHouse 采用类LSM Tree的结构,数据写入后定期在后台Compaction。通过类 LSM tree的结构,ClickHouse 在数据导入时全部是顺序 append 写,写入后数据段不可更改,在后台compaction 时也是多个段 merge sort 后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在 HDD 上也有着优异的写入性能。
  官方公开 benchmark 测试显示能够达到 50MB-200MB/s 的写入吞吐能力,按照每行100Byte 估算,大约相当于 50W-200W 条/s 的写入速度。

5. 数据分区和线程级并行

  ClickHouse 将数据划分为多个 partition,每个 partition 再进一步划分为多个 index granularity(索引粒度),然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条Query就能利用整机所有CPU。极致的并行处理能力,极大的降低了查询延时。
  所以,ClickHouse即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务,ClickHouse 并不是强项。

6. 性能数据

  • 数据压缩
    数据压缩方面,Sparkql、Impala、Presto均采用的是hive元数据,hive数据100G上传之后显示为96.3G(.dat数据格式),压缩比0.963;hawq压缩后数据大小为68.2G(.dat格式),压缩比:0.682;clickhouse采用自己默认格式42G;greenplum未使用压缩,数据存储大小为98G。
  • 性能测试

多表关联查询
在这里插入图片描述

单表查询性能
在这里插入图片描述

  ClickHouse 作为目前所有开源MPP计算框架中计算速度最快的,它在做多列的表,同时行数很多的表的查询时,性能是很让人兴奋的,但是在做多表的join时,它的性能是不如单宽表查询的。性能测试结果表明ClickHouse在单表查询方面表现出很大的性能优势,但是在多表查询中性能却比较差,不如presto和impala、hawq的效果好。

更多内容关注公众号
公众号地址

<think>好的,用户想了解ClickHouse基本概念和功能,需要介绍它的基本功能和特点。首先,我需要根据提供的引用内容来整理答案。引用[2]提到ClickHouse是一个列式存储的数据库,用于在线分析处理(OLAP)。引用[4]和[5]强调了列式存储的优势,比如高效压缩和快速查询。需要解释列式存储和行式存储的区别,如引用[3]中的对比。接下来是功能特点。引用[4]和[5]提到了数据分片(Sharding)、分区(Partitioning)、主键索引、稀疏索引等。这些功能如何提升性能,比如并行处理和降低延迟。还要提到数据TTL和主备复制,确保数据的自动管理和高可用性。 性能方面,引用[5]指出ClickHouse的并行处理能力,利用多CPU核心,适合处理大数据量的查询,但高QPS场景可能不是强项。引用[2]中的OceanBase对比显示ClickHouse性能优秀,但需注意适用场景,如引用[5]提到的适合宽表查询而非初始存储。 需要确保回答结构清晰,分点列出基本概念和核心特点,可能还要对比其他数据库,如Greenplum,如引用[3]的问题。同时,根据用户要求生成相关问题,比如应用场景、性能优化、对比分析等。最后检查LaTeX格式是否正确,所有数学表达式用$...$,独立公式用$$...$$,但这里可能用不到太多数学公式,所以重点放在功能描述和结构上。确保引用标识正确,如[^2]、[^4]等,自然地添加到相关段落末尾。</think>### ClickHouse基本概念与功能 #### 一、基本定义 **ClickHouse** 是一款开源的列式存储数据库,专为**在线分析处理(OLAP)**场景设计,擅长处理海量数据的高效查询与分析[^2]。其核心目标是通过极致的性能优化,支持实时生成分析报告。 #### 二、核心功能 1. **列式存储** - 数据按列而非行存储,减少查询时需读取的数据量。 - 支持高效压缩(如LZ4、ZSTD),降低存储成本[^4]。 - 示例:若查询仅需`用户ID`和`消费金额`两列,系统无需读取整行数据。 2. **数据分片与分区** - **分片(Sharding)**:将数据水平拆分到多台机器,实现分布式查询。 - **分区(Partitioning)**:按时间或业务键划分数据,加速范围查询[^4]。 3. **索引优化** - **主键索引**:支持快速范围查询。 - **稀疏索引**:通过抽样减少索引内存占用[^4]。 4. **并行处理** - 单条查询可拆分到多个CPU核心并行执行,充分利用硬件资源[^5]。 5. **数据生命周期管理(TTL)** - 自动清理过期数据,例如删除30天前的日志[^4]。 #### 三、核心特点 1. **高性能分析** - 在**宽表查询**场景下(字段多、数据量大),性能远超传统行式数据库[^5]。 - 适用于广告分析、用户行为日志处理等场景[^2]。 2. **扩展性与容错** - 支持多副本(主备复制),保障数据高可用[^4]。 3. **局限性** - **不适合高QPS场景**:单查询占用多CPU,并发能力受限[^5]。 - **事务支持弱**:侧重分析而非实时事务处理[^3]。 #### 四、典型应用场景 - **实时数据仓库**:处理TB级数据聚合。 - **时序数据分析**:如物联网设备监控。 - **用户画像分析**:快速统计用户标签分布。 ```sql -- 示例:ClickHouse查询语句 SELECT user_id, sum(amount) AS total_spent FROM user_transactions WHERE date >= '2023-01-01' GROUP BY user_id ORDER BY total_spent DESC LIMIT 10; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值