【详述】
根据同步物化视图文档中的对比,同步优于异步的就是可以做到数据同步更新
但是在异步物化视图文档中写的三种更新方案中 REFRESH ASYNC也是可以做到基表变动,视图同步变动的,实际简单测试了一下也是可以的(测试时候有一个很奇怪的问题导致不可以,所以判定是特殊情况)。
那么异步物化视图既可以同步更新数据,又可以多表关联,岂不是完全可以覆盖同步的功能了
【详述】
但是在异步物化视图文档中写的三种更新方案中 REFRESH ASYNC也是可以做到基表变动,视图同步变动的,实际简单测试了一下也是可以的(测试时候有一个很奇怪的问题导致不可以,所以判定是特殊情况)。
那么异步物化视图既可以同步更新数据,又可以多表关联,岂不是完全可以覆盖同步的功能了
简单来说,同步物化视图是单表的,数据同步更新,维护代价小。异步物化视图是多表的,数据异步刷新,因为刷新的有一些代价,所以也需要根据场景来判断最适合的
单表的应用场景比较局限,大部分还是多表的,有没有一份文档说明了异步实时刷新的性能瓶颈或者数据量,数据逻辑要求。以及异步的大致原理(增量,全量等)
顶顶顶,求大佬解惑
异步物化视图按照设置的刷新规则进行刷新,对于创建具有分区的异步物化视图,目前可以做到分区级别的增量刷新,不分区的异步物化视图每次是全量刷新。具体参考官方文档https://docs.starrocks.io/zh/docs/using_starrocks/usage/create/
目前异步物化视图的刷新主要通过 insert overwrite select 来实现,使用 REFRESH ASYNC 基表每次变动物化视图就刷新一次,如果异步物化视图没有设置分区或者单个分区数据量很大,当基表实时导入频繁变动,那么就会频繁触发物化视图刷新,刷新任务压力会很大,基表实时导入数据量大的场景推荐使用 ASYNC [START (<start_time>)] EVERY(INTERVAL <interval>)
: 定时刷新模式 或 MANUAL
: 手动刷新模式
顶顶顶
多少次变动就会触发多少次刷新任务,刷新任务会进行排队,前一个任务刷新完成后,如果检测到该物化视图排队了很多个刷新任务,会将多个刷新任务整合 做一次刷新
集群上还会有其他的写入查询任务,一般不会只做物化视图的刷新,所以硬件配置不好评估,需要根据集群负载去判断,可以参考集群的cpu 内存 磁盘io util 等的负载情况
从相关源码来看,社区似乎是打算在同步物化视图的相关接口基础上(CreateMaterializedViewStmt),另开一个新的异步物化视图调用入口(CreateMaterializedViewStatement),用于最终兼容和替换同步物化视图:
七猫的实践分享也提到了两者的区别,同步物化视图本质上并不是像其他计算引擎那样的物理表,而是一种索引,所以和主键表是互斥的,而异步物化视图实际生成额外的物理表更符合业界对此的定义: