Doris vs ClickHouse 企业级实时分析引擎怎么选?

在这里插入图片描述

Apache Doris 与 ClickHouse 同作为OLAP领域的佼佼者,在企业级实时分析引擎该如何选择呢。本文将详细介绍 Doris 的优势,并通过直观对比展示两者的关键差异,同时分享一个企业成功用 Doris 替换 ClickHouse 的实践案例,帮助您做出明智的技术决策。

一、为何选择 Doris?

1.1 架构设计

Doris 优势

FE/BE 分离架构:Doris 采用前端(FE)与后端(BE)分离的架构模式。FE 承担 SQL 解析、查询计划生成以及元数据管理的重任。其设计使得 SQL 语句能高效地被解析为可执行的查询计划,并且元数据管理模块保障了数据定义、权限等信息的有序存储与快速检索。

分布式存储与计算:在分布式存储方面,Doris 支持多副本机制,确保数据的高可用性。当某个 BE 节点出现故障时,其他副本节点能立即顶上,保证数据不丢失且查询不受影响。在计算层面,BE 节点间能够协同工作,并行处理查询任务。

弹性伸缩:具备出色的弹性伸缩能力,可通过简单的 SQL 命令轻松实现节点的动态增加或减少。(现在直接可以用Manager集群管理工具,更加方便快捷)

ClickHouse 特点

ClickHouse 架构:LSMTree聚合模型+两层汇聚查询引擎+列式存储,只有一个组件,每个组件都可以进行查询分发和执行
分布式采用Multi-Master多主架构,天然避免单点故障问题

依赖 ZooKeeper:ClickHouse 依赖 ZooKeeper 进行分布式协调。ZooKeeper 负责管理 ClickHouse 集群中各节点的状态信息、数据分片信息以及协调分布式事务等。虽然 ZooKeeper 是成熟的分布式协调工具,但这增加了架构的复杂性。

1.2 查询性能

Doris 优势

查询优化器:拥有强大的查询优化器,采用基于成本的优化(CBO)和基于规则的优化(RBO)相结合的方式。CBO 能根据数据的统计信息,如数据量、数据分布等,估算不同查询执行计划的成本,从而选择最优方案。

向量化执行:支持向量化执行引擎,能充分利用现代 CPU 的 SIMD(单指令多数据)指令集。传统数据库按行处理数据,而向量化执行以列向量为单位处理数据,减少了函数调用开销和数据缓存命中率低的问题。

实时查询:对实时查询的支持十分出色,能在秒级甚至亚秒级响应查询请求。这得益于其高效的存储结构和查询执行机制。

ClickHouse 特点

单表查询优势:在单表查询场景下,尤其是针对大表的聚合查询,ClickHouse 表现出卓越的性能。它通过高效的列存储结构和数据压缩算法,减少了数据读取量。

复杂查询挑战:但在处理复杂的多表关联查询时,ClickHouse 面临一定挑战。由于其查询优化器在多表连接场景下的局限性,往往需要对 SQL 进行复杂的改写才能获得较好的性能。

1.3 存储管理

Doris 优势

列存储格式:采用先进的列存储格式,将同一列的数据连续存储,这种存储方式在查询时能显著减少 I/O 开销。当执行一个仅涉及某几列的查询时,Doris 只需读取相关列的数据,而无需像行存储那样读取整行数据。而且针对点查场景 IOPS ,Doris还支持了行列混存,适用性更加强了。

数据压缩:支持多种高效的数据压缩算法,如 Snappy、LZ4 等。这些压缩算法能在不影响查询性能的前提下,大幅减少数据存储所需的空间。

存储分层:具备存储分层功能,可根据数据的访问频率和重要性,将数据存储在不同类型的存储介质上。例如,将近期频繁访问的热数据存储在高速 SSD 上,而将历史冷数据存储在成本较低的机械硬盘上。

ClickHouse 特点

独特的存储结构:ClickHouse 有其独特的存储结构,如 MergeTree 系列引擎。这种结构针对列式存储进行了优化,在数据写入时,会将数据按一定规则合并成数据块存储。例如,在写入大量用户注册数据时,ClickHouse 会将新数据与已有数据块进行合并操作,以提高数据存储的紧凑性和查询性能。但这种合并操作在高并发写入场景下可能会带来一定的性能影响。

