日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文概述了分區表模塊的主要實現原理,便于用戶了解分區表在底層實現時的一些細節,從而能夠更好地學習如何去使用分區表。

分區表創建原理

分區表的創建主要涉及語法解析模塊和執行模塊。

語法解析模塊

分區表創建是分區表整個功能的核心部分,任何分區表都需要經過一個完整的語法樹創建出來,這個語法樹上包含了諸多分區表的特性,如下圖所示。

其中主要的關鍵字包括:

  • PARTITION BY:指定一級分區的類型和字段。

  • SUBPARTITION BY:指定二級分區的類型和字段。

  • INTERVAL:指定自動間隔分區的屬性。

  • SUBPARTITION TEMPLATE:子分區模板的屬性。

  • (PARTITION xxx): 子分區列表。

接收到用戶的輸入后,第一步是將語法樹轉換為數據庫中的Node節點。下圖詳細解釋了這個轉換的過程。

image.png

  1. 整個語法樹掛在了CreateStmt節點下,分區表本質上還是創建一張表的過程;

  2. partspec節點是一級分區管理節點,它承載了分區鍵和分區策略;

  3. PartitionInfo節點是二級的管理節點,承載了大部分語法樹上的結構。根據顏色我們可以大致將其分為如下幾個模塊,后續由這些模塊的結合來完成分區創建過程:

    • Interval分區模塊

    • 一級分區模塊

    • 二級子分區模塊

    • 分區模板模塊

    • 二級節點列表模塊

語法執行模塊

執行器根據步驟大致分為以下三個部分。

轉儲表定義存儲模塊

第一步是轉儲表定義存儲模塊。該模塊將未來創建子表可能的模板信息轉儲到表定義中去,為了能夠在表之后的使用中保留元信息。

將表定義存儲到表的Option結構上,包括這些數據需要存儲:

  • interval_expr:這個結構存儲間隔分區的間隔大小。

  • sub_part_strategy/sub_part_params:存儲二級分區的分區鍵和分區類型信息。

  • partition_template_list:存儲了模板分區列表,用于后續的子分區模塊分區的創建。

  • sub_hash_number:存儲了模板分區的HASH數量,用于后續構建出正確的HASH分區。

image.png

子表定義模塊

第二步為子表定義模塊。將創建信息切換成實際的創建列表。

  1. 將抽象的HASH分區/模塊分區生成實際的節點樹,用于創建后續的分區。

    說明
    • 對于一級分區表,通過hash_number生成partition_node_list,該列表實際會創建HASH分區表。

    • 對于二級分區表,通過template_list生成partition_node_list, 如果用戶定義了分區模板,需要生成該列表。

  2. 遍歷生成的partition_node_list,補充分區策略、分區鍵等分區表的關鍵信息。

  3. 如果判斷出sub_hash_number或者template_list不為空,說明節點還記錄了二級分區的屬性。需要將二級分區的這些屬性填入一級分區(或者生成的一級分區中),后續等待二級分區創建時遞歸處理。

image.png

實際創建模塊

第三步為實際創建模塊。將節點列表轉換成創建列表。

將之前用來代表子節點的PartitionRelNode節點轉換成CreateStmt節點,然后進行創建操作。

image.png

分區表管理原理

分區表管理是分區表另一個核心的組成部分,相比于普通表,分區表有更豐富的管理方式。

image.png

分區表的管理可以分為以下10個主要模塊:

  • MODIFY:管理分區,是一類操作的集合,對象是一個一級分區,可以通過該指令管理這個分區下的二級分區。

  • MOVE:移動分區,通常是移動其存儲位置。

  • ADD:增加分區,為分區表增加一個一級分區。

  • COLESCE:裁剪分區,只用于HASH分區,該命令使得HASH分區的數量減一。

  • DROP:刪除分區,可以指定刪除掉一個RANGE/LIST分區。

  • RENAME:為分區重命名。

  • TRUNCATE:重整分區,將整個分區清空。

  • SPLIT:拆分分區,用于RANGE/LIST分區,將一個分區拆分為兩個分區,可以指定一個分區屆作為拆分的界限。

  • MERGE:歸并分區,用于RANGE/LIST分區,將兩個分區歸并為一個分區。

  • EXCHANGE:交換分區,交換兩個分區的內容,需要通過分區的界限檢查。