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

大数据技术7:基于StarRocks统一OALP实时数仓

前言: 大家对StarRocks 的了解可能不及 ClickHouse或者是远不及 ClickHouse 。但是大家可能听说过 Doris ,而 StarRocks 实际上原名叫做 Doris DB ,他相当于是一个加强版的也就是一个 Doris+ ,也就是说 Doris 所有的功能 StarRocks 都是有的,但是 StarRocks 有的这种加速的功能 Doris 目前是没有的。我们可以基于 Apache Doris 统一 OLAP 技术栈,满足庞大数据体量下的实时分析与极速查询。


1、什么是StarRocks?

StarRocks原名DorisDB,StarRocks 是 Apache Doris 的 Fork 版本。StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。

StarRocks 架构简洁,采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品。

  • StarRocks 能很好地支持实时数据分析,并能实现对实时更新数据的高效查询。StarRocks 还支持现代化物化视图,进一步加速查询。

  • 多分布式 Join极速引擎,这个分布式 Join 目前就是 ClickHouse 比较缺乏的一个功能。如果了解 spark 或者了解 presto 的话,其实都应该知道这都是有的,就是说这个其实就是做 Shuffle ,就是把不同的 Key 给 Shuffle 到同一个 bucket 里边,然后再去做 Join ,然后右边实际上是一个更加高效的一种 Join 方式也就是提前的去做好了这个 bucket 的分类,也就是说同一个 Key,两张表相同的 Key ,全部落到同一个 bucket 的范围,然后这个 bucket 的之间肯定是没有 over lap ,所以可以放心的做这个Colocate  joy ,在这个 spark 里面也叫 bucket join 。

  • 使用 StarRocks,用户可以灵活构建包括大宽表、星型模型、雪花模型在内的各类模型。

  • StarRocks 兼容 MySQL 协议,支持标准 SQL 语法,易于对接使用,全系统无外部依赖,高可用,易于运维管理。StarRocks 还兼容多种主流 BI 产品,包括 Tableau、Power BI、FineBI 和 Smartbi。


2、使用Doris替换ClickHouse、Kylin和Druid

这里有一家电子商务SaaS提供商,其数据系统提供实时和离线报告、客户分割和日志分析服务。最初,他们为这些不同的目的使用了不同的OLAP引擎:

  • Apache Kylin用于离线报告:该系统为超过500万个卖家提供离线报告服务。其中的大型卖家拥有超过1000万注册会员和100,000个SKU,详细信息放在平台上的400多个数据立方体中。

  • ClickHouse用于客户分割和Top-N日志查询:这需要高频更新、高QPS和复杂的SQL。

  • Apache Druid用于实时报告:卖家通过组合不同的维度提取所需的数据,这种实时报告需要快速的数据更新、快速的查询响应和系统的强大稳定性。

图片

这三个组件都有各自的痛点:

  • Apache Kylin在固定表模式下运行良好,但每次添加维度时,需要创建一个新的数据立方体并在其中重新填充历史数据。

  • ClickHouse不适用于多表join处理,因此需要额外的解决方案来进行联合查询和多表连接查询。在高并发场景下,它的表现低于预期。

  • Apache Druid实现了幂等写入,因此它本身不支持数据更新或删除。这意味着当上游出现问题时,需要进行完整的数据替换。如果您从头到尾考虑所有数据备份和移动,这样的数据修复是一个多步骤的过程。此外,新摄入的数据在放入Druid中的段之前将无法用于查询。这意味着存在更长的时间窗口,从而导致上下游之间的数据不一致。

由于它们共同工作,这种架构可能太难以维护,因为它需要在开发、监控和维护方面了解所有这些组件。此外,每次用户扩展集群时,他们必须停止当前集群并迁移所有数据库和表,这不仅是一个巨大的任务,而且会对业务造成巨大的干扰。基于上述架构痛点,友赞对市面上的架构进行了调研与选型,希望选择一款能够简化当前复杂架构、统一 OLAP 技术栈的引擎。他们除了分析 OLAP 性能本身对于业务的帮助,还需要评估架构改造所带来的收益成本比,思考架构进行迁移和重构之后所带来的 ROI 是否符合预期。

图片

Apache Doris填补了这些空白。

  • 查询性能:Doris擅长高并发查询和JOIN连接查询,并且现在配备了倒排索引以加速日志搜索。

  • 数据更新:Doris的唯一键模型支持大容量更新和高频实时写入,而重复键模型和唯一键模型支持部分列更新。它还提供数据写入的恰好一次保证,并确保基表、物化视图和副本之间的一致性。

  • 维护:Doris与MySQL兼容。它支持轻松扩展和轻量级模式更改。它配备了自己的集成工具,如Flink-Doris-Connector和Spark-Doris-Connector。


