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

如何通过高效的缓存策略无缝加速湖仓查询

引言

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

随着数据湖仓和查询引擎架构的发展,开放文件格式和表格格式为数据分析带来了更好的生态兼容性和灵活性。然而,在实际应用中,特别是面向用户的实时查询场景下,数据湖的查询性能往往难以满足需求。

这主要是因为数据存储在远端导致额外的 I/O 开销,以及存储层面的性能波动,尤其是在处理大量小文件时表现更为明显。因此,建立高效的缓存机制成为连接数据湖和查询引擎的关键桥梁。


一、Data Cache 面临的挑战

然而,简单地添加缓存并不能解决所有问题,实践中往往面临以下挑战:

  • 数据一致性风险:Cache 很容易遇到过期失效的问题,缓存更新不及时可能导致查询结果不准确,数据变更难以实时反映到缓存层;
  • 资源利用效率:为了降低维护成本,一些企业会选择使用本地缓存,但是本地缓存需要预留固定磁盘空间,缺乏灵活性,资源无法根据负载动态调整;
  • 性能优化瓶颈:频繁的缓存操作会增加系统开销,当缓存的文件过多的时候,大量文件会带来额外系统开销以及锁的问题。当本地磁盘压力过大的时候,强行去读写缓存反而可能会导致性能瓶颈;
  • 运维成本增加:需要额外的人力进行系统的监控和维护工作,同时,系统上下游生态的整合与打通也都会带来额外的成本问题。

二、如何构建完善的 Data Cache 解决方案?

Cache 是一个查询加速的手段而不是目标。为了解决上述 Cache 带来的问题,企业需要构建具备以下特性的的缓存系统:

1. 数据一致性: 通过元数据管理确保数据时效性,实现实时感知数据更新,避免提供过期的数据。
2. 智能资源管理:自适应磁盘空间变化,根据磁盘状况进行自动扩缩容。理想情况下,做到在磁盘压力较小时自动扩容以缓存更多数据;在磁盘压力增大时自动缩容,确保不会对整体系统性能产生负面影响。
3. 智能的数据淘汰策略: 保护热点数据不被冷查询影响,智能识别和处理查询模式,把有限的空间留给最有价值的数据。
4. 自适应读取策略:根据系统负载动态选择最优读取方式,在必要时绕过缓存直接读取。

5. 高效的缓存架构设计:尽量降低因读写缓存文件而产生的系统操作。并且将缓存的填充过程异步化,从而可以在不显著消耗资源的情况下保持高查询性能。


三、利用 StarRocks 构建高效的缓存策略

构建高效的缓存策略不仅需要设计所提出的文件结构,还需要动态处理各种复杂的细节。

StarRocks 是一个开源的 MPP 查询引擎,旨在处理开放数据湖上的仓库类工作负载。它支持 Iceberg、Delta 和 Hudi 等流行的表格格式,以及 Parquet 和 ORC 等文件格式。StarRocks 结合了很多各种特性和优化,来在数据湖上提供快速、可靠的查询性能,其中磁盘的发挥起到了关键作用。

710578b5d87cc77185b2765efea68977.jpeg

StarRocks 具有简单的架构,主要包含两个核心组件:
  • 前端节点(FE):负责元数据管理,执行查询规划,并协调查询的整体执行。
  • 计算节点(CN):处理实际的数据缓存和处理任务。
当查询被提交时,CN 节点检查所需的数据缓存是否存在,并使用元数据验证数据新鲜度以确保一致性。

四、StarRocks 是如何处理缓存的?


1. 更合理的 Cache 结构

相比于传统简单的单个文件的 Cache,StarRocks 采用了大文件内切 Block 而非小文件的方式,并由 CN 中元数据模块整体管理每个 Block 的元信息。这一结构减少了过多文件的问题,提高了存储磁盘效率,增强了整体性能。

955ba33f42c8d7bacf146e3bc5e5f451.jpeg

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 秒后超时(如下图中蓝线所示)

