查看原文
其他

Doris凭什么这么强?

涤生-阳哥 涤生大数据
2024-12-05

要说在OLAP领域的数据库,就不得不提起源于百度palo的Apache 顶流项目Doris。但是按照一贯的思维,各种强势的大数据时代的OLAP产品,比如Kylin、ClickHouse、Elasticsearch、Snowflake、BigQuery、Greenplum、Impala等等,都不是由国内人员主导或者主要参与贡献的,所以Doris在这一方面可谓是独树一帜,但他同作为大数据时代浪潮下的OLAP数据库,它凭什么能够在强者如云的数据库领域,争得一席之地并成为了Apache的顶流项目?

1.强大的处理引擎

 先看性能测试结果,Doris 在 ClickHouse的测试榜单上可谓是争尽风头。

那么问题来了,Doris凭什么这么强?

存储方面:

  • Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时这种设计使得Doris在处理分析查询时能够更快地定位到需要的数据列,减少了不必要的数据读取和计算,从而更加有效利用 IO 和 CPU 资源,极大的提升查询效率。

  • 丰富的索引结构,索引是提升查询性能的一大利器,索引技术可以通过减少不必要的扫描和计算来帮助快速定位到数据,丰富的索引结构使得Doris能够应对更多的查询场景,更好的提升Doris的查询性能。

  • 多样的存储模型,这块在Doris里面是非常重要的点,这是因为不同的查询场景对应的存储模型是完全不一致,而Doris本身也对这些模型进行了针对性的优化,从而大幅提升正确模型下的查询性能。

