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

news2024/11/27 15:14:05

引言

本文将探讨如何利用开源项目 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

25A物联网微型断路器 智慧空开1P 2P 3P 4P-安科瑞黄安南

微型断路器,作为现代电气系统中不可或缺的重要组件,在保障电路安全与稳定运行方面发挥着关键作用。从其工作原理来看,微型断路器通过感知电流的异常变化来迅速作出响应。当电路中的电流超过预设的安全阈值时,其内部的电磁感应装置…

目标检测,图像分割,超分辨率重建

目标检测和图像分割 目标检测和图像分割是计算机视觉中的两个不同任务,它们的输出形式也有所不同。下面我将分别介绍这两个任务的输出。图像分割又可以分为:语义分割、实例分割、全景分割。 语义分割(Semantic Segmentation)&…

16 —— Webpack多页面打包

需求&#xff1a;把 黑马头条登陆页面-内容页面 一起引入打包使用 步骤&#xff1a; 准备源码&#xff08;html、css、js&#xff09;放入相应位置&#xff0c;并改用模块化语法导出 原始content.html代码 <!DOCTYPE html> <html lang"en"><head&…

《PH47 快速开发教程》发布

PDF 教程下载位于CSDN资源栏目&#xff08;网页版本文上方&#xff09; 或Gitee&#xff1a;document ss15/PH47 - 码云 - 开源中国

腾讯云OCR车牌识别实践:从图片上传到车牌识别

在当今智能化和自动化的浪潮中&#xff0c;车牌识别&#xff08;LPR&#xff09;技术已经广泛应用于交通管理、智能停车、自动收费等多个场景。腾讯云OCR车牌识别服务凭借其高效、精准的识别能力&#xff0c;为开发者提供了强大的技术支持。本文将介绍如何利用腾讯云OCR车牌识别…

C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)

目录 题目&#xff1a; 无重复字符的最长子串 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 3. 代码实现 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口 题目&#xff1a; 无重复字符的最长子串 1. 题目解析 题目截图&#xff1a; 此题所说的…

[网安靶场] [更新中] UPLOAD LABS —— 靶场笔记合集

GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场一个想帮你总结所有类型的上传漏洞的靶场. Contribute to c0ny1/upload-labs development by creating an account on GitHub.https://github.com/c0ny1/upload-labs 0x01&#xff1a;UPLOAD LABS 靶场初识…

安装python拓展库pyquery相关问题

我采用的是离线whl文件安装, 从官方库地址: https://pypi.org/, 下载whl文件, 然后在本地电脑上执行pip install whl路径文件名.whl 但是在运行时报错如下图 大体看了看, 先是说了说找到了合适的 lxml>2.1, 在我的python库路径中, 然后我去看了看我的lxml版本, 是4.8.0, 对…

春秋云境 CVE 复现

CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数&#xff0c;这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下&#xff0c;具有管理选项功能 (admin) 的用户可以使用受影响的功能&#xff0c;但是该插件有一个设置允许低权限用…

图论入门编程

卡码网刷题链接&#xff1a;98. 所有可达路径 一、题目简述 二、编程demo 方法①邻接矩阵 from collections import defaultdict #简历邻接矩阵 def build_graph(): n, m map(int,input().split()) graph [[0 for _ in range(n1)] for _ in range(n1)]for _ in range(m): …

Jackson库中JsonInclude的使用

简介 JsonInclude是 Jackson 库&#xff08;Java 中用于处理 JSON 数据的流行库&#xff09;中的一个注解。它用于控制在序列化 Java 对象为 JSON 时&#xff0c;哪些属性应该被包含在 JSON 输出中。这个注解提供了多种策略来决定属性的包含与否&#xff0c;帮助减少不必要的数…

鸿蒙学习自由流转与分布式运行环境-价值与架构定义(1)

文章目录 价值与架构定义1、价值2、架构定义 随着个人设备数量越来越多&#xff0c;跨多个设备间的交互将成为常态。基于传统 OS 开发跨设备交互的应用程序时&#xff0c;需要解决设备发现、设备认证、设备连接、数据同步等技术难题&#xff0c;不但开发成本高&#xff0c;还存…

【论文复现】融入模糊规则的宽度神经网络结构

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 融入模糊规则的宽度神经网络结构 论文概述创新点及贡献 算法流程讲解核心代码复现main.py文件FBLS.py文件 使用方法测试结果示例&#xff1a…

网上蛋糕售卖店管理系(Java+SpringBoot+MySQL)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装网上蛋糕售卖店管理系统软件来发挥其高效地信息处理的作用…

Vue.js基础——贼简单易懂!!(响应式 ref 和 reactive、v-on、v-show 和 v-if、v-for、v-bind)

Vue.js是一个渐进式JavaScript框架&#xff0c;用于构建用户界面。它专门设计用于Web应用程序&#xff0c;并专注于视图层。Vue允许开发人员创建可重用的组件&#xff0c;并轻松管理状态和数据绑定。它还提供了一个虚拟DOM系统&#xff0c;用于高效地渲染和重新渲染组件。Vue以…

从 0 到 1 掌握部署第一个 Web 应用到 Kubernetes 中

文章目录 前言构建一个 hello world web 应用项目结构项目核心文件启动项目 检查项目是否构建成功 容器化我们的应用编写 Dockerfile构建 docker 镜像推送 docker 镜像仓库 使用 labs.play-with-k8s.com 构建 Kubernetes 集群并部署应用构建 Kubernetes 集群环境编写部署文件 总…

数据结构 【二叉树(上)】

谈到二叉树&#xff0c;先来谈谈树的概念。 1、树的概念及结构 树是一种非线性的数据结构&#xff0c;它的逻辑关系看起来像是一棵倒着的树&#xff0c;也就是说它是根在上&#xff0c;而叶子在下的&#xff0c; 在树这种数据结构中&#xff0c;最顶端的结点称为根结点。在树的…

Error: Invalid version flag: if 问题排查

问题描述&#xff1a; 国产化系统适配&#xff0c;arm架构的centos 在上面运行docker 启动后需要安装数据库 依赖perl 在yum install -y perl 时提示&#xff1a; “Error: Invalid version flag: if”

QML学习 —— 34、视频媒体播放器(附源码)

效果 说明 您可以单独使用MediaPlayer播放音频内容(如音频),也可以将其与VideoOutput结合使用以渲染视频。VideoOutput项支持未转换、拉伸和均匀缩放的视频演示。有关拉伸均匀缩放演示文稿的描述,请参见fillMode属性描述。 播放可能出错问题 出现的问题:      DirectS…

架构-微服务-服务网关

文章目录 前言一、网关介绍1. 什么是API网关2. 核心功能特性3. 解决方案 二、Gateway简介三、Gateway快速入门1. 基础版2. 增强版3. 简写版 四、Gateway核心架构1. 基本概念2. 执行流程 五、Gateway断言1. 内置路由断言工厂2. 自定义路由断言工厂 六、过滤器1. 基本概念2. 局部…