6f0ed3265a00cb3908c88882c40c21fa.jpeg

唯品会仅在 19 台 Xeon E5-2683V4 64C 机器的负载上测试了 StarRocks,相比之下,StarRocks 表现出比 Presto 更快的查询性能,同时这也说明了数据本地化对查询速度的提升非常重要。


六、结语

开放湖仓与查询引擎架构有其优势,但通常会面临查询性能的限制。Data Cache 是湖上性能的关键所在,也是在湖上提供仓的性能的重要手段之一。StarRocks 通过深入优化的 Data Cache,在用户无感知的前提下开启 Cache,享受到极快的加速性能。

无论是开源项目 StarRocks 还是镜舟科技的企业级产品,都为企业提供了灵活的选择空间。随着数据规模的增长和业务对安全、易用等要求的提升,企业可以根据实际需求平滑过渡到更适合的解决方案。
a67c568d6e8d774a9b2f174d68f40df8.jpeg

相关文章:

如何通过高效的缓存策略无缝加速湖仓查询

引言 本文将探讨如何利用开源项目 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总数等这个数值&#xff0c;如果直接用count查询数据库那就太过分了。好在wordpress内置了一些标签可以直接获取到这些数值&#xff0c;本文整理了一些常用的wordpress网站总数标签。 文章总数 <?php $count_…...

pytest 通过实例讲清单元测试、集成测试、测试覆盖率

1. 单元测试 概念 定义: 单元测试是对代码中最小功能单元的测试&#xff0c;通常是函数或类的方法。目标: 验证单个功能是否按照预期工作&#xff0c;而不依赖其他模块或外部资源。特点: 快速、独立&#xff0c;通常是开发者最先编写的测试。 示例&#xff1a;pytest 实现单…...

C#里怎么样自己实现10进制转换为二进制?

C#里怎么样自己实现10进制转换为二进制&#xff1f; 很多情况下&#xff0c;我们都是采用C#里类库来格式化输出二进制数。 如果有人要你自己手写一个10进制数转换为二进制数&#xff0c;并格式化输出&#xff0c; 就可以采用本文里的方法。 这里采用求模和除法来实现的。 下…...

Kafka-Consumer理论知识

一、上下文 之前的博客我们分析了Kafka的设计思想、Kafka的Producer端、Kafka的Server端的分析&#xff0c;为了完整性&#xff0c;我们接下来分析下Kafka的Consumer。《Kafka-代码示例》中有对应的Consumer示例代码&#xff0c;我们以它为入口进行分析 二、KafkaConsumer是什…...

Js-对象-04-Array

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

React 第八节组件生命周期钩子-类式组件,函数式组件模拟生命周期用法

概述 React组件的生命周期可以分为三个主要阶段&#xff1a; 挂载阶段&#xff08;Mounting&#xff09;&#xff1a;组件被创建&#xff0c;插入到DOM 树的过程&#xff1b; 更新阶段&#xff08;Updating&#xff09;&#xff1a;是组件中 props 以及state 发生变化时&#…...

Dubbo源码解析-服务调用(七)

一、服务调用流程 服务在订阅过程中&#xff0c;把notify 过来的urls 都转成了invoker&#xff0c;不知道大家是否还记得前面的rpc 过程&#xff0c;protocol也是在服务端和消费端各连接子一个invoker&#xff0c;如下图&#xff1a; 这张图主要展示rpc 主流程&#xff0c;消费…...

svn 崩溃、 cleanup失败 怎么办

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

【Linux系列】NTP时间同步服务器搭建完整指南

在分布式系统和高可用环境中&#xff0c;时间同步是至关重要的。特别是对于银行、金融等关键业务系统&#xff0c;精准的时间同步不仅关系到系统的稳定性&#xff0c;还直接影响交易处理、日志管理、日终结算等功能。本文将介绍NTP&#xff08;Network Time Protocol&#xff0…...

go 结构体方法

在 Go 语言中&#xff0c;结构体方法是指附加到结构体类型上的函数。这些方法可以通过结构体的实例来调用。方法的接收者&#xff08;receiver&#xff09;指定了该方法属于哪个结构体类型。接收者可以是一个值类型或指针类型。 定义结构体方法 下面是如何为一个结构体定义方…...

DHCP服务(包含配置过程)

目录 一、 DHCP的定义 二、 使用DHCP的好处 三、 DHCP的分配方式 四、 DHCP的租约过程 1. 客户机请求IP 2. 服务器响应 3. 客户机选择IP 4. 服务器确定租约 5. 重新登录 6. 更新租约 五、 DHCP服务配置过程 一、 DHCP的定义 DHCP&#xff08;Dynamic Host Configur…...

uniapp内嵌的webview H5与应用通信

H5端&#xff1a; 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、绘制矩形 代码如下&#xff1a; renderer类&#xff1a; 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…...

网络基础二

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

从Full-Text Search全文检索到RAG检索增强

从Full-Text Search全文检索到RAG检索增强 时光飞逝&#xff0c;转眼间六年过去了&#xff0c;六年前铁蛋优化单表千万级数据查询性能的场景依然历历在目&#xff0c;铁蛋也从最开始做CRUD转行去了大数据平台开发&#xff0c;混迹包装开源的业务&#xff0c;机缘巧合下做了实时…...

springMVC 全局异常统一处理

全局异常处理⽅式⼀: 1、配置简单异常处理器 配置 SimpleMappingExceptionResolver 对象: <!-- 配置全局异常统⼀处理的 Bean &#xff08;简单异常处理器&#xff09; --> <bean class"org.springframework.web.servlet.handler.SimpleMappingExceptionReso…...

qt ubuntu i386 系统

