系統預置了若干種分片算法供庫表分片時使用。算法參數請參見設置分片規則的DDL語句的分片算法內容。
取模分片
定義
對分片鍵(整數)進行十進制求模,根據模值對應到不同分片。
適用條件:分片鍵必須是整數,分片鍵求余后的值均勻分布。
特點
分片鍵為自增型或隨機分布的整數時能保證數據的均勻分片。
算法簡單,性能高。
對多值、范圍的查詢支持較差(分散在不同的分片上)。
擴容時需要數據遷移。
較好的分散由時間、機構、id峰值帶來的數據熱點問題。
字符串HashCode取模分片
定義
字符串HashCode求模解析(PartitionByStringMod),對分片字段的值進行hashcode()計算并取其絕對值,然后根據配置的分片數量求模得到最終的分片。
特點
數據分布較不均勻。
如果hash算法較差,hash結果存在一定的幾率發生碰撞,絕對值計算增加了碰撞的概率。
其余特點同取模分片。
枚舉分片
定義
根據配置文件中枚舉的具體值(允許非數值)與分片號的對應關系和分片字段的值進行分片,當未找到對應分片時,進入到設定的默認分片。
特點
數據分布的均勻度取決于枚舉值對應的記錄是否分布均勻。
較好的支持多值、范圍的查詢。
易于擴容,正常情況下無需數據遷移。
時間范圍分片
定義
按照時間范圍進行分片,超過分片數量后從第一個分片再次循環分片。
特點
適用日志數據等按時間范圍進行存儲的數據。
枚舉分組取模分片
定義
枚舉+取模的組合分片方式,包含枚舉鍵和取模鍵兩個分片鍵,先通過枚舉鍵將數據分配到不同的分組,再在分組里通過取模鍵對應到具體的分片。
適用條件: 枚舉鍵可以是整數也可以是字符串,取模鍵必須是整數,取模鍵求余后的值均勻分布。如: 數據庫的數據需要按區域進行隔離,但隔離后的數據量依然巨大需要按取模方式進行再次分片,可以選擇此算法。
特點
支持枚舉鍵和取模鍵結合進行二次分片。
取模鍵為自增型或隨機分布的整數時能保證數據的均勻分片。
算法簡單,性能高。
對多值、范圍的查詢支持較差(分散在不同的分片上)。
擴容時需要數據遷移。
較好的分散一些時間、機構、id峰值帶來的數據熱點問題。
枚舉分組字符串HashCode取模分片
定義
枚舉+字符串HashCode取模的組合分片方式,包含枚舉鍵和取模鍵兩個分片鍵,先通過枚舉鍵將數據分配到不同的分組,再在分組里通過取模鍵對應到具體的分片。
適用條件:枚舉鍵可以是整數也可以是字符串,取模鍵是字符串,取模鍵字符串HashCode求余后的值均勻分布。如: 數據庫的數據需要按區域進行隔離,但隔離后的數據量依然巨大需要按取模方式進行再次分片,可以選擇此算法。
特點
支持枚舉鍵和字符串HashCode取模鍵結合進行二次分片。
算法簡單,性能高。
對多值、范圍的查詢支持較差(分散在不同的分片上)。
擴容時需要數據遷移。
較好的分散一些時間、機構、id峰值帶來的數據熱點問題。
數值類型Range分片算法
定義
該分片算法依據分片鍵的連續范圍劃分數據,將分片鍵的取值區間分割為不重疊的連續段,每個分片負責存儲單一區間內的數據。
每個分片對應的數值范圍可以通過設置分片算法時指定。
特點
基于HASH的分片規則,在面對諸如
a>10這樣的非等值規則時,只能在所有分片上進行廣播,導致查詢性能低下。而Range分片算法,可以通過計算非等值的條件對應的范圍,進行分片裁剪,減少非必要的數據節點(DataNode,簡稱DN)查詢,提高性能。以Range范圍為(1,10,max value)為例,如果SELECT語句中包含a<9,則對應的分片為前2個,執行查詢的時將不再關注第3個分片,可以減少DN查詢,有效提高性能。