成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

StarRocks 物化視圖創建與刷新全流程解析

開發 前端
最近在為 StarRocks 的物化視圖增加多表達式支持[1]的能力,于是便把物化視圖(MV)的創建刷新流程完成的捋了一遍。

最近在為 StarRocks 的物化視圖增加多表達式支持[1]的能力,于是便把物化視圖(MV)的創建刷新流程完成的捋了一遍。

這次從頭開始,從 MV 的創建開始來看看 StarRocks 是如何管理物化視圖的。

創建物化視圖

CREATE
MATERIALIZED VIEW mv_test99
REFRESH ASYNC EVERY(INTERVAL 60 MINUTE)
PARTITION BY p_time
PROPERTIES (
"partition_refresh_number" = "1"
)
AS
select date_trunc("day", a.datekey) as p_time, sum(a.v1) as value
from par_tbl1 a
group by p_time, a.item_id

創建物化視圖的時候首先會進入這個函數:com.starrocks.sql.analyzer.MaterializedViewAnalyzer.MaterializedViewAnalyzerVisitor#visitCreateMaterializedViewStatement

圖片圖片

其實就是將我們的創建語句結構化為一個 CreateMaterializedViewStatement 對象,這個過程是使用 ANTLR 實現的。

這個函數負責對創建物化視圖的 SQL 語句進行語義分析、和基本的校驗。

比如:

? 分區表達式是否正確

? 基表、數據庫這些的格是否正確

圖片圖片

校驗分區分區表達式的各種信息。

然后會進入函數:com.starrocks.server.LocalMetastore#createMaterializedView()

這個函數的主要作用如下:

1. 檢查數據庫和物化視圖是否存在

2. 初始化物化視圖的基本信息

? 獲取物化視圖的列定義(schema)

? 驗證列定義的合法性

? 初始化物化視圖的屬性(如分區信息)。

3. 處理刷新策略

? 根據刷新類型(如 ASYNCSYNCMANUAL 或 INCREMENTAL)設置刷新方案。

? 對于異步刷新,設置刷新間隔、開始時間等,并進行參數校驗。

4. 創建物化視圖對象

? 根據運行模式(存算分離和存算一體)創建不同類型的物化視圖對象

? 設置物化視圖的索引、排序鍵、注釋、基礎表信息等。

5. 處理分區邏輯

? 如果物化視圖是非分區的,創建單一分區并設置相關屬性。

? 如果是分區的,解析分區表達式并生成分區映射關系

6. 綁定存儲卷

? 如果物化視圖是云原生類型,綁定存儲卷。

圖片圖片

序列化關鍵數據

對于一些核心數據,比如分區表達式、原始的創建 SQL 等,需要再重啟的時候可以再次加載到內存里供后續使用時;

就需要將這些數據序列化到元數據里。

這些數據定期保存在fe/meta目錄中。

圖片圖片

我們需要序列化的字段需要使用 @SerializedName注解。

@SerializedName(value = "partitionExprMaps")  
private Map<ExpressionSerializedObject, ExpressionSerializedObject> serializedPartitionExprMaps;

同時在 com.starrocks.catalog.MaterializedView#gsonPreProcess/gsonPostProcess 這兩個函數中將數據序列化和反序列化。

元數據的同步與加載

當 StarRocks 的 FE 集群部署時,會由 leader 的 FE 啟動一個 checkpoint 線程,定時掃描當前的元數據是否需要生成一個 image.${JournalId} 的文件。

圖片圖片

其實就是判斷當前日志數量是否達到上限(默認是 5w)生成一次。

具體的流程如下:

圖片圖片

圖片圖片

更多元數據同步和加載流程可以查看我之前的文章:深入理解 StarRocks 的元數據管理[3]

刷新物化視圖

創建完成后會立即觸發一次 MV 的刷新邏輯。

同步分區

圖片圖片

刷新 MV 的時候有一個很重要的步驟:同步 MV 和基表的分區

這個步驟在每次刷新的時候都會做,只是如果基表分區和 MV 相比沒有變化的話就會跳過。

