Starrocks 物化视图的实现以及在刷新期间能否读数据

第6.2 章:StarRocks查询加速——视图和物化视图 第2.6章:StarRocks查询加速--视图和物化视图 阅读详情

背景

本司在用Starrocks做一些业务上的分析的时候,用到了物化视图,并且在高QPS的情况下,RT也没有很大的波动,所以在此研究一下Starrock的实现,以及在刷新的时候是不是原子性的
本文基于Starrocks 3.3.5

结论

Starrocks的物化视图的更新是通过Insert Overwrite的方式实现的,在执行该SQL期间,会新建临时分区并进行替换,最后在替换分区的时候,会进行表加锁操作,所以说物化视图不存在读不到数据的情况。

分析

这里我们只关心主流程,其他的细节直接跳过

物化视图的创建

直接到 Starrocks.g4

createMaterializedViewStatement

这里会用 AstBuilder.visitCreateMaterializedViewStatement 生成 CreateMaterializedViewStatement和MaterializedViewAnalyzer.visitCreateMaterializedViewStatement 方法进行物化视图的解析,主要是解析里面的SQL,并生成物理计划,
之后再走到StmtExecutor.handleDdlStmt 方法:

    private void handleDdlStmt() throws DdlException {
        try {
            ShowResultSet resultSet = DDLStmtExecutor.execute(parsedStmt, context);
            if (resultSet == null) {
                context.getState().setOk();
            } else {

最后会走到LoaclMetaStore.createMaterializedView方法:

 @Override
    public void createMaterializedView(CreateMaterializedViewStatement stmt)
            throws DdlException {
        // check mv exists,name must be different from view/mv/table which exists in metadata
        String mvName = stmt.getTableName().getTbl();
        String dbName = stmt.getTableName().getDb();
        。。。
        createTaskForMaterializedView(dbName, materializedView, optHints);

这个createTaskForMaterializedView方法

  • 有个Task task = TaskBuilder.buildMvTask(materializedView, dbName);方法:
 public static Task buildMvTask(MaterializedView materializedView, String dbName) {
        Task task = new Task(getMvTaskName(materializedView.getId()));
        ...
        task.setDefinition(materializedView.getTaskDefinition());
        task.setPostRun(getAnalyzeMVStmt(materializedView.getName()));
        task.setExpireTime(0L);
        if (ConnectContext.get() != null) {
            task.setCreateUser(ConnectContext.get().getCurrentUserIdentity().getUser());
            task.setUserIdentity(ConnectContext.get().getCurrentUserIdentity());
        }
        handleSpecialTaskProperties(task);
        return task;
    }

其中 materializedView.getTaskDefinition 代码如下:

    public String getTaskDefinition() {
        return String.format("insert overwrite `%s` %s", getName(), getViewDefineSql());
    }

可以看到这里是insert overwrite的方式.

  • 与此同时,createTaskForMaterializedView还调用TaskManager.createTask方法用来周期性的调度任务

物化视图的执行

上面看到物化视图的执行是通过Insert overwrite的方式实现的,所以
直接找到Starrocks.g4:

insertStatement

通过AstBuilder.visitInsertStatement解析,解析为InsertStmt,最后会转到StmtExecutor.handleDMLStmtWithProfile:

handleDMLStmt
 ||
 \/
handleInsertOverwrite
 ||
 \/
InsertOverwriteJobMgr.executeJob
 ||
 \/
InsertOverwriteJobRunner.run()
 ||
 \/
InsertOverwriteJobRunner.doLoad()

InsertOverwriteJobRunner.doLoad() 方法如下:

        Preconditions.checkState(job.getJobState() == InsertOverwriteJobState.OVERWRITE_RUNNING);
        createTempPartitions();
        prepareInsert();
        executeInsert();
        doCommit(false);
        transferTo(InsertOverwriteJobState.OVERWRITE_SUCCESS);

  • createTempPartitions(); 这个主要创建临时分区。
  • prepareInsert/executeInsert 这里主要是进行临时分区的数据写入
  • doCommit 这会进行分区的替换
         Locker locker = new Locker();
         if (!locker.lockDatabaseAndCheckExist(db, tableId, LockType.WRITE)) {
             throw new DmlException("insert overwrite commit failed because locking db:%s failed", dbId);
         }
         ...
         targetTable.replacePartition(sourcePartitionNames.get(0), tmpPartitionNames.get(0));
         ...
         } finally {
             locker.unLockDatabase(db, tableId, LockType.WRITE);
         }
    
    不同于之前的数据写入操作,这里会进行锁表的操作,也就是在这期间读写是有互斥的,并且这里面分区(非分区表其实也是有单个分区的存在)的替换都是内存操作,所以会很快。

所以从实现来说,insert overwrite在执行阶段是互斥的,并且只有在元数据操纵期间才会加锁,数据写入阶段是不会加锁的,所以速度是很快的。

Starrocks异步物化视图的使用以及注意事项 最近在使用starrocks来进行实时数据项目的开发,尝试使用了一下starrocks的异步物化视图。使用版本: 3.1.2-4f3a2ee创建完成后,数据会进行初始化计算。 阅读详情

相关推荐

实时数仓的另一种构建方法starRocks的物化视图

通过创建物化视图,可以将原始数据汇总、摘要,以适应不同层次和粒度的分析需求,从而提高查询的灵活性和效率。

科学的N次方 750

StarRocks物化视图

StarRocks物化视图

bale_的博客 4489

【StarRocks】-- 异步物化视图实战

StarRocks异步物化视图(AsyncMV)实战指南摘要 本文深度解析StarRocks异步物化视图的核心概念与应用实践。AsyncMV通过预计算实现查询加速,支持多表Join、外部Catalog(Hive/Iceberg等)和复杂聚合场景。关键特性包括: 异步刷新机制:支持手动/定时刷新,增量与全量更新策略 智能查询改写:优化器自动匹配业务SQL实现透明加速 分层架构设计:适用于数仓分层、数据湖加速等典型场景 最佳实践建议:优先为高频重查询创建MV,采用时间分区优化性能,合理设置刷新策略与资源配额,并

欢迎来到我的博客,一起探索代码里的世界! 571

第2.8章:StarRocks表设计--物化视图

StarRocks的物化视图对用户是隐式的,当我们查询时,并不需要感知物化视图的存在,也不必显式的指定物化视图的名称,查询优化器会根据查询条件自动判断是否可以路由到相应的物化视图并选择最佳的MVs表,然后重写查询计划进行最优查询。补充几个概念,我们将table1-table11这样的OLAP表称为Base表(或基表),基于Base表我们可以创建物化视图表(MVs表),物化视图的数据组织形式(分区、分桶、存储等)和Base表相同,但物化视图拥有单独的前缀索引。5、单表上过多的物化视图会影响导入的效率。

wr_java的博客 1457

10BASE-T1S协议中的PLCA机制:实现无碰撞网络传输的关键

本文深入解析了10BASE-T1S协议中的PLCA(物理层冲突避免)机制。作为IEEE 802.3cg标准的关键部分,PLCA通过循环调度与机会传递,从根源上避免了网络碰撞,为工业与汽车等场景提供了确定性的低延迟传输保障,是实现可靠实时通信的核心技术。

weixin_29250403的博客 209

黑马程序员Pink的javaScript课程APIday4

本文摘要:介绍了JavaScript中日期对象的实例化方法(有参/无参)及三种获取时间戳的方式。讲解了DOM节点操作,包括节点查找(父、子、兄弟节点)、增加/克隆/删除节点的方法。详细说明了移动端touch事件和Swiper插件的使用,包括自动播放和小圆点配置。最后提及学成在线案例中表单验证和取消默认跳转的实现。

JLY19970726的博客 825

StarRocks 学习指南

StarRocks 学习指南

姜穆澜的博客 474

【AI Infra】Perfetto性能分析工具指南

Perfetto是一款开源性能分析工具,提供系统级和应用级的活动数据追踪功能。其界面分为四个区域:左侧操作区(包含Trace查看、SQL查询、预置分析等功能)、上方信息区、中间图形化展示区以及下方详细信息区。工具支持快捷键操作(w/s缩放、a/d移动、m标记等),并能高效处理大体积Trace文件。通过Timeline分析可发现性能瓶颈,如案例中update_actor耗时过高的问题,最终定位到CPU offloading导致的MemcpyH2D操作耗时过长,提出了优化方案。Perfetto相比Systrac

baiweizeng的博客 1503

【大数据】StarRocks的同步物化视图怎么用呢

StarRocks 中的同步物化视图,是对于基表的数据变更自动同步更新到物化视图中,且无需手动调用刷新命令。目前仅能基于 Default Catalog 中的单个基表创建,是一种特殊的查询加速索引。同步物化视图的管理成本和更新成本都比较低,适合实时场景下单表聚合查询的透明加速。

像风走过八千里 1255

星宸科技SSD20x/SSD21X应用层DEMO实战指南:从入门到深度定制

本文详细介绍了星宸科技SSD20x/SSD21X系列芯片的应用层DEMO开发实战,从基础环境搭建到深度定制开发。内容涵盖DEMO资源获取、核心功能实现、第三方库集成以及性能优化技巧,帮助开发者快速掌握智能显示和多媒体处理应用的开发方法。特别适合嵌入式开发者在智能家居、工业控制等场景中应用。

weixin_42524226的博客 267

ArcGIS Pro 制作这种地图海报

ArcMap 版本与 ArcGIS Pro 版本的制图功能相差太多,无论从美观上还是制图效率都远远优于 ArcMap,用了一段时间的 ArcGIS Pro ,真心推荐有条件的大家赶紧试一试!一个软件也能搞定一张不错的海报哦!----吐槽:好的设计真的是门花时间的活,这个教程大概花了我7小时左右,我都忘了我自己教程中截图多少张了!(可能是我速度太慢了)测试数据:阿里云盘分享-----北极海冰数据.https://www.aliyundrive.com/s/SUhsnqfkmXh。

J_Giser的博客 1427

StarRocks的物化视图

物化视图是在基表之上构建的查询逻辑并将结果持久化存储。在 StarRocks 中,物化视图对于用户是透明的,即用户发起查询的时候不需要指定物化视图的名称,而是直接查询基表,StarRocks 会决定是否从物化视图读取数据。

jinahong101的博客 1505

使用Clumsy和Process Explorer定位软件高CPU占用问题

使用弱网模拟工具Clumsy和进程查看工具Process Explorer定位软件高CPU占用问题。

dvlinker的技术专栏 5706

StarRocks 物化视图刷新流程和原理

前段时间给 StarRocks 的物化视图新增了一个特性,那也是我第一次接触 StarRocks,因为完全不熟悉这个数据库,所以很多东西都是从头开始了解概念。为了能顺利的新增这个特性(具体内容可以见后文),我需要把整个物化视图的流程串联一遍,于是便有了这篇文章。在开始之前简单了解下物化视图的基本概念:image.png简单来说,视图和 MySQL 这类传统数据库的概念类似,也是用于解决大量消耗性能...

crossoverJie专栏 1794

【YOLO26科研级突破】集成BiFPN双向特征金字塔,让多尺度特征融合效率与精度双跃升

打开确保模型解析器能识别BiFPN模块。通过将BiFPN双向特征金字塔集成到YOLO26中,我们实现了一个“全尺度双向特征流动+加权融合+精准检测”的目标检测模型。这个改进不仅在工程上能大幅提升多尺度、复杂场景下的检测精度,更在科研上提供了“双向特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的Neck模块改进中,帮你在论文中打造独特的研究点。

LXY_LOVE36的博客 199

VS Code 重大更新:Agent Skills完美支持!

代码不会骗人,但你的 LLM 可能会编个故事——除非你给它一本《技能手册》。——某位深夜调试成功的 Go 工程师。

weixin_44058951的博客 3458

第2.7章:StarRocks表设计--视图

StarRocks中最主要的OLAP类型的表设计咱们前面已经梳理完了,除此之外,StarRocks中还涉及到了一些与表设计相关的内容,我们也一并进行展开。首先,咱们来简单说一下视图功能。 1视图定义 StarRocks也拥有视图功能,且其与MySQL中的视图概念及语法非常类似。StarRocks中的视图也是一种虚拟存在的表,其行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。 2视图优势 视图的优势主要有: 1)重用sql语句; 2)简化

流木的博客 3110

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

全面理解Starrocks3.0

StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。StarRocks 架构简洁,采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品。

SunnyRivers 2004

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

StarRocks 物化视图创建与刷新全流程解析

最近在为 StarRocks 的物化视图增加的能力,于是便把物化视图(MV)的创建刷新流程完成的捋了一遍。,主要分析了刷新的流程,以及刷新的条件。这次从头开始,从 MV 的创建开始来看看 StarRocks 是如何管理物化视图的。

weixin_36907240的博客 243

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

StarRocks 技术内幕 | 多表物化视图的设计与实现

本文先介绍物化视图的一些需求分析,看看现在的物化视图哪些地方做得好、哪些地方做得不好,然后再针对这些需求进行设计。然后再讲一下具体的实现原理,最后再讲一下 StarRocks 2.5 版本的物化视图还会开发哪些功能。

StarRocks的博客 1915

StarRocks智能物化视图:实时数据分析的利器

StarRocks的智能物化视图(Materialized View)是一种强大的数据预计算技术,通过预先计算和存储查询结果来显著提升查询性能。与普通视图不同,物化视图实际存储数据,并在基表数据变化时自动或手动更新,为实时数据分析提供强有力的支持。它采用列式存储、高效压缩和智能索引技术,支持多种刷新策略和查询重写机制,能够在复杂的数据分析场景中提供卓越的性能和可靠性。 ## 物化视图概念与工作...

gitblog_00096的博客 654

【Starrocks + Hive 】BitMap + 物化视图 实战记录

一文搞定 starrocks bitmap+物化视图提速

weixin_39750695的博客 1012

StarRocks分区操作

StarRocks分区表的操作

weixin_42278668的博客 1269
上一篇: Starrocks 怎么计算各个算子的统计信息
下一篇: Starrocks中RoaringBitmap杂谈
鸿乃江边鸟
博客等级 码龄6年 3746粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值