3、 StarRocks和ClickHouse压测性能对比

这里比较了两个组件在SQL和连接查询方案上的性能,并计算了Apache Doris的CPU和内存消耗。

2.1 SQL查询性能

Apache Doris在16个SQL查询中的10个中表现优于ClickHouse,最大的性能差距比例接近30。总体而言,Apache Doris比ClickHouse快2~3倍。

图片

2.2 连接查询性能

对于连接查询测试,使用了不同大小的主表和维表。

  • 主表:用户活动表(40亿行)、用户属性表(250亿行)和用户属性表(960亿行)

  • 维表:100万行、1000万行、5000万行、1亿行、5亿行、10亿行和25亿行。

测试包括完全连接查询和过滤连接查询。完全连接查询连接主表和维表的所有行,而过滤连接查询使用WHERE过滤器检索特定卖家ID的数据。结果如下:

主表(40亿行):

  • 完全连接查询:Doris在所有维表的完全连接查询中均优于ClickHouse。随着维表变大,性能差距越来越大。最大的差距比例接近5。

  • 过滤连接查询:基于卖家ID,过滤器从主表中筛选出了4100万行。对于小型维表,Doris比ClickHouse快2~3倍;对于大型维表,Doris比ClickHouse快10倍以上;对于大于1亿行的维表,ClickHouse会抛出OOM错误,而Doris则正常运行。

主表(250亿行):

  • 完全连接查询:Doris在所有维表的完全连接查询中均优于ClickHouse。ClickHouse在维表大于5000万行时会产生OOM错误。

  • 过滤连接查询:过滤器从主表中筛选出了5.7亿行。Doris在几秒钟内响应,而ClickHouse在连接大型维表时完成时间为几分钟,并在此过程中崩溃。

主表(960亿行):

Doris在所有查询中都表现出相对较快的性能,而ClickHouse无法执行所有查询。

在CPU和内存消耗方面,Apache Doris在所有大小的连接查询中都保持稳定的集群负载。


参考链接:

从 Clickhouse 到 Apache Doris:有赞业务场景下性能测试与迁移验证

开源大数据 OLAP 引擎最佳实践 | 学习笔记(二)-阿里云开发者社区

相关文章:

大数据技术7:基于StarRocks统一OALP实时数仓

前言: 大家对StarRocks 的了解可能不及 ClickHouse或者是远不及 ClickHouse 。但是大家可能听说过 Doris ,而 StarRocks 实际上原名叫做 Doris DB ,他相当于是一个加强版的也就是一个 Doris ,也就是说 Doris 所有的功能 StarRocks 都是有的&a…...

C# WPF上位机开发(网络程序界面开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 之前我们讨论过,设备之间通讯的方式很多。但是,不知道大家有没有注意,前面谈到的这些通讯方式都需要上位机电脑…...

卡码网语言基础课 | 20. 排队取奶茶

目录 一、 队列的基本认识 二、 队列的操作 2.1 引入头文件 2.2 创建队列 2.3 队列的常见操作 三、 解题 通过本次练习,将会学习到以下C知识点: 队列的基本概念(队头、队尾)和特点(先入先出)入队、出队…...

Angular 进阶之四:SSR 应用场景与局限

应用场景 内容丰富,复杂交互的动态网页,对首屏加载有要求的项目,对 seo 有要求的项目(因为服务端第一次渲染的时候,已经把关键字和标题渲染到响应的 html 中了,爬虫能够抓取到此静态内容,因此更…...

vue2 cron表达式组件

vue2 cron表达式组件 1. 先上图 2. 代码目录 3. 直接上代码 &#xff08;组件代码太多&#xff0c;直接上压缩包&#xff0c;解压后直接用&#xff0c;压缩包再博客顶部&#xff09; 4. 使用注&#xff1a;示例代码中使用了element-ui // HomeView.vue<template><…...

git-vscode

git-vscode ctrlshiftp 创建分支 create branch 直接切到新的分支了 切换分支 直接点左下角自己选择 vscode中配置仓库 https://blog.csdn.net/zora_55/article/details/129709251 推送tag tag作用就是在 Git 中&#xff0c;标记存储库历史记录中特定提交的一种方式。t…...

【C++11(三)】智能指针详解--RAII思想循环引用问题

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C11 1. 前言2. 为什么要有智能指针?3. RAII思想…...

佳明(Garmin) fēnix 7X 增加小睡检测功能

文章目录 &#xff08;一&#xff09;零星小睡&#xff08;二&#xff09;小睡检测&#xff08;三&#xff09;吐槽佳明&#xff08;3.1&#xff09;心率检测&#xff08;3.2&#xff09;光线感应器&#xff08;3.3&#xff09;手表重量&#xff08;3.4&#xff09;手表续航 &a…...

二、如何保证架构的质量、架构前期准备、技术填补与崩溃预防、系统重构

1、如何保证架构的质量 -- 稳定性和健壮性 2、正确的选择是良好的开端 -- 架构前期准备 ① 架构师分类&#xff1a;系统架构师、应用架构师、业务架构师 3、技术填补与崩溃预防 4、系统重构...

14、SQL注入——HTTP文件头注入

文章目录 一、HTTP Header概述1.1 HTTP工作原理1.2 HTTP报文类型1.3 较重要的HTTP Header内容 二、HTTP Header注入2.1 HTTP Header注入的前提条件2.2 常见的HTTP Header注入类型 一、HTTP Header概述 1.1 HTTP工作原理 1.2 HTTP报文类型 &#xff08;1&#xff09;请求报文 …...

李宏毅bert记录

一、自监督学习&#xff08;Self-supervised Learning&#xff09; 在监督学习中&#xff0c;模型的输入为x&#xff0c;若期望输出是y&#xff0c;则在训练的时候需要给模型的期望输出y以判断其误差——有输入和输出标签才能训练监督学习的模型。 自监督学习在没有标注的训练…...

.Net6.0 Microsoft.AspNetCore.Http.Abstractions 2.20 已弃用

您想要升级 Microsoft.AspNetCore.Http.Abstractions 包&#xff0c;您需要注意以下几点&#xff1a; Microsoft.AspNetCore.Http.Abstractions 包在 ASP.NET Core 2.2 版本后已经被标记为过时&#xff0c;因为它已经被包含在 Microsoft.AspNetCore.App 框架引用中12。因此&am…...

c2-C语言--指针

1.用一级指针遍历一维数组 结论 buf[i]<>*(buf i) <> *(p i)<> p[i] #include <stdio.h>int main(){int buf[5] {10,20 ,30 ,40,50}; //buf[0] --- int // buf --&buf[0] ----int *int *p buf;//&buf[0] --- &*(buf0)printf(&quo…...

kafka入门(四):消费者

消费者 (Consumer ) 消费者 订阅 Kafka 中的主题 (Topic) &#xff0c;并 拉取消息。 消费者群组&#xff08; Consumer Group&#xff09; 每一个消费者都有一个对应的 消费者群组。 一个群组里的消费者订阅的是同一个主题&#xff0c;每个消费者接收主题的一部分分区的消息…...

DFS、BFS求解leetcode图像渲染问题(Java)

目录 leetcode733题.图像渲染 DFS BFS leetcode733题.图像渲染 733. 图像渲染 - 力扣&#xff08;LeetCode&#xff09; 有一幅以 m x n 的二维整数数组表示的图画 image &#xff0c;其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr , sc 和 newColor …...

0基础学习云计算难吗?

很多人经常会问云计算是什么&#xff1f;云计算能干什么&#xff1f;学习云计算能做什么工作&#xff1f;其实我们有很多人并不知道云计算是什么&#xff0c;小知今天来给大家讲讲学习云计算能做什么。 中国的云计算行业目前正处于快速发展阶段&#xff0c;随着互联网和数字化…...

【RabbitMQ高级功能详解以及常用插件实战】

文章目录 队列1 、Classic经典队列2、Quorum仲裁队列3、Stream流式队列4、如何使用不同类型的队列 二、死信队列 队列 classic经典队列&#xff0c;Quorum仲裁队列&#xff0c;Stream流式队列 1 、Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中&#xff0c…...

开源的数据流技术,该选择Redpanda还是Apache Kafka?

本文将比较Apache Kafka和Redpanda两种开源的数据流技术&#xff0c;在云原生实时处理能力上的不同&#xff0c;以及如何在项目中做出选择。 目前&#xff0c;Apache Kafka不但成为了数据流处理领域事实上的标准&#xff0c;而且带动了同类产品的出现。Redpanda就是其中之一…...

720度vr虚拟家居展厅提升客户的参观兴致

VR虚拟展厅线上3D交互展示的优势有以下几点&#xff1a; 打破了场馆的展示限制&#xff0c;可展示危险性制品、珍贵稀有物品、超大型设备等&#xff0c;同时提供了更大的展示空间和更丰富的展示内容。 可提供企业真实环境的实时VR全景参观&#xff0c;提升潜在客户信任度。 提供…...

mysql中的DQL查询

表格为&#xff1a; DQL 基础查询 语法&#xff1a;select 查询列表 from 表名&#xff1a;&#xff08;查询的结果是一个虚拟表格&#xff09; -- 查询指定的列 SELECT NAME,birthday,phone FROM student -- 查询所有的列 * 所有的列&#xff0c; 查询结果是虚拟的表格&am…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...