分區類型介紹
PolarDB-X資料庫提供了多種不同類型的分區策略,用於資料庫控制如何將資料放入分區, 包括以下幾種:
Hash類型的分區策略
HASH(相容社區MySQL的HASH分區文法)
KEY(相容社區MySQL的KEY分區文法)
Range類型的分區策略
RANGE(相容社區MySQL的RANGE分區文法)
RANGE COLUMNS(相容社區MySQL的RANGE COLUMNS分區文法)
List類型的分區策略
LIST(相容社區MySQL的LIST分區文法)
LIST COLUMNS(相容社區MySQL的LIST COLUMNS分區文法)
特定情境的分區策略
CO_HASH(PolardDB-X 的特色分區文法)
Hash類型
基於使用者指定的分區列或分區函數運算式的值,使用內建的一致性雜湊演算法計算其雜湊值並進行分區路由的策略。按是否支援使用分區函數運算式或使用多個分區列作為分區鍵,Hash分區策略又可以細分為Key分區和Hash分區兩種分區策略。
表 1. Key分區策略與Hash分區策略對比
分區策略 | 分區鍵支援 | 是否支援分區函數 | 文法樣本 | 特點與限制 | 路由描述(點查) |
Key(預設的分區策略) | 單列分區鍵 | 否 | PARTITION BY KEY(c1) |
|
|
向量分區鍵 | 否 | PARTITION BY KEY(c1,c2,...,cn) |
|
| |
Hash | 單列分區鍵 | 否 | PARTITION BY HASH(c1) |
| PARTITION BY HASH(c1)與PARTITION BY KEY(c1)完全等同 ,其路由演算法與PARTITION BY KEY(c1)完全一致。 |
是 | PARTITION BY HASH(YEAR(c1)) |
| |||
向量分區鍵 | 否 | PARTITIONBY HASH(c1,c2,...,cn) |
|
|
Range類型
基於使用者指定的分區列或分區函數運算式的值,通過比較計算來確定資料位元於哪些預定義分區的範圍並進行分區路由的策略。按是否支援使用分區函數運算式或使用多個分區列作為分區鍵,Range分區策略又可以細分為Range Columns分區和Range分區兩種分區策略。
表 2. Range Columns分區策略與Range分區策略對比
分區策略 | 分區鍵支援 | 是否支援分區函數 | 文法樣本 | 特點與限制 | 路由描述(點查) |
Range Columns | 單列分區鍵& 向量分區鍵 | 否 | PARTITION BY RANGE COLUMNS (c1,c2,...,cn) ( PARTITION p1 VALUES LESS THAN (1,10,...,1000), PARTITION p2 VALUES LESS THAN (2,20,...,2000) ...) | 支援熱點分裂(例如c1有熱點值88,可以使用c2進行分區分裂解決熱點)。 |
|
Range | 單列分區鍵 | 是 | PARTITION BY RANGE(YEAR(c1)) ( PARTITION p1 VALUES LESS THAN (2019), PARTITION p2 VALUES LESS THAN (2021) ...) |
|
|
List類型
與Range分區策略類似,基於使用者指定的分區列或分區函數運算式的值,通過比較計算來確定資料位元於哪些預定義分區的取值集合并進行分區路由的策略。按是否多個分區列作為分區鍵以及其使用方式的不同,List類型也分為List Columns分區和List分區兩種分區策略。
表 3. List Columns分區策略與List分區策略對比
分區策略 | 分區鍵支援 | 是否支援分區函數 | 文法樣本 | 特點與限制 | 路由描述(點查) |
List Columns | 單列分區鍵& 向量分區鍵 | 否 | PARTITION BY LIST COLUMNS (c1,c2,...,cn) ( PARTITION p1 VALUES IN ((1,10,...,1000),(2,20,...,2000) ), PARTITION p2 VALUES IN ((3,30,...,3000),(3,30,...,3000) ), ...) | 不支援熱點分裂 |
|
List | 單列分區鍵 | 是 | PARTITION BY LIST(YEAR(c1)) ( PARTITION p1 VALUES IN (2018,2019), PARTITION p2 VALUES IN (2020,2021) ...) | 不支援熱點分裂。 |
CoHash類型
PolarDB-X還針對比較常見的特定的應用情境新擴充了一種新的名為CoHash的雜湊分割策略,該策略可有效解決一個表需要同時按多個不同的相互有協同關係的分區列進行水平資料分割的問題。
由於CoHash分區策略與前面的Hash/Key分區策略有些類似,以下是它們的一些主要用法異同的對比。
表 4. 與Hash/Key分區策略的主要區別
主要區別點 | CO_HASH | KEY | Hash |
文法樣本 | PARTITION BY CO_HASH(c1, c2) PARTITOINS 8 | PARTITION BY KEY(c1, c2) PARTITOINS 8 | PARTITION BY HASH(c1, c2) PARTITOINS 8 |
單列分區鍵 | 不支援 | 支援 | 支援 |
向量分區鍵 | 支援 | 支援。 | 支援 |
向量分區列是否允許使用分區函數 | 允許。例如PARTITION BY CO_HASH( /*取c1列的後4位字元*/ RIGHT(c1, 4), /*取c2列的後4位字元*/ RIGHT(c2, 4) ) PARTITOINS 8 | 不允許 | 不允許 |
分區列之間的關係 | 協同關係。同一個的分區列取值的協同關係由業務提供並負責維護。例如:
| 類似聯合索引的首碼關係。 | 類似聯合索引的首碼關係。 |
首碼列等值查詢分區裁剪及樣本 | 支援。例如:
| 支援。例如:
| 不支援,必須帶上全分區列等值條件才支援分區裁剪。例如:
|
非首碼列等查詢分區裁剪及樣本 | 支援。所有分區列的等值條件均支援獨立的分區裁剪。例如:
| 不支援。非首碼分區等值條件必須全分區掃描。例如:
| 不支援。非首碼分區等值條件必須全分區掃描。例如:
|
範圍查詢 | 不支援。全分區掃描。 | 不支援。全分區掃描。 | 不支援。全分區掃描。 |
路由描述(點查) |
| 可參考前邊的“Key分區與Hash 分區”的描述,此處忽略。 | 可參考前邊的“Key分區與 Hash分區”的描述,此處忽略。 |
熱點分裂 | 不支援。無法對某個具體的熱點值(比如c1='88') 進行進一步熱點分裂 | 支援 | 不支援 |
分區管理(常見的分區分裂、合并與遷移等) | 支援 | 支援 | 支援 |
二級分區 | 支援 | 支援 | 支援 |