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

纺织网站制作123纺织网网络营销的常用工具

纺织网站制作123纺织网,网络营销的常用工具,磁县网站推广,站长工具欧美高清背景 本司在用Starrocks做一些业务上的分析的时候,用到了物化视图,并且在高QPS的情况下,RT也没有很大的波动,所以在此研究一下Starrock的实现,以及在刷新的时候是不是原子性的 本文基于Starrocks 3.3.5 结论 Starro…

背景

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

结论

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

分析

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

物化视图的创建

直接到 Starrocks.g4

createMaterializedViewStatement

这里会用 AstBuilder.visitCreateMaterializedViewStatement 生成 CreateMaterializedViewStatementMaterializedViewAnalyzer.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方法:

 @Overridepublic void createMaterializedView(CreateMaterializedViewStatement stmt)throws DdlException {// check mv exists,name must be different from view/mv/table which exists in metadataString 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在执行阶段是互斥的,并且只有在元数据操纵期间才会加锁,数据写入阶段是不会加锁的,所以速度是很快的。

http://www.dtcms.com/wzjs/224122.html

相关文章:

  • 怎么获取免费的网站域名2023年12月疫情又开始了吗
  • 湛江建设网站提高seo关键词排名
  • 永州市住房和城乡建设厅网站提高网站流量的软文案例
  • 最近新闻有哪些优化建站seo门户
  • 南山网站建设微信营销策略
  • 网站怎么做站群google本地搜索
  • 微网站建设找哪家公司怎么做公司网站
  • 合法购物网站建设app软件下载站seo教程
  • 优秀网站页面设计图片全球搜索引擎排名2021
  • 重庆平台网站建设费用石家庄seo管理
  • 公司网站文案推广怎么做市场调研报告模板
  • 做侵权电影网站什么后果南京百度竞价推广公司排名
  • qt 网站开发五八精准恶意点击软件
  • 网站做不做双解析怎么快速刷排名
  • 柳州做网站的天津网站建设开发
  • 男人最爱上的做网站好用的搜索引擎
  • 梅州市建设培训中心网站创建网址快捷方式
  • 做网站设计的价格登录百度
  • 广州淘宝网站建设网站建设运营
  • 网站建设优化服务渠道百度搜索排名怎么收费
  • 网站建设设计logo站长seo综合查询工具
  • 南山做网站哪家专业惠州网络推广
  • 中文域名可以做网站吗天津提升专业关键词排名
  • 做教师章节试题哪个网站深圳网络营销推广
  • wordpress完全开源吗刷seo快速排名
  • 手机网站 免费建站阿里云搜索
  • 开发一个手机app多少钱搜索引擎优化通常要注意的问题有
  • 上上上海网站设计bt磁力王
  • 鹤岗网站建设湖北网络推广有限公司
  • 女性手表网站铜川网络推广