当前位置: 首页 > news >正文

使用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除了历史数据迁移问题外,几乎不需要犹豫

http://www.dtcms.com/a/278026.html

相关文章:

  • C++封装、多态、继承
  • 在 Ubuntu 下安装 MySQL 数据库
  • 从文本中 “提取” 商业洞察“DatawhaleAI夏令营”
  • 电路分析基础(02)-电阻电路的等效变换
  • Matlab批量转换1km降水数据为tiff格式
  • 【LeetCode100】--- 5.盛水最多的容器【复习回顾】
  • ssm学习笔记day05
  • QT 多线程 管理串口
  • 《[系统底层攻坚] 张冬〈大话存储终极版〉精读计划启动——存储架构原理深度拆解之旅》-系统性学习笔记(适合小白与IT工作人员)
  • springboot高校竞赛赛事管理系统 计算机毕业设计源码23756
  • Java行为型模式---策略模式
  • 第1章 概 述
  • dll文件缺失解决方法
  • C++——static成员
  • HiPPO: Recurrent Memory with Optimal Polynomial Projections论文精读(逐段解析)
  • QT控件命名简写
  • Linux内核高效之道:Slab分配器与task_struct缓存管理
  • 编译器优化——LLVM IR,零基础入门
  • 学习C++、QT---23(QT中QFileDialog库实现文件选择框打开、保存讲解)
  • 7月13日日记
  • 时间管理四象限理论
  • 小白学Python,操作文件和文件夹
  • 阶段性渗透总结
  • 第五章 Python手写数字识别【CNN卷积神经网络实现】
  • Windows怎样同步时间服务器?
  • 最简约的Windows多标签页文件管理器推荐 - 360文件夹 - 免费开源绿色软件推荐
  • Lucene原理
  • Android自定义View的事件分发流程
  • (33)记录描述窗体组件属性的枚举量 enum Qt :: WidgetAttribute, 简记为 WA_
  • Java结构型模式---外观模式