查询方面:

  • Doris 采用MPP 模型,节点间和节点内都并行执行,也支持多个大表的分布式 Shuffle Join,从而能够更好应对复杂查询。

  • 向量化查询引擎,这使得所有的内存结构能够按照列式布局,能够达到大幅减少虚函数调用、提升 Cache 命中率,高效利用 SIMD 指令的效果。在宽表聚合场景下性能是非向量化引擎的 5-10 倍。

  • 自适应查询执行(Adaptive Query Execution)技术,可以根据 Runtime Statistics 来动态调整执行计划,比如通过 Runtime Filter 技术能够在运行时生成 Filter 推到 Probe 侧,并且能够将 Filter 自动穿透到 Probe 侧最底层的 Scan 节点,从而大幅减少 Probe 的数据量,加速 Join 性能。

  • Doris的优化器是采用 CBO 和 RBO 结合的优化策略,RBO 支持常量折叠、子查询改写、谓词下推等,CBO 支持 Join Reorder。(强烈推荐2.1的新优化器,嘎嘎猛)。 

    2.极低的运维成本

    运维是所有大数据领域里面最逃不掉的东西,尤其是对于使用开源的产品的小伙伴来说,更是不可回避的问题(有钱买商业化服务的另说)。

    相对比很多OLAP各种各样的组件的组合,Doris倒是显得很独树一帜!他只有Frontend(FE)和Backend(BE)两类进程,架构极其简单!(存算分离架构多了一个Meta Service,但相对来说也是很简单的)。

    架构简单,带来最大的好处就是运维极简,因为你要处理的组件少了很多,各种组件之间的兼容性问题就是没了。你唯一需要处理的就是FE和BE这两类进程了,而这两类进程又能通过一致性协议来保证服务的高可用和数据的高可靠,这样来看这个方面,又少了不少烦恼。

    在扩缩容方面来说,Doris只需要简单的命令即可实现,无需人工干预,FE能够实现快速上下线,而BE也能够实现数据的自动reblance。

    而对于BE来说,Doris能够自动管理数据副本的分布、修复(定期自动进行 bad tablet 的修复)和均衡(新增/下线磁盘、节点都可以自动均衡),用户无需过多关心(唯一需要担心的就是一定要保证3副本,这是高可用的前提)。

    3.强大的适配能力

    单纯看数据库的能力是没有任何意义的,尤其是在OLAP领域,上下游的适配能力是能够极大的影响数据库的发展的。而Doris的快速发展,正是得益于它对于MySql的高度兼容性。

    Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,这就使得 所有支持 MySQL 协议的上下游工具,都能极大的兼容性支持Doris。一方面对于Doris社区的发展来说,这就很大程度上减少了Doris与上下游各种工具的适配开发工作,另一方面,对于社区用户来说,学习 以及使用上基本是与MySql一致的,那就极大的降低了学习和使用成本。

    而且得益于社区的对Doris的不断完善,目前Doris对于上下游数据的流转已经变得非常方便了。

    • 支持 Flink、Kafka、Spark 等数据 ETL 引擎或者消息中间件

    • 支持 HTTP API、LocalFile、Stream 等数据格式导入

    • 支持 MySQL、Hive、ES、Oracle、ClickHouse 等常见数据库的外表挂载和导入

    • 支持 Hudi、Iceberg、Paimon、Hive 等数据湖产品的生态融合

    • 支持多种主流的 BI 产品

      4.广泛的应用场景

      Doris 最早是诞生于百度广告报表业务的 Palo 项目,但是从2018 年 7 月由百度捐赠给 Apache 基金会进行孵化之后,Doris不断发展自身能力,其应用场景也不断扩展。

      • 报表分析

        • 实时看板(Dashboards);

        • 面向企业内部分析师和管理者的报表;

        • 面向用户或者客户的高并发报表分析(Customer Facing Analytics)。

      • 即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。

      • 湖仓一体(Data Lakehouse):通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 等离线湖仓中的数据,在避免数据拷贝的前提下,查询性能大幅提升。

      • 日志检索分析:在 Apache Doris 2.0 版本中,支持了倒排索引和全文检索,能够很好的满足日志检索分析的场景,并且依赖其高效的查询引擎和存储引擎,相比传统的日志检索分析的方案可以有 10 倍性价比的优势。

      • 统一数仓构建:一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。基于 Apache Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。

      Doris 2.1版本是很多新特性的开始,建议使用2.1的最新稳定版本。

      5.极度活跃的社区

       

      社区的活跃性是社区发展的晴雨表,而Doris 社区背靠SelectDB公司,则是将Doris社区的活跃性推到了一个全新的高度。这主要是因为SelectDB公司即起源于Doris,又反哺于Doris。

      想必很多用过开源组件的小伙伴深有体会吧。出了问题,一般就是优先网上找资料,找不到再想办法联系社区,这主要是有些社区的问题响应和解决时延性比较高,这就使得不够活跃的社区自然得不到更多人的青睐,产品有问题是难免的,尤其是开源组件来说,而能够及时解决问题则是很多小伙伴选型的重要参考。

      相对于很多开源社区来说,Doris 社区问题的响应解决问题的及时性远是其他社区无法能比较的,这也是SelectDB 反哺于Doris的重要体现,SelectDB会有专职人员来在社区的官网群里或者是官方的ask论坛上进行问题的处理和跟进。

      涤生大数据往期精彩推荐

      1.企业数仓DQC数据质量管理实践篇

      2.企业数据治理实战总结--数仓面试必备

      3.OneData理论案例实战—企业级数仓业务过程

      4.中大厂数仓模型规范与度量指标有哪些?

      5.手把手教你搭建用户画像系统(入门篇上)

      6.手把手教你搭建用户画像系统(入门篇下)

      7.SQL优化之诊断篇:快速定位生产性能问题实践

      8.SQL之优化篇:一文搞懂如何优化线上任务性能,增效降本!

      9.新能源趋势下一个简单的数仓项目,助力理解数仓模型

      10.基于FlinkSQL +Hbase在O2O场景营销域实时数仓的实践

      11.开发实战角度:distinct实现原理及具体优化总结

      12.涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(一)

      13.涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(二)

      14.5分钟了解实时车联网,车联网(IoV)OLAP 解决方案是怎样的?

      15.企业级Apache Kafka集群策略:Kakfa最佳实践总结

      16.玩转Spark小文件合并与文件读写提交机制

      17.一文详解Spark内存模型原理,面试轻松搞定

      18.大厂8年老司机漫谈数仓架构

      19.一文带你深入吃透Spark的窗口函数

      20.大数据实战:基于Flink+ODPS进行最近N天实时标签构建

      21.数仓面试高频-如何在Hive中实现拉链表

      22.数仓面试还不懂什么是基线管理?

      23.传说中的热点值打散之代码怎么写? 

      24.列转行经典实现,细谈hive中的爆炸函数

      25.玩转大厂金融风控体系建设

      26.实际开发中:如何有效运用Spark Catalyst的执行流程

      27.Doris企业架构选型总结:存算分离与一体化的对比与应用场景分析

      28.企业Apache Doris 建表最佳实践,都是干货


      继续滑动看下一个
      涤生大数据
      向上滑动看下一个

      您可能也对以下帖子感兴趣

      文章有问题?点此查看未经处理的缓存