如何通过高效的缓存策略无缝加速湖仓查询
引言
本文将探讨如何利用开源项目 StarRocks 的缓存策略来加速湖仓查询,为企业提供更快速、更灵活的数据分析能力。作为 StarRocks 社区的主要贡献者和商业化公司,镜舟科技深度参与 StarRocks 项目开发,也为企业着手构建湖仓架构提供更多参考。
随着数据湖仓和查询引擎架构的发展,开放文件格式和表格格式为数据分析带来了更好的生态兼容性和灵活性。然而,在实际应用中,特别是面向用户的实时查询场景下,数据湖的查询性能往往难以满足需求。一、Data Cache 面临的挑战
然而,简单地添加缓存并不能解决所有问题,实践中往往面临以下挑战:
- 数据一致性风险:Cache 很容易遇到过期失效的问题,缓存更新不及时可能导致查询结果不准确,数据变更难以实时反映到缓存层;
- 资源利用效率:为了降低维护成本,一些企业会选择使用本地缓存,但是本地缓存需要预留固定磁盘空间,缺乏灵活性,资源无法根据负载动态调整;
- 性能优化瓶颈:频繁的缓存操作会增加系统开销,当缓存的文件过多的时候,大量文件会带来额外系统开销以及锁的问题。当本地磁盘压力过大的时候,强行去读写缓存反而可能会导致性能瓶颈;
- 运维成本增加:需要额外的人力进行系统的监控和维护工作,同时,系统上下游生态的整合与打通也都会带来额外的成本问题。
二、如何构建完善的 Data Cache 解决方案?
Cache 是一个查询加速的手段而不是目标。为了解决上述 Cache 带来的问题,企业需要构建具备以下特性的的缓存系统:
1. 数据一致性: 通过元数据管理确保数据时效性,实现实时感知数据更新,避免提供过期的数据。5. 高效的缓存架构设计:尽量降低因读写缓存文件而产生的系统操作。并且将缓存的填充过程异步化,从而可以在不显著消耗资源的情况下保持高查询性能。
三、利用 StarRocks 构建高效的缓存策略
构建高效的缓存策略不仅需要设计所提出的文件结构,还需要动态处理各种复杂的细节。
StarRocks 是一个开源的 MPP 查询引擎,旨在处理开放数据湖上的仓库类工作负载。它支持 Iceberg、Delta 和 Hudi 等流行的表格格式,以及 Parquet 和 ORC 等文件格式。StarRocks 结合了很多各种特性和优化,来在数据湖上提供快速、可靠的查询性能,其中磁盘的发挥起到了关键作用。
- 前端节点(FE):负责元数据管理,执行查询规划,并协调查询的整体执行。
- 计算节点(CN):处理实际的数据缓存和处理任务。
四、StarRocks 是如何处理缓存的?
相比于传统简单的单个文件的 Cache,StarRocks 采用了大文件内切 Block 而非小文件的方式,并由 CN 中元数据模块整体管理每个 Block 的元信息。这一结构减少了过多文件的问题,提高了存储磁盘效率,增强了整体性能。

