今天为大家介绍一下列式数据库clickhouse,主要包含其特性及适用场景等。

一、什么是 ClickHouse?

ClickHouse 是一个开源的列式的、联机分析处理(OLAP) 数据库管理系统(DBMS),由俄罗斯的 Yandex 公司开发,最初用于其旗舰产品 Yandex.Metrica(世界第二大网络分析平台)进行海量数据分析。

它的核心设计目标就是一个字:快。它能够在毫秒到秒级的时间内对海量数据集(从数亿到数万亿行)运行复杂的分析查询(即 GROUP BY, ORDER BY, JOIN 等操作)。

二、核心特性与设计理念

要理解 ClickHouse 为什么这么快,需要了解它的核心设计:

  1. 列式存储

    • 这是与 MySQL、PostgreSQL 等行式数据库最根本的区别。
    • 行式存储: 将一行的所有数据(用户ID、姓名、年龄…)物理地存储在一起。适合频繁的、基于单条记录的读写操作(OLTP)。
    • 列式存储: 将每一列的数据(所有用户的ID、所有用户的姓名…)分别存储在一起。适合需要对某一列或某几列进行批量扫描和计算的聚合查询(OLAP)
    • 优势
      • 压缩效率高: 相同类型的数据存储在一起,压缩算法(如 LZ4, ZSTD)效率极高,通常可实现 10:1 甚至更高的压缩比,大幅减少 I/O 压力。
      • 读取数据少: 查询通常只关心少数几列,无需读取整行数据,极大减少了磁盘 I/O。
  2. 向量化查询执行

    • 传统的数据库处理数据是一行一行进行的(逐行处理)。
    • ClickHouse 利用了 CPU 的 SIMD 指令集按批处理数据(比如一次处理 1024 行),而不是单行。这大大减少了指令开销,充分发挥了现代 CPU 的并行计算能力,显著提高了吞吐量。
  3. 数据压缩

    • 如上所述,列式存储天然适合压缩。高压缩比不仅节省存储空间,更重要的是减少了需要从磁盘读取的数据量,而 I/O 往往是分析查询的最大瓶颈。
  4. 并行和分布式处理

    • ClickHouse 可以在单个服务器上利用所有可用的 CPU 核心和磁盘进行并行查询。
    • 它原生支持分片和复制,可以轻松构建一个分布式集群。查询可以跨多个分片并行执行,然后将结果聚合返回,实现横向扩展。
  5. 丰富的表引擎

    • 这是 ClickHouse 的一个独特而强大的功能。表引擎决定了数据如何被存储、索引和复制。
    • MergeTree 家族引擎: 这是核心引擎,支持主键索引、数据分区(Partitioning)、数据副本(Replication)和稀疏索引,使其查询速度极快。
    • Log / TinyLog 引擎: 用于小量测试数据,功能简单。
    • Kafka / MySQL / PostgreSQL 等引擎: 作为集成引擎,可以直接从 Kafka 读取消息或映射远程的 MySQL 表,极大方便了数据接入。
  6. 物化视图和实时数据摄入

    • ClickHouse 支持在数据插入时自动计算和更新物化视图,非常适合实时数据流(如日志、点击流)的实时聚合分析。
    • 它支持高性能的数据插入,官方宣称其写入速度可达每秒 50-200MB(未压缩数据)。
  7. SQL 支持,降低学习成本

    • ClickHouse 使用一种类似于标准 SQL 的查询语言,降低了学习成本。它提供了大量强大的分析函数和聚合函数,非常适合数据分析师使用。

三、与 MongoDB 的对比

这是一个非常常见的对比,因为它们定位完全不同:

特性 ClickHouse MongoDB
类型 列式存储,OLAP 文档型,OLTP(也可用于分析,但非专长)
设计目标 分析查询速度极快 灵活的文档模型,开发速度快
数据模型 严格的表结构(Schema-on-Write) 灵活的文档结构(Schema-on-Read)
主要操作 大范围聚合查询(SELECT SUM(...) GROUP BY ... 点查询、插入、更新、删除(CRUD)
压缩率 极高(10x+) 较低
事务支持 不适用(分析场景不需要) 支持(多文档事务)
典型用例 分析报表、用户行为分析、实时数仓、APM 内容管理、用户配置、产品目录、事务性应用

简单来说:MongoDB 是为“写”和“灵活读”而优化的,ClickHouse 是为“疯狂地读和大规模聚合”而优化的。

四、适用场景

ClickHouse 非常适合以下场景:

  1. 网络和移动应用分析: 分析数十亿的页面浏览、点击事件。
  2. 广告网络和程序化交易: 实时分析广告投放效果。
  3. 电信数据分析: 分析通话记录和网络日志。
  4. 商业智能(BI)和报表系统: 为后台提供快速、复杂的报表查询。
  5. 时序数据: 监控指标(如 Prometheus 数据的长期存储)、物联网传感器数据(但有更专业的时序数据库如 InfluxDB)。
  6. 在线游戏: 分析玩家行为。

五、不适用场景

  1. 高并发点查询: 不适合根据主键频繁查询单条记录(例如:SELECT * FROM users WHERE id = 123),这不是它的设计目标,它的强项是扫描大量数据。
  2. 事务性操作(OLTP): 不支持事务(ACID),不应将其用作业务系统的核心数据库(如银行交易、订单管理)。
  3. 频繁更新和删除UPDATEDELETE 操作是异步和后台进行的(Mutation),性能开销大,不适合高频更新场景。它更适合批量追加写入

六、总结

ClickHouse 是分析领域(OLAP)的性能怪兽。如果你面临的挑战是:数据量巨大(TB/PB 级),并且需要对这些数据进行极其快速的分析和聚合查询,那么 ClickHouse 几乎是你的不二之选。

它的优势在于其极致的性能,而代价是牺牲了事务和高并发点查询的能力。在选择技术时,务必明确你的业务场景是 OLTP 还是 OLAP,这将直接决定你应该选择 MongoDB 还是 ClickHouse。在许多现代架构中,它们常常是共存的:用 MongoDB 处理在线事务,同时将数据同步到 ClickHouse 中进行分析。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