使用Starrocks替换Clickhouse的理由

背景

Starrocks和clickhouse都是非常优秀的OLAP数据库,那么什么情况下使用clickhouse,什么场景下使用starrocks呢,本文就简单列举一下他们的优缺点

理由

首先两者都是列存储,并且都实现了列压缩,所以从存储中两者的压缩比是差不多的,所以对应的I/O消耗也是相差不大的

介绍一下Starrocks计算资源的底层实现:

  • MPP并行查询,可以充分利用多台机器的资源
  • 单机通过pineline并行执行,充分利用单机的多线程资源
  • 单核CPU利用SIMD向量化进行查询
    备注: Starrocks的MPP并行是设计之初就完善好的,他自身支持动态扩展
    对应的clickhouse计算资源的底层实现:
  • 可以通过分布式表的方式利用多台机器的资源
  • 单机利用多核的实现利用的不够充分
  • 单核CPU利用SIMD向量化进行查询
    备注:clickhouse严格来说是单机数据库,他的分布式的实现都需要手动完成
    OK,回到最初的问题,对于Starrocks来说,分布式的实现从设计之初就已经完成,而clickhouse分布式完全是通过手动的方式应用方组装起来的,使用起来非常不方便,我们列举下使用Starrocks替换Clickhouse的几个理由
    1.如果我们的表可以做成中等大小的宽表的,那么使用Starrocks和Clickhouse的实现都无所谓,两者的性能都很出色
    2.starrocks具有主键表,这个是真正拥有去重能力的表,同一个主键的数据合并虽然也是延迟进行(磁盘还是占用),但是查询的时候也会进行过滤获取最新版本的主键记录,所以这是一个真正意义的主键表,而clickhouse没有严格意义的主键表,最接近主键的实现是ReplacingMergeTree,但是他的主键数据合并是延迟进行的,而且在这期间,查询时会有返回新旧的主键记录,需要应用自身进行处理,非常麻烦
    3.Starrocks对于多表join的支持非常完善,starrocks从设计之初就考虑到了多表join的分布式实现的问题,多表join时依然可以充分利用多机/多核/SIMD的并行化能力,所以几乎可以理解成使用starrocks的join和Mysql的join的性能相差不大,而Clickhouse对于join的实现可以用灾难来形容,特别是在分布式表的join的时候,容易出错并且性能大打折扣,当然这里并不是说starrocks的join性能有多好,只是说他可以非常好的支持join的实现
    4.Starrocks的qps请求可以比clickhouse要高很多,原因在于它的FE可以扩展支持更多的QPS,但是底层的BE的瓶颈还是有限的,毕竟BE要进行数据IO和计算,此外,网络资源也是有限的,毕竟join等操作需要进行数据的移动,所以Starrocks可以支持比较高的qps,但是由于他们都是OLAP引擎,不可能支持类似OLTP数据库那样的QPS,充其量也就是使用了类似后台,定时任务等几百到几千左右的qps,不可能用于C端的应用
    5.Starrocks的部分列更新功能,Starrocks可以更新部分列,这对于当一个表的数据是来源于多个业务方,每个业务方只更新自己对应的列的宽表来说非常有用,clickhouse是不支持部分列更新的功能的,这个功能真的很有用
    6.Starrocks的物化视图在查询时是会进行自动改写的,也就是不需要类似clickhouse一样需要应用方根据不同的应用场景选择对应的物化视图

结论

Starrocks替换clickhouse的优点是很多的,几乎每个功能Starrocks都可以几乎无损的替换掉clickhouse,再加上Starrocks拥有clickhouse没有的一些功能,所以使用Starrocks替换clickhouse除了历史数据迁移问题外,几乎不需要犹豫

相关推荐
北漂燕郊杨哥14 分钟前
Win11 环境下 phpStudy 安装 Redis 最新版,并为 PHP 8.5.9(NTS)配置 redis 扩展
数据库·redis·php
2603_965148119 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
ltl9 小时前
RocksDB 经典故障排查:L0、compaction 与 write stall
数据库
xfhuangfu10 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT10 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData11 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean11 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean11 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
浪子明X12 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.12 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库