2. 更深入的策略优化
StarRocks 采用内存和磁盘两级缓存策略,根据查询的频度,让更热的数据保留在内存这类更快的存储介质中。在淘汰策略上,采用 SLRU,让频繁查询的热数据更不容易被淘汰,也更不容易被冷查询所影响。同时,StarRocks 能够排除非查询活动,如导入、物化视图刷新、ETL 任务和全表或分区扫描,以最大限度地减少磁盘污染。
3. 更强的自适应能力
StarRocks 可以根据当前磁盘的容量动态的对 Cache 的容量占用进行调整,保证磁盘空间尽可能被使用,同时在磁盘空间占用率较高时为导入、ETL、Spill 等任务让出更多空间,保证磁盘和系统的稳定性
同时,为了保证开箱即用的性能,当缓存的磁盘当前吞吐较低的情况下,StarRocks 会自动放弃读取 Cache 而选择远端,对性能进行改善。除了开源社区版本,镜舟科技也提供了成熟的基于 StarRocks 的企业级解决方案:镜舟湖仓分析引擎。企业级产品在开源项目的基础功能之外,还提供了更完善的:
- 数据安全能力:细粒度访问控制、数据加密、审计日志等
- 运维工具:可视化监控、告警、诊断工具
- 企业级特性:灾备方案、多活部署、资源隔离等
在对稳定性和服务响应要求较高的金融、电信等场景,镜舟科技的企业级产品能提供更安全、易用的数据保障。
五、缓存功能最佳应用案例
案例一:携程的 StarRocks 缓存应用实践
携程运营着一个基于 Hive 的报表平台 Artnova,支撑数据查询与报表查看。面对复杂 SQL、高并发查询等挑战,携程通过利用 StarRocks 的数据缓存功能,将查询性能的提升了 3.36 倍。
特别是通过湖上直接查询和物化视图技术的结合,携程不仅避免了数据搬迁的复杂性和成本,还实现了平均查询性能提升 7 倍以上,部分场景甚至达到几十倍的性能提升。
案例二:唯品会的 StarRocks 架构演进与性能提升唯品会在大数据分析中,经历了从 Presto 到 StarRocks 的架构演进。在面对复杂分析和存储挑战时,通过存算分离和 Data Cache 功能的启用,唯品会不仅提升了查询速度,还大幅降低了存储成本。唯品会从部署了 100 多台物理机的 Presto 集群中选出耗时最长的 500 个查询进行测试,其中约有 210 个查询在 1800 秒后超时(如下图中蓝线所示)
唯品会仅在 19 台 Xeon E5-2683V4 64C 机器的负载上测试了 StarRocks,相比之下,StarRocks 表现出比 Presto 更快的查询性能,同时这也说明了数据本地化对查询速度的提升非常重要。
六、结语
开放湖仓与查询引擎架构有其优势,但通常会面临查询性能的限制。Data Cache 是湖上性能的关键所在,也是在湖上提供仓的性能的重要手段之一。StarRocks 通过深入优化的 Data Cache,在用户无感知的前提下开启 Cache,享受到极快的加速性能。
无论是开源项目 StarRocks 还是镜舟科技的企业级产品,都为企业提供了灵活的选择空间。随着数据规模的增长和业务对安全、易用等要求的提升,企业可以根据实际需求平滑过渡到更适合的解决方案。
相关文章:

如何通过高效的缓存策略无缝加速湖仓查询
引言 本文将探讨如何利用开源项目 StarRocks 的缓存策略来加速湖仓查询,为企业提供更快速、更灵活的数据分析能力。作为 StarRocks 社区的主要贡献者和商业化公司,镜舟科技深度参与 StarRocks 项目开发,也为企业着手构建湖仓架构提供更多参考…...

Linux V4L2框架介绍
linux V4L2框架介绍 V4L2框架介绍 V4L2,全称Video for Linux 2,是Linux操作系统下用于视频数据采集设备的驱动框。它提供了一种标准化的方式使用户空间程序能够与视频设备进行通信和交互。通过V4L2接口,用户可以方便地实现视频图像数据的采…...

【前端】JavaScript 中 arguments、类数组与数组的深入解析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是 arguments 对象2.1 arguments 的定义2.2 arguments 的特性2.3 使用场景 💯深入了解 arguments 的结构3.1 arguments 的内部结构arguments 的关键属性…...
Android 布局菜单或按钮图标或Menu/Item设置可见和不可见
设置可见和不可见 即 设置 显示和隐藏;是双向设置;什么情况显示,什么情况隐藏分判断的条件 它不同于删除和屏蔽,删除和屏蔽,覆盖是单向的,不可逆转的。它间接等于单向的隐藏!!&…...
|| 与 ??的区别
?? : 空值合并运算符, 用于在左侧操作数为 null 或 undefined 时返回右侧操作数 let name null // null 或者 undefinedlet defaultName defaultNamelet displayName name ?? defaultNameconsole.log(displayName) // defaultName || : 逻辑或,…...
wordpress获取文章总数、分类总数、tag总数等
在制作wordpress模板的时候会要调用网站的文章总数分类总数tag总数等这个数值,如果直接用count查询数据库那就太过分了。好在wordpress内置了一些标签可以直接获取到这些数值,本文整理了一些常用的wordpress网站总数标签。 文章总数 <?php $count_…...
pytest 通过实例讲清单元测试、集成测试、测试覆盖率
1. 单元测试 概念 定义: 单元测试是对代码中最小功能单元的测试,通常是函数或类的方法。目标: 验证单个功能是否按照预期工作,而不依赖其他模块或外部资源。特点: 快速、独立,通常是开发者最先编写的测试。 示例:pytest 实现单…...
C#里怎么样自己实现10进制转换为二进制?
C#里怎么样自己实现10进制转换为二进制? 很多情况下,我们都是采用C#里类库来格式化输出二进制数。 如果有人要你自己手写一个10进制数转换为二进制数,并格式化输出, 就可以采用本文里的方法。 这里采用求模和除法来实现的。 下…...
Kafka-Consumer理论知识
一、上下文 之前的博客我们分析了Kafka的设计思想、Kafka的Producer端、Kafka的Server端的分析,为了完整性,我们接下来分析下Kafka的Consumer。《Kafka-代码示例》中有对应的Consumer示例代码,我们以它为入口进行分析 二、KafkaConsumer是什…...

Js-对象-04-Array
重点关注:Array String JSON BOM DOM Array Array对象时用来定义数组的。常用语法格式有如下2种: 方式1: var 变量名 new Array(元素列表); 例如: var arr new Array(1,2,3,4); //1,2,3,4 是存储在数组中的数据࿰…...

React 第八节组件生命周期钩子-类式组件,函数式组件模拟生命周期用法
概述 React组件的生命周期可以分为三个主要阶段: 挂载阶段(Mounting):组件被创建,插入到DOM 树的过程; 更新阶段(Updating):是组件中 props 以及state 发生变化时&#…...

Dubbo源码解析-服务调用(七)
一、服务调用流程 服务在订阅过程中,把notify 过来的urls 都转成了invoker,不知道大家是否还记得前面的rpc 过程,protocol也是在服务端和消费端各连接子一个invoker,如下图: 这张图主要展示rpc 主流程,消费…...

svn 崩溃、 cleanup失败 怎么办
在使用svn的过程中,可能出现整个svn崩溃, 例如cleanup 失败的情况,类似于 这时可以下载本贴资源文件并解压。 或者直接访问网站 SQLite Download Page 进行下载 解压后得到 sqlite3.exe 放到发生问题的svn根目录的.svn路径下 右键呼出pow…...

【Linux系列】NTP时间同步服务器搭建完整指南
在分布式系统和高可用环境中,时间同步是至关重要的。特别是对于银行、金融等关键业务系统,精准的时间同步不仅关系到系统的稳定性,还直接影响交易处理、日志管理、日终结算等功能。本文将介绍NTP(Network Time Protocol࿰…...
go 结构体方法
在 Go 语言中,结构体方法是指附加到结构体类型上的函数。这些方法可以通过结构体的实例来调用。方法的接收者(receiver)指定了该方法属于哪个结构体类型。接收者可以是一个值类型或指针类型。 定义结构体方法 下面是如何为一个结构体定义方…...

DHCP服务(包含配置过程)
目录 一、 DHCP的定义 二、 使用DHCP的好处 三、 DHCP的分配方式 四、 DHCP的租约过程 1. 客户机请求IP 2. 服务器响应 3. 客户机选择IP 4. 服务器确定租约 5. 重新登录 6. 更新租约 五、 DHCP服务配置过程 一、 DHCP的定义 DHCP(Dynamic Host Configur…...
uniapp内嵌的webview H5与应用通信
H5端: 1、找到index.html引入依赖 <script type"text/javascript" src"https://unpkg.com/dcloudio/uni-webview-js0.0.3/index.js"></script> 2、在需要通讯处发送消息 uni.postMessage({data:{code:200,msg:"处理完成&q…...
Android OpenGL ES详解——绘制圆角矩形
1、绘制矩形 代码如下: renderer类: package com.example.roundrectimport android.content.Context import android.opengl.GLES30 import android.opengl.GLSurfaceView.Renderer import com.opengllib.data.VertexArray import com.opengllib.prog…...

网络基础二
文章目录 协议定制,序列化和反序列化应用层网络版计算器协议的定制序列反序列化序列化未复用版 反序列化 TCP是面向字节流的,你怎么保证,你读取上来的数据,是‘’一个“ “完整””的报文呢? 我们没有区分字符串里面有…...

从Full-Text Search全文检索到RAG检索增强
从Full-Text Search全文检索到RAG检索增强 时光飞逝,转眼间六年过去了,六年前铁蛋优化单表千万级数据查询性能的场景依然历历在目,铁蛋也从最开始做CRUD转行去了大数据平台开发,混迹包装开源的业务,机缘巧合下做了实时…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...