Topik ini menjelaskan penggunaan fungsi HASH.
Deskripsi
- Jika fungsi HASH menggunakan kunci shard yang berbeda untuk sharding database dan tabel, nilai dari kunci shard database dibagi dengan jumlah shard database untuk mendapatkan sisa hasil bagi di mana data dipartisi. Jika nilai kuncinya adalah string, string tersebut pertama-tama dikonversi menjadi nilai hash lalu digunakan untuk perhitungan rute.
Sebagai contoh, HASH(8) setara dengan 8%D. D menentukan jumlah shard database. HASH("ABC") setara dengan hashcode("ABC").abs()%D. D menentukan jumlah shard database ke dalam data dipartisi.
- Jika fungsi HASH menggunakan kunci shard yang sama untuk sharding database dan tabel, nilai dari kunci shard dibagi dengan jumlah total shard tabel untuk mendapatkan sisa hasil bagi.
Sebagai contoh, dua shard database dibuat. Setiap shard database memiliki empat shard tabel. Shard database 0 menyimpan Shard tabel 0 hingga 3 dan Shard database 1 menyimpan Shard tabel 4 hingga 7. Jika nilai kunci adalah 15, rekaman untuk nilai kunci 15 didistribusikan ke Shard tabel 7 di Shard database 1 berdasarkan persamaan berikut: 15 % (2 * 4) = 7.
Perhatian
Keluaran dari fungsi HASH dapat didistribusikan secara merata hanya ketika nilai-nilai dalam kolom kunci shard didistribusikan secara merata.
Batasan
- Kunci shard harus bertipe INTEGER atau STRING.
- Kunci shard bertipe STRING bersifat peka huruf besar/kecil saat routing data dilakukan.
Skenario umum
- Sharding database dilakukan berdasarkan ID pengguna atau ID pesanan.
- Nilai kunci shard adalah string.
Jika Anda ingin menggunakan fungsi HASH hanya untuk sharding database berdasarkan nilai kolom ID, Anda dapat mengeksekusi pernyataan DDL berikut:
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 HASH(ID);