這里我們以常用的 Range 分區為例,核心的函數為:com.starrocks.scheduler.mv.MVPCTRefreshRangePartitioner#syncAddOrDropPartitions

它的主要作用是同步物化視圖的分區,添加、刪除分區來保持 MV 的分區與基礎表的分區一致;核心流程:

1. 計算分區差異:根據指定的分區范圍,計算物化視圖與基礎表之間的分區差異。

2. 同步分區:

刪除舊分區:刪除物化視圖中與基礎表不再匹配的分區。

添加新分區:根據計算出的差異,添加新的分區到物化視圖。

圖片圖片

分區同步完成之后就可以計算需要刷新的分區了:

image.pngimage.png

以上內容再結合之前的兩篇文章:

StarRocks 物化視圖刷新流程和原理[4]

深入理解 StarRocks 的元數據管理[5]

就可以將整個物化視圖的創建與刷新的核心流程掌握了。

引用鏈接

[1] 多表達式支持: https://github.com/StarRocks/starrocks/pull/60035

[2] StarRocks 物化視圖刷新流程和原理: https://crossoverjie.top/2024/11/18/ob/StarRocks-MV-refresh-Principle/

[3] 深入理解 StarRocks 的元數據管理: https://crossoverjie.top/2024/11/11/ob/StarRocks-meta/

[4] StarRocks 物化視圖刷新流程和原理: https://crossoverjie.top/2024/11/18/ob/StarRocks-MV-refresh-Principle/

[5] 深入理解 StarRocks 的元數據管理: https://crossoverjie.top/2024/11/11/ob/StarRocks-meta/



責任編輯:武曉燕 來源: crossoverJie
相關推薦

2024-11-19 08:09:09

MySQL數據庫數據

2023-09-18 07:23:45

2010-11-19 10:11:49

Oracle物化視圖

2010-05-04 10:20:17

Oracle物化視圖

2009-11-17 15:59:25

Oracle物化視圖

2024-04-17 07:21:52

物化視圖查詢加速器數據倉庫

2009-11-17 16:47:09

Oracle物化視圖日

2009-05-06 11:09:10

Oracle物化視圖數據庫

2025-05-28 08:35:00

Nacos服務訂閱流程開發

2010-07-30 17:46:46

DB2物化視圖

2010-08-02 13:25:23

DB2物化視圖

2025-06-03 08:25:00

Nacos開發服務

2010-08-20 13:33:50

DB2物化視圖

2024-01-29 08:20:03

物化視圖StarRocksOLAP系統

2010-11-02 11:56:36

DB2物化視圖

2025-02-21 14:47:15

2018-11-28 15:15:52

大數據AI安防

2010-08-19 17:17:08

DB2數據庫

2010-07-27 14:26:08

DB2數據庫物化視圖

2022-01-13 17:24:04

SpringBootYml監聽器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人一级视频 | 国产精品久久久久久久久久久久久 | 国产精品久久午夜夜伦鲁鲁 | 久久免费电影 | 国产日韩精品在线 | 中国美女一级黄色片 | 免费不卡av| 婷婷色婷婷| 精品视频久久久久久 | 三级国产三级在线 | 国产亚洲一区在线 | 精品av| 国产精品美女久久久久久免费 | 欧洲视频一区二区 | 亚洲顶级毛片 | 手机在线一区二区三区 | 男女污网站 | 一级在线观看 | 久久久久国产一区二区三区 | 久久蜜桃资源一区二区老牛 | 五月花丁香婷婷 | 久久综合一区 | 色橹橹欧美在线观看视频高清 | 久久伊| 福利社午夜影院 | 亚洲成人一二三 | 国产综合精品一区二区三区 | 欧美日韩国产精品一区 | 久久久久国产精品一区二区 | 亚洲视频中文字幕 | 免费黄色成人 | 中文区中文字幕免费看 | 亚洲精品欧洲 | 久久青 | 在线精品观看 | 久久精品二区 | 国产日韩精品视频 | 久久r久久| 免费在线观看黄色av | 欧美精品一区二区三区在线播放 | 男女视频在线免费观看 |