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

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 的优势打造统一实时数仓,实现数据驱动的商业价值最大化。

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

相关文章:

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

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

解锁Egg.js:从Node.js小白到Web开发高手的进阶之路

一、Egg.js 是什么 在当今的 Web 开发领域,Node.js 凭借其事件驱动、非阻塞 I/O 的模型,在构建高性能、可扩展的网络应用方面展现出独特的优势 ,受到了广大开发者的青睐。它让 JavaScript 不仅局限于前端,还能在服务器端大展身手&…...

学习前端前需要了解的一些概念(详细版)

网站的定义与概述 网站(Website)是一个由网络服务器托管的、通过网络访问的、由相关网页和资源组成的集合。它为用户提供信息、服务或娱乐平台,是现代互联网的重要组成部分。网站的基本功能是展示信息和提供服务,用户可以通过浏览…...

分布式数据库中的四种透明性:逻辑透明、位置透明、分片透明和复制透明

四种透明性 1. 逻辑透明(Logical Transparency)2. 位置透明(Location Transparency)3. 分片透明(Fragmentation Transparency)4. 复制透明(Replication Transparency)注意点&#xf…...

SSM架构 +java后台 实现rtsp流转hls流,在前端html上实现视频播放

序言:书接上文,我们继续 SSM架构 NginxFFmpeg实现rtsp流转hls流,在前端html上实现视频播放 步骤一:把rtsp流转化为hls流,用Java代码进行转换 package com.tools;import java.io.BufferedReader; import java.io.IOExc…...

时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍

化工行业在数字化转型过程中面临数据接入复杂、实时性要求高、系统集成难度大等诸多挑战。福州力川数码科技有限公司科技依托深厚的行业积累,精准聚焦行业痛点,并携手 TDengine 提供高效解决方案。通过应用 TDengine,力川科技助力化工企业实现…...

信号完整性基础:高速信号的扩频时钟SSC测试