压缩与编码:同样采用数据压缩和编码技术,如 Delta 编码、Run-Length 编码等。这些技术在减少数据存储量方面效果显著,但在某些复杂数据类型和查询场景下,编码和解码过程可能会增加查询处理时间。实际场景中Clickhouse数据压缩比通常可以达到10:1

1.4 使用方式

Doris 优势

SQL 兼容性:高度兼容 MySQL 协议,这使得熟悉 MySQL 的开发人员和数据库管理员能够快速上手 Doris。在使用过程中,可以直接使用 MySQL 客户端工具连接 Doris 集群,执行 SQL 语句。

丰富的数据模型:支持多种数据模型,包括 Unique Key、Duplicate Key 和 Aggregate Key 模型。Unique Key 模型适用于需要保证数据唯一性的场景,如用户表中的用户 ID 字段;Duplicate Key 模型适合日志类数据存储,允许数据重复;Aggregate Key 模型则在聚合查询场景下表现出色,能快速对数据进行预聚合处理。

并发上线无瓶颈:支持高并发,无并发瓶颈限制,100台集群可达10w QPS。

ClickHouse 特点

SQL 语法差异:SQL 语法与传统关系型数据库有一定差异,虽然基本的查询、插入等操作类似,但在一些高级特性和函数使用上有所不同。

数据模型相对单一:主要以 MergeTree 系列引擎为核心,数据模型相对单一。虽然 MergeTree 引擎在许多场景下表现良好,但在处理一些特殊业务需求时,灵活性不如 Doris。

不支持高并发:单条查询语句默认使用机器核数一半的CPU,因此不支持高并发的应用场景,官方建议QPS100。单条过大的查询或者过高的并发都会导致集群资源使用率过高,影响集群稳定性。

1.5 运维难度

Doris 优势

极简化运维:Doris只有FE和BE两种进程,架构简单,带来最大的好处就是运维也会很简单,这两种进程又都能通过一致性协议来保证服务的高可用和数据的高可靠。Doris 单节点故障时候,Doris副本均衡和副本补齐能够自动完成,无需人工操作;

监控与告警:提供全面的监控与告警功能,可实时监测集群的各项性能指标,如 CPU 使用率、内存占用、磁盘 I/O、查询响应时间等。通过配置告警规则,当指标超出正常范围时,系统能及时通过邮件、短信等方式通知运维人员。(Manager更加方便)

版本升级平滑:版本升级过程相对平滑,支持在线滚动升级。在升级过程中,Doris 会逐步将各节点切换到新版本,确保业务不受影响。(使用Manager升级更加方便顺滑)

ClickHouse 特点

手动运维操作多:运维过程中需要较多的手动操作。Clickhouse需要人工维护元数据,好处是数据分布可控。Clickhouse不支持数据的自动均衡,需要用户增加分片或重新建表,大幅增加业务在水平伸缩时的运维压力;重新建表在集群中进行全量数据打散,操作开销过大;

配置参数复杂:拥有大量的配置参数,这些参数相互关联且对集群性能影响较大。例如,在调整 ClickHouse Server 的内存分配参数时,需要同时考虑查询性能、数据写入性能以及操作系统的内存管理等多方面因素,稍有不慎就可能导致集群性能下降甚至出现故障。这要求运维人员对 ClickHouse 的内部机制有深入了解,增加了运维难度。

版本升级风险:版本升级可能存在一定风险,尤其是跨大版本升级时。不同版本之间可能存在兼容性问题,如数据存储格式变化、查询语法变更等,需要在升级前进行充分的测试和数据迁移准备。

1.6 社区活跃度

Doris

活跃的开源社区:Doris 拥有一个活跃的开源社区(尤其是对国内用户来说),众多开发者积极参与其中。社区提供了丰富的文档资源,包括详细的安装指南、使用教程、最佳实践案例以及 API 参考文档等,方便用户快速学习和使用。同时,社区论坛和交流群氛围活跃,用户在使用过程中遇到问题时,能及时得到其他开发者和社区成员的帮助。另外还有专门的社区论坛

ClickHouse

国内社区规模:虽然 ClickHouse 在全球用户量极大,但相较于 Doris,其国内的社区活跃度稍显不足。问题反馈以及解决的及时性并没有Doris有优势。

三、成功案例:有赞从 ClickHouse 迁移至 Doris

以有赞为例,这家领先的电商 SaaS 服务商曾面临以下挑战:

  • 高并发查询瓶颈:在业务高峰期,ClickHouse 在多表关联查询和复杂 Join 场景下响应缓慢,严重影响用户体验。
  • 扩容运维复杂:依赖 ZooKeeper 实现分布式协调,扩容操作繁琐,运维成本居高不下。
  • 数据更新不灵活:缺乏事务性导入支持,部分业务数据更新存在重复或丢失风险。

