交互式分析领域,为何 ClickHouse 能够杀出重围?( 四 )

  • Colocated Join:数据打散规则一致的多表进行 Join 时 , 支持本地化的 Colocated Join , 提升查询性能 。 ……
  • 四、ClickHouse 的不足
    前面介绍了大量 ClickHouse 的核心特性 , 方便读者了解 ClickHouse 高性能、快速发展的背后原因 。 当然 , ClickHouse 作为后起之秀 , 远没有达到尽善尽美 , 还有不少需要待完善的方面 , 典型代表如下:
    1. 分布式管控分布式系统通常包含 3 个重要组成部分:存储引擎、计算引擎、分布式管控层 。 ClickHouse 有一个非常突出的高性能存储引擎 , 但在分布式管控层显得较为薄弱 , 使得运营、使用成本偏高 。 主要体现在:
    (1)分布式表
    ClickHouse 对分布式表的抽象并不完整 , 在多数分布式系统中 , 用户仅感知集群和表 , 对分片和副本的管理透明 , 而在 ClickHouse 中 , 用户需要自己去管理分片、副本 , 例如前面介绍的建表过程:用户需要先创建本地表(分片的副本) , 然后再创建分布式表 , 并完成分布式表到本地表的映射 。
    (2)弹性伸缩
    ClickHouse 集群自身虽然可以方便的水平增加节点 , 但并不支持自动的数据均衡 。 例如 , 当包含 6 个节点的线上生产集群因存储 或 计算压力大 , 需要进行扩容时 , 我们可以方便的扩容到 10 个节点 , 但是数据并不会自动均衡 , 需要用户给已有表增加分片 或者 重新建表 , 再把写入压力重新在整个集群内打散 , 而存储压力的均衡则依赖于历史数据过期 。 ClickHouse在弹性伸缩方面的不足 , 大幅增加了业务在进行水平伸缩时运营压力 。
    基于 ClickHouse 的当前架构 , 实现自动均衡相对复杂 , 导致相关问题的根因在于 ClickHouse 分组式的分布式架构:同一分片的主从副本绑定在一组节点上 , 更直接的说 , 分片间数据打散是按照节点进行的 , 自动均衡过程不能简单的搬迁分片到新节点 , 会导致路由信息错误 。 而创建新表并在集群中进行全量数据重新打散的方式 , 操作开销过高 。
    交互式分析领域,为何 ClickHouse 能够杀出重围?文章插图
    (3)故障恢复
    与弹性伸缩类似 , 在节点故障的情况下 , ClickHouse 并不会利用其它机器补齐缺失的副本数据 。 需要用户先补齐节点后 , 然后系统再自动在副本间进行数据同步 。
    2. 计算引擎虽然 ClickHouse 在单表性能方面表现非常出色 , 但是在复杂场景仍有不足 , 缺乏成熟的 MPP 计算引擎 和 执行优化器 , 例如:多表关联查询、复杂嵌套子查询等场景下查询性能一般 , 需要人工优化;缺乏 UDF 等能力 , 在复杂需求下扩展能力较弱等 。 这也和 OLAP 系统第三方评测 的结果相符 。 这对于性能如此出众的存储引擎来说 , 非常可惜 。
    3. 实时写入ClickHouse 采用类 LSM Tree 架构 , 并且建议用户通过批量方式进行写入 , 每个批次不少于 1000 行 或 每秒钟不超过一个批次 , 从而提高集群写入性能 , 实际测试情况下 , 32 vCPU--tt-darkmode-bgcolor: #131313;">但 ClickHouse 并不适合实时写入 , 原因在于 ClickHouse 并非典型的 LSM Tree 架构 , 它没有实现 Memory Table 结构 , 每批次写入直接落盘作为一棵 Tree(如果单批次过大 , 会拆分为多棵 Tree) , 每条记录实时写入会导致底层大量的小文件 , 影响查询性能 。
    这使得 ClickHouse 不适合有实时写入需求的业务 , 通常需要在业务和 ClickHouse 之间引入一层数据缓存层 , 实现批量写入 。
    五、结语
    本文重点分享了 ClickHouse 的整体架构及众多核心特性 , 分析了 ClickHouse 如何实现极致性能的存储引擎 , 从而成为 OLAP 领域的后起之秀 。
    ClickHouse 仍然年轻 , 虽然在某些方面存在不足 , 但极致性能的存储引擎 , 使得 ClickHouse 成为一个非常优秀的存储底座 。
    后续我们会在不断拓展业务的同时 , 优先从分布式管控层和计算引擎层着手 , 持续优化 ClickHouse 的易用性、性能 , 打造业界领先的 OLAP 分析数据库 。 同时 , 我们会持续输出内核优化、最佳实践等经验 , 欢迎更多技术爱好者们一起探索、交流 。
    参考资料:
    [1] 采用文档:
    [2] ClickHouse 官方测试结果 :
    [3] OLAP 系统第三方评测 :
    [4] 专用编码算法支持:
    #codecs
    [5] Gorilla 论文 :
    [6] 索引支持:
    #table_engine-mergetree-data_skipping-indexes
    [7] MergeTree系列表引擎 :
    [8] MATERIALIZED VIEW :
    #materialized
    [9] ClickHouse的发展历史 :
    [10] ClickHouse官方文档 :
    来源:微信公众号:云加社区,作者:姜国强