sudo ln -s cmake-3.31.0-linux-x86_64/bin/* /usr/local/bin 【Ubuntu20.4安装QT6 - CSDN App】Ubuntu20.4安装QT6_ubuntu安装qt6-CSDN博客 sudo ../configure -release -platform linux-g-64 -static -nomake examples -nomake demos -no-qt3support -no-script -no-scriptt…...

BUUCTF—Reverse—helloword(6)

一道安卓逆向的签到题 下载附件 使用JADX-gui反编译工具打开&#xff08;注意配环境&#xff09;&#xff0c;找到主函数 jadx 本身就是一个开源项目&#xff0c;源代码已经在 Github 上开源了 官方地址&#xff1a;GitHub - skylot/jadx: Dex to Java decompiler 发现flag …...

深入解析下oracle date底层存储方式

之前我们介绍了varchar2和char的数据库底层存储格式&#xff0c;今天我们介绍下date类型的数据存储格式&#xff0c;并通过测试程序快速获取一个日期。 一、环境搭建 1.1&#xff0c;创建表 我们还是创建一个测试表t_code&#xff0c;并插入数据&#xff1a; 1.2&#xff0c;…...

Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持

作者&#xff1a;来自 Elastic Saikat Sarkar 使用 Elasticsearch 向量数据库构建搜索 AI 体验时如何使用 IBM watsonx™ Slate 文本嵌入。 Elastic 很高兴地宣布&#xff0c;通过集成 IBM watsonx™ Slate 嵌入模型&#xff0c;我们的开放推理 API 功能得以扩展&#xff0c;这…...

如何搭建一个小程序:从零开始的详细指南

在当今数字化时代&#xff0c;小程序以其轻便、无需下载安装即可使用的特点&#xff0c;成为了连接用户与服务的重要桥梁。无论是零售、餐饮、教育还是娱乐行业&#xff0c;小程序都展现了巨大的潜力。如果你正考虑搭建一个小程序&#xff0c;本文将为你提供一个从零开始的详细…...

NFS搭建

NFS搭建 单节点安装配置服务器安装配置启动并使NFS服务开机自启客户端挂载查看是否能发现服务器的共享文件夹创建挂载目录临时挂载自动挂载 双节点安装配置服务器安装配置服务端配置NFS服务端配置Keepalived编辑nfs_check.sh监控脚本安装部署RsyncInofity 客户端 单节点安装配置…...

RNN与LSTM,通过Tensorflow在手写体识别上实战

简介&#xff1a;本文从RNN与LSTM的原理讲起&#xff0c;在手写体识别上进行代码实战。同时列举了优化思路与优化结果&#xff0c;都是基于Tensorflow1.14.0的环境下&#xff0c;希望能给您的神经网络学习带来一定的帮助。如果您觉得我讲的还行&#xff0c;希望可以得到您的点赞…...

Docker部署FastAPI实战

在现代 Web 开发领域&#xff0c;FastAPI 作为一款高性能的 Python 框架&#xff0c;正逐渐崭露头角&#xff0c;它凭借简洁的语法、快速的执行速度以及出色的类型提示功能&#xff0c;深受开发者的喜爱。而 Docker 容器化技术则为 FastAPI 应用的部署提供了便捷、高效且可移植…...

【Python数据分析五十个小案例】电影评分分析:使用Pandas分析电影评分数据,探索评分的分布、热门电影、用户偏好

博客主页&#xff1a;小馒头学python 本文专栏: Python数据分析五十个小案例 专栏简介&#xff1a;分享五十个Python数据分析小案例 在现代电影行业中&#xff0c;数据分析已经成为提升用户体验和电影推荐的关键工具。通过分析电影评分数据&#xff0c;我们可以揭示出用户的…...

湖南城乡建设厅网站/aso优化的主要内容为

所有被盗过号的 游戏玩家&#xff0c;都对黑客咬牙切齿&#xff0c;他让你损失的不仅是一个帐号&#xff0c;更是一套顶级装备&#xff0c;365天黑天摸地的练级&#xff0c;甚至是游戏中的荣耀。 游戏黑客究竟是什么样的神秘人物&#xff0c;又是如何把你的帐号盗走&#xff0c…...

哪做网站/百度推广登录平台官网

程序分目录管理 szz_aip&#xff1a;工程目录bin&#xff1a;可执行文件 start.pyconfig&#xff1a;配置文件 setting.pylib&#xff1a;工具类、初始化服务类、接口类 interface.py 接口 tools.py 工具logs&#xff1a;日志readme.txt&#xff1a;说明 setting.p…...

文化部网站总分馆建设实施意见/前端seo是什么

随着时代的发展&#xff0c;信息技术已经深深地渗透到人类的方方面面。现代信息技术已经开始改变人类的学习方式、思维方式和工作方式。现代的教育方式也由以前单一的形式向多元化发展&#xff0c;只有利用现代信息技术进行学习、探索和创造&#xff0c;才能提高教师的教研能力…...

wordpress 无广告视频插件下载/推广营销是什么

❑ 从 10.7.2 beta 11C6X 开始&#xff0c;启用 iCloud Find My Mac 功能&#xff0c;必须需要 Recovery HD 的存在。由于这个分区比较特殊&#xff0c;常规方法不能够创建它。导致很多同学为此&#xff0c;需要重装 OS X Lion。当然&#xff0c;重装是一个非常常规&#xff0c…...

做进口货的电商网站/游戏推广员是做什么的

Nuxt.js 和 Vue 一样&#xff0c;支持插件&#xff0c;可以分为三种类型&#xff1a;自定义插件、Vue 插件和外部包和模块。 虽然 Nuxt 文档 详细讨论了最后两个&#xff0c;但它们仅简要说明了如何在 Nuxt 应用程序中构建和使用自定义插件。 全局自定义插件可以在几种情况下派…...

建设社团网站的可行性分析/必应站长平台

配置嘉里项目本地rabbitmq服务的流程&#xff1a; 1. 登录本地rabbit服务 输入 http://localhost:15672/ &#xff0c;输入用户名、密码&#xff0c;登录本地rabbit服务 2.创建 crm-user 和 kip-user 两个用户 创建crm-user 用户&#xff1a; 同上创建kip-user 用户&…...