书库技术与未来MySQL DBA解锁数据分析的新姿势-ClickHouse-新浪-高鹏-2017年12月08日-PDF.key
书籍封面

MySQL DBA解锁数据分析的新姿势-ClickHouse-新浪-高鹏-2017年12月08日-PDF.key

作者 高鹏
15.0 分钟

摘要

ClickHouse 深度解析:高性能 OLAP 数据库

  • ClickHouse 是俄罗斯 Yandex 开源的列式存储 OLAP 数据库,以其超高性能、丰富的驱动和线性扩展能力著称,适用于 PB 级别的数据分析。
  • 你能获得:深入了解 ClickHouse 的架构、核心特性、使用技巧和最佳实践,掌握构建高性能数据分析平台的关键技术。

核心内容:

1. ClickHouse 的特点和优势:

  • 列式存储:减少 I/O,提高查询效率。
    • 列式存储只读取查询需要的列,减少了磁盘 I/O 和内存消耗,尤其适合于聚合查询。
  • 集群:支持线性扩展,处理 PB 级别数据。
    • 通过增加节点,可以线性扩展 ClickHouse 的存储和计算能力,轻松应对海量数据。
  • 超高性能:向量化执行和代码生成优化。
    • ClickHouse 采用向量化执行和代码生成技术,充分利用 CPU 的 SIMD 指令,实现极致的查询性能。
  • 丰富驱动:支持多种编程语言和 SQL。
    • ClickHouse 提供了多种编程语言的驱动,并支持标准的 SQL 查询,方便用户集成和使用。
  • 压缩:高效的数据压缩算法。
    • ClickHouse 采用高效的数据压缩算法,可以显著减少存储空间和 I/O 压力。
  • 统计函数:内置丰富的统计分析函数。
    • ClickHouse 内置了大量的统计分析函数,方便用户进行各种数据分析和挖掘。

2. ClickHouse 的部署和使用:

  • 单机部署:简单快捷,适合测试和学习。
    • 可以通过官方提供的 Ubuntu 包、第三方 rpm 包或 Docker 镜像进行单机部署。
    • 注意修改网络配置、数据目录和时区设置。
  • 分布式部署:水平扩展,应对大规模数据。
    • 通过 Distributed 引擎实现分布式部署,将数据分散存储在多个节点上。
    • 需配置集群信息,并确保节点间网络互通。
  • MergeTree 引擎:ClickHouse 的核心存储引擎。
    • 类似 LSM Tree,但没有内存表和 WAL,直接将数据排序后分块写入磁盘。
    • 支持异步 Merge,最大可合并到月级别。
    • 不支持删除和修改操作。
  • 分区和索引:加速查询的关键。
    • 通过合理的分区和索引设计,可以大幅提高查询效率。
    • 实际使用中,务必增加 date=xxx 字段,通过分区过滤数据。

3. ClickHouse 的分布式表:

  • Distributed 引擎:本身不存储数据,负责转发查询和写入请求。
  • 写操作:通过域名写入本地表。
    • 总 QPS 等于所有单机 QPS 之和。
  • 读操作:通过域名读取分布式表。
    • 接收请求的节点会从所有节点拉取数据,本地汇总后返回给客户端。
  • 注意事项:
    • 不要直接写分布式表,会导致数据不均匀。
    • 域名映射的 IP 只有在初始解析时有效。
    • 新增节点后,历史数据不会自动迁移,导致数据不均衡。
    • 过度的 group by 会导致大量数据交换。

4. ClickHouse 的复制和高可用:

  • 基于 ZooKeeper (ZK) 的多源、多主、多向复制。
  • 数据 "互通有无",自带检测和同步机制。
  • ReplicatedMergeTree 引擎:
    • ReplicatedMergeTree('zk 路径', '副本名称', 日期列, (其他列, 日期列), 索引粒度)
  • 最佳架构:
    • 多个 IDC 之间使用复制机制做互备。
    • 每个 IDC 部署多个节点,组成分布式表,分担查询压力。

5. ClickHouse 的高级特性和最佳实践:

  • 高级函数:quantile, quantiles, median, varSamp, stddevSamp, cutQueryString, domain 等。
  • 监控:使用 Prometheus + ClickHouse exporter + Grafana 进行监控。
  • 运维建议:
    • CPU:多核优于主频 (SSE 4.2 instruction set need),开启超线程和性能模式。
    • 磁盘:小磁盘多机器优于大磁盘少机器,Raid-10 is better。
    • 内存:越大越好,禁用 swap/透明大页/NUMA。
    • 使用域名写本地表,读分布式表。
    • 如果是 Docker,注意修改时区。
    • 拒绝 select *。
    • 无 Decimal,乘以倍率,用 Uint64 存储。

问答

Q: ClickHouse 适合哪些场景?

A: ClickHouse 适合对事务无要求、无 update 操作、对响应时间有要求的场景,例如:日志数据、广告曝光、IoT 数据、监控数据等。它特别擅长处理体量大、结构化的数据。

Q: ClickHouse 与 MySQL、ES 等数据库有什么区别?

A: ClickHouse 主要用于 OLAP 场景,而 MySQL 主要用于 OLTP 场景。ClickHouse 在大数据量下的查询性能远优于 MySQL。与 ES 相比,ClickHouse 支持复杂的 SQL 查询和高级函数,但在数据接入方面不如 ES 灵活。

Q: 如何优化 ClickHouse 的查询性能?

A: 可以通过以下方式优化 ClickHouse 的查询性能:合理设计分区和索引、避免 select *、使用合适的数据类型、开启向量化执行和代码生成、避免过度使用 group by 等。

思维导图

目标读者

本书适合以下读者:

  1. 数据库管理员(DBA):希望了解和掌握ClickHouse,用于解决海量数据存储和分析问题。
  2. 数据分析师:需要使用ClickHouse进行数据分析和挖掘,提升工作效率。
  3. 后端工程师:负责构建和维护数据平台,需要了解ClickHouse的架构和使用。
  4. 对大数据技术感兴趣的读者:希望了解ClickHouse的特性和应用场景。
  5. 架构师:负责设计数据平台的整体架构,需要评估ClickHouse的适用性。

本书内容由浅入深,既适合初学者入门,也适合有一定经验的读者深入学习。

作者背景

高鹏是新浪的工程师,专注于ClickHouse在实际应用中的性能优化和问题解决。他分享了新浪在ClickHouse上的实践经验,包括架构设计、数据同步、性能调优和监控等方面。

历史背景

在大数据时代,传统数据库面临海量数据存储和分析的挑战。ClickHouse作为一款高性能的列式存储数据库,在新浪等互联网公司得到了广泛应用,以解决实时数据分析的需求。本书的创作背景正是ClickHouse技术在新浪落地并发挥重要作用的时期,旨在分享实践经验,帮助更多人了解和应用ClickHouse。

章节摘要

音频

Comming Soon...