扩频时钟 SSC 是 Spread Spectrum Clock 的英文缩写,目前很多数字电路芯片都支持 SSC 功能,如:PCIE、USB3.0、SATA 等等。那么扩频时钟是用来做什么的呢? SSC背景: 扩频时钟是出于解决电磁干扰(EMI&#…...

深入理解与配置 Nginx TCP 日志输出

一、背景介绍 在现代网络架构中,Nginx 作为一款高性能的 Web 服务器和反向代理服务器,广泛应用于各种场景。除了对 HTTP/HTTPS 协议的出色支持,Nginx 从 1.9.0 版本开始引入了对 TCP 和 UDP 协议的代理功能,这使得它在处理数据库…...

Java为什么是跨平台的

一、Java虚拟机(JVM)的抽象层作用 JVAM是Java跨平台的核心技术。Java代码编译后生成字节码(.class文件),这些字节码并非直接由操作系统执行,而是由JVM解释或编译为特定平台的机器码。 屏蔽底层差异:JVM为不同操作系统提供统一的运行时环境,开…...

Sora与AGI的结合:从多模态模型到智能体推理的演进

全文目录: 开篇语前言前言:AGI的挑战与Sora的突破Sora的多模态学习架构:支撑智能体推理的基础1. **多模态学习的核心:信息融合与交叉理解**2. **智能体推理:从感知到决策** Sora如何推动AGI的发展:自主学习…...

一个针对煤炭市场的人工智能项目的开发示例

以下是一个针对煤炭市场的人工智能项目的开发示例,此项目将涵盖数据收集、数据预处理、模型构建、模型训练和预测等步骤。这里我们以预测煤炭价格为例,使用 Python 语言结合常见的机器学习库(如pandas、scikit - learn)来完成。 …...

QILSTE H6-S115FOKYG高亮橙光和黄绿光LED灯珠

型号:H6-S115FOKYG --- 在众多电子元件中,H6-S115FOKYG型号的LED以其独特的性能脱颖而出。这款产品采用了高亮橙光和黄绿光两种颜色,尺寸仅为1.6x1.5x0.55mm,却蕴含着强大的光电性能。其透明平面胶体设计,不仅美观&a…...

EasyDSS视频推拉流/直播点播平台:Mysql数据库接口报错502处理方法

视频推拉流/视频直播点播EasyDSS互联网直播平台支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务,全面满足超低延迟、超高画质、超大并发访…...

测试直播postman+Jenkins所学

接口自动化 什么是接口?本质上就是一个url,用于提供数据。后台程序提供一种数据地址,接口的数据一般是从数据库中查出来的。 postman自动化实操: 一般来说公司会给接口文档,如果没有,通过拦截&#xff0c…...

上线DeepSeek大模型,黄山“大位”智算中心正式点亮

2月28日,智启黄山,算领未来——黄山“大位”智算中心点亮仪式在黄山市大位人工智能计算中心举行,标志着黄山“大位”智算中心正式投入运营。同日,DeepSeek-R1大模型在黄山“大位”正式上线,通过“顶尖大模型普惠算力底…...

计算机毕业设计SpringBoot+Vue.js医院药品管理系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Linux安装nvm和node

执行curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash命令下载安装nvm 执行 source ~/.bashrc命令重新加载shell配置文件以使NVM生效 执行nvm ls-remote 查看可用node版本 如果确定版本,可以直接执行npm install 版本号&#xff0…...

HarmonyOS Next元服务网络请求封装实践

【HarmonyOS Next实战】元服务网络通信涅槃:深度封装如何实现80%性能跃升与零异常突破 ————从架构设计到工程落地的全链路优化指南 一、架构设计全景 1.1 分层架构模型 #mermaid-svg-VOia4RMx7iqmLnu7 {font-family:"trebuchet ms",verdana,arial,…...

网络编程-----服务器(多路复用IO 和 TCP并发模型)

一、单循环服务器模型 1. 核心特征 while(1){newfd accept();recv();close(newfd);}2. 典型应用场景 HTTP短连接服务&#xff08;早期Apache&#xff09;CGI快速处理简单测试服务器 3. 综合代码 #include <stdio.h> #include <sys/types.h> /* See NO…...

PostgreSQL 数据库专家可从事以的工作

数据库管理员&#xff08;DBA&#xff09; 职责 负责 PostgreSQL 数据库的日常管理和维护&#xff0c;包括安装、配置、升级数据库系统&#xff0c;确保数据库的稳定运行。 进行数据库性能调优&#xff0c;通过调整数据库参数、优化查询语句等方式&#xff0c;提高数据库的响应…...

如何学习编程?

如何学习编程&#xff1f; 笔记来源&#xff1a;How To Study Programming The Lazy Way 声明&#xff1a;该博客内容来自链接&#xff0c;仅作为学习参考 写在前面的话&#xff1a; 大多数人关注的是编程语言本身&#xff0c;而不是解决问题和逻辑思维。不要试图记住语言本身…...

策略模式详解:实现灵活多样的支付方式

多支付方式的实现&#xff1a;策略模式详解 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以互换使用。策略模式使得算法可以独立于使用它的客户端变化。本文将通…...

SQL根据分隔符折分不同的内容放到临时表

SQL Server存储过程里根据分隔符折分不同的内容放到临时表里做查询条件&#xff0c;以下分隔符使用“/”&#xff0c;可修改不同分隔符 --根据分隔符折分不同的内容放到临时表--------------- SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS id, LTRIM(RTR…...

微信小程序引入vant-weapp组件教程

本章教程,介绍如何在微信小程序中引入vant-weapp。 vant-weapp文档:https://vant-ui.github.io/vant-weapp/#/button 一、新建一个小程序 二、npm初始化 npm init三、安装 Vant Weapp‘ npm i @vant/weapp -...

从零到多页复用:我的WPF MVVM国际化实践

文章目录 第一步&#xff1a;基础实现&#xff0c;资源文件入门第二步&#xff1a;依赖属性&#xff0c;提升WPF体验第三步&#xff1a;多页面复用&#xff0c;减少重复代码第四步&#xff1a;动态化&#xff0c;应对更多字符串总结与反思 作为一名WPF开发者&#xff0c;我最近…...

uniapp 常用 UI 组件库

1. uView UI 特点&#xff1a; 组件丰富&#xff1a;提供覆盖按钮、表单、图标、表格、导航、图表等场景的内置组件。跨平台支持&#xff1a;兼容 App、H5、小程序等多端。高度可定制&#xff1a;支持主题定制&#xff0c;组件样式灵活。实用工具类&#xff1a;提供时间、数组操…...

C++编写Redis客户端

目录 安装redis-plus-plus库 ​编辑 编译Credis客户端 redis的通用命令使用 get/set exists del keys expire /ttl type string类型核心操作 set和get set带有超时时间 set带有NX string带有XX mset mget getrange和setrange incr和decr list类型核心操作…...

基于大模型预测的急性横贯性脊髓炎诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、急性横贯性脊髓炎概述 2.1 疾病定义与分类 2.2 病因与发病机制 2.3 临床表现与诊断标准 三、大模型在急性横贯性脊髓炎预测中的应用 3.1 大模型介绍与原理 3.2 数据收集与预处理 3.3 …...

nature genetics | SCENT:单细胞多模态数据揭示组织特异性增强子基因图谱,并可识别致病等位基因

–https://doi.org/10.1038/s41588-024-01682-1 Tissue-specific enhancer–gene maps from multimodal single-cell data identify causal disease alleles 研究团队和单位 Alkes L. Price–Broad Institute of MIT and Harvard Soumya Raychaudhuri–Harvard Medical S…...

【C语言】指针篇

目录 C 语言指针概述指针的声明和初始化声明指针初始化指针指针的操作解引用操作指针算术运算指针的用途动态内存分配作为函数参数指针与数组数组名作为指针通过指针访问数组元素指针算术和数组数组作为函数参数指针数组和数组指针指针数组数组指针函数指针函数指针的定义和声明…...