3.1 迁移动因与方案制定

经过深入调研,有赞决定引入 Apache Doris 统一 OLAP 技术栈,主要目标包括:

  • 提升大表 Join 查询性能:确保在数百亿数据量下依然能保持秒级响应。
  • 降低运维复杂度:实现在线扩缩容和自动故障恢复,简化集群管理。
  • 保障数据一致性:利用 Doris 内置的事务型导入及去重机制,确保数据写入精准无误。

为此,有赞开发了自动化 SQL 建表和查询语句转换工具,将原先的 ClickHouse 语法转换为 Doris 兼容语法,并调整数据导入策略,充分利用 Doris 的 Stream Load 技术。

3.2 迁移效果与收益

  • 查询性能提升:在多表 Join 查询场景中,Doris 平均查询速度提升达 200%,实现秒级响应。
  • 运维效率大幅改善:内置在线扩缩容与自动故障恢复功能,大大降低了运维和开发成本。
  • 数据一致性保障:事务型导入及精准去重机制确保数据准确,避免重复或丢失风险。

有赞的实践充分证明,利用 Doris 替换 ClickHouse 后,不仅查询性能大幅提升,而且在运维和数据更新方面也实现了质的飞跃,为企业带来了显著的业务价值。

四、总结

通过对 Doris 与 ClickHouse 在架构设计、数据导入、复杂查询优化和运维成本等多个维度的对比,我们可以看出:

  • Doris 在易用性、扩展性和数据一致性保障方面具有明显优势。
  • 对于需要实时数据更新和多表关联查询的企业,Doris 无疑是更理想的选择。

有赞的成功案例证明,利用 Doris 替换 ClickHouse 后,企业不仅实现了查询性能的显著提升,还大幅降低了运维成本和数据更新风险。企业在选型时应充分结合自身业务需求和技术团队能力,借助 Doris 的优势打造统一实时数仓,实现数据驱动的商业价值最大化。

欢迎大家在评论区交流更多实践经验,共同探讨实时数据分析的未来趋势!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29822.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ThreeJS Basics 09】Debug

文章目录 简介从 dat.GUI 到 lil-gui例子安装 lil-gui 并实例化不同类型的调整改变位置针对非属性的调整复选框颜色 功能/按钮调整几何形状文件夹调整 GUI宽度标题关闭文件夹隐藏按键切换 结论 简介 每一个创意项目的一个基本方面是能够轻松调整。开发人员和参与项目的其他参与…

Android Native 之 文件系统挂载

一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的&#xff…

Chain of Draft: 借鉴人类草稿思维让大型语言模型更快地思考

这个研究探讨了大型语言模型(LLMs)在执行复杂推理任务时面临的计算资源消耗与响应延迟问题。研究特别聚焦于思维链(Chain-of-Thought, CoT)提示范式的效率局限性。CoT虽然有效,但在推理过程中需要生成冗长、详尽的逐步…

《A++ 敏捷开发》- 18 软件需求

需求并不是关于需求 (Requirements are not really about requirements) 大家去公共图书馆寄存物品,以前都是扫二维码开箱,有些图书馆升级了使用指纹识别。 “是否新方法比以前好?”我问年轻的开发人员。 “当然用指纹识别好。新技术&#x…

【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别

1. 什么是智能体 将大语言模型作为一个推理引擎。给定一个任务, 智能体自动生成完成任务所需步骤, 执行相应动作(例如选择并调用工具), 直到任务完成。 2. 先定义工具:Tools 可以是一个函数或三方 API也…

Vue进阶之Vue3源码解析(一)

Vue3源码解析 目录结构编译compiler-corepackage.jsonsrc/index.ts 入口文件src/compile.ts生成ASTsrc/parse.ts 代码转换src/transform.ts几种策略模式src/transforms/transformElement.tssrc/transforms/transformText.tssrc/transforms/transformExpression.ts 代码生成src/…

servlet tomcat

在spring-mvc demo程序运行到DispatcherServlet的mvc处理 一文中,我们实践了浏览器输入一个请求,然后到SpringMvc的DispatcherServlet处理的整个流程. 设计上这些都是tomcat servlet的处理 那么究竟这是怎么到DispatcherServlet处理的,本文将…

