全部產品
Search
文件中心

PolarDB:UNI_HASH

更新時間:Jul 06, 2024

本文將介紹UNI_HASH的使用方式。

注意事項

UNI_HASH演算法是簡單模數,要求拆分列的值的自身分布均衡才能保證雜湊均衡。

使用限制

  • 拆分鍵的資料類型必須是整數類型或字串類型。
  • PolarDB-X 1.0執行個體的版本需為5.1.28-1508068或以上。

路由方式

UNI_HASH主要用於以下情境:

  • 使用UNI_HASH分庫時,根據分庫鍵的索引值直接按分庫數取餘。如果索引值是字串,則字串會被計算成雜湊值再進行計算,完成路由計算,例如HASH('8')等價於8 % D(D 是分庫數目)。
  • 分庫和分表都使用同一個拆分鍵進行UNI_HASH時,先根據分庫鍵索引值按分庫數取餘,再均勻散布到該分庫的各個分表上。

使用情境

  • 適合於需要按使用者ID或訂單ID進行分庫的情境。
  • 適合於拆分鍵是整數或字串類型的情境。
  • 兩張邏輯表需要根據同一個拆分鍵進行分庫,兩張表的分表數不同,又經常會按該拆分鍵進行JOIN的情境。

使用樣本

假設需要對ID列按UNI_HASH函數進行分庫分表,每庫包含4張表,則您可以使用如下DDL語句進行建表 :

create table test_hash_tb (
    id int,
    name varchar(30) DEFAULT NULL,  
    create_time datetime DEFAULT NULL,
    primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by UNI_HASH(ID)
tbpartition by UNI_HASH(ID) tbpartitions 4;

與HASH的比較

對比情境UNI_HASHHASH
分庫不分表。此時兩個函數的路由方式一樣,都是根據分庫鍵的索引值按分庫數取餘。
使用同一個拆分鍵進行分庫分表。同一個索引值分到的分庫的路由結果不會隨著分表數的變化而改變。同一個索引值分到的分庫會隨著分表數的變化而改變。
兩張邏輯表需要根據同一個拆分鍵進行分庫分表,但分表數不同。當兩張表按該拆分鍵進行JOIN時,不會出現跨庫JOIN的情況。 當兩張表按該拆分鍵進行JOIN時,會出現跨庫JOIN的情況。