【我的待办(MyTodolists)-免费无内购的 IOS 应用】

我的待办(MyTodolists) 我的待办:智能任务管理助手应用说明主要功能为什么选择"我的待办"?隐私保障使用截图 我的待办:智能任务管理助手 应用说明 "我的待办"是一款智能化的任务管理应用&#x…

GCC RISCV 后端 -- C语言语法分析过程

在 GCC 编译一个 C 源代码时,先会通过宏处理,形成 一个叫转译单元(translation_unit),接着进行语法分析,C 的语法分析入口是 static void c_parser_translation_unit(c_parser *parser); 接着就通过类似递…

Vim复制内容到系统剪切板

参考链接 【Vim】Vim 中将文件内容复制到系统剪切板的方法_vi 复制到系统剪贴板-CSDN博客 [转]vim如何复制到系统剪贴板 - biiigwang - 博客园 1. 确定Vim是否支持复制到系统剪切板 输入命令 vim --version | grep clipboard 如果是开头,说明支持系统剪切板&…

测试用大模型组词

已经把hanzi-writer的js的调用、hanzi-writer调用的数千个汉字的json文件,全都放在本地了。虽然用的办法还是比较笨的。我注意到 大模型也可以部署本地,虽然使用频率低的情况下不划算。 尝试直接通过html的javascript通过api key调用大语言模型&#x…

华为eNSP:配置单区域OSPF

一、什么是OSPF? OSPF(Open Shortest Path First,开放最短路径优先)是一种链路状态路由协议,属于内部网关协议(IGP),主要用于在单一自治系统(AS)内部动态发现…

P62 线程

这篇文章我们来讲一下线程。截止到目前,我们的代码都是在单线程上运行的,现在看起来没有什么问题,但是目前所有的计算机几乎都不只有一个逻辑线程,所以如果我们一直使用单线程运行,这样的话效率会很低。尤其是如果我们…

Android AudioFlinger(五)—— 揭开AudioMixer面纱

前言: 在 Android 音频系统中,AudioMixer 是音频框架中一个关键的组件,用于处理多路音频流的混音操作。它主要存在于音频回放路径中,是 AudioFlinger 服务的一部分。 上一节我们讲threadloop的时候,提到了一个函数pr…

im即时聊天客服系统SaaS还是私有化部署:成本、安全与定制化的权衡策略

随着即时通讯技术的不断发展,IM即时聊天客服系统已经成为企业与客户沟通、解决问题、提升用户体验的重要工具。在选择IM即时聊天客服系统时,企业面临一个重要决策:选择SaaS(软件即服务)解决方案,还是进行私…

DeepSeek系列模型技术报告的阅读笔记

DeepSeek系列模型技术报告的阅读笔记 之前仔细阅读了DeepSeek系列模型的主要技术方面内容与发展脉络,以下是DeepSeek系列模型技术报告的笔记,有错误的地方欢迎指正! 文章目录 DeepSeek系列模型技术报告的阅读笔记GQADeepseek MoEAbstractIn…

【VUE】第二期——生命周期及工程化

目录 1 生命周期 1.1 介绍 1.2 钩子 2 可视化图表库 3 脚手架Vue CLI 3.1 使用步骤 3.2 项目目录介绍 3.3 main.js入口文件代码介绍 4 组件化开发 4.1 组件 4.2 普通组件注册 4.2.1 局部注册 4.2.2 全局注册 1 生命周期 1.1 介绍 Vue生命周期:就是…

Spring-framework源码编译

版本统一(搭配其他版本会遇到不可知错误): 1)spring 5.2.X(5.5.26) 2)JDK8 3)Gradle:5.6.4 可以在gradle-wrapper.properties中修改 https\://services.gradle.org/distribution…

使用 Deepseek + kimi 快速生成PPT

前言 最近看到好多文章和视频都在说,使用 Deepseek 和 kimi 能快速生成精美的 ppt,毕竟那都是别人说的,只有自己尝试一次才知道结果。 具体操作 第一步:访问 deepseek 我们访问 deepseek ,把我们想要输入的内容告诉…

火绒终端安全管理系统V2.0--纵深防御体系(分层防御)之规则拦截层

火绒终端安全管理系统V2.0--多层次主动防御系统。 率先将单步防御和多步恶意监控相结合,监控百个防御点(包含防火墙),有效阻止各种恶意程序对系统的攻击和篡改,保护终端脆弱点。 ✅ 内容拦截层(Content-B…