Ikhtisar
Fitur sharding tabel umum terdistribusi transparan dari PolarDB-X membagi semua tabel dalam basis data logis berdasarkan penggunaan sintaks partisi MySQL. Daftar dan gambar berikut menjelaskan cara kerja sharding tabel umum:
Jika definisi partisi tabel logis tidak ditentukan secara eksplisit di MySQL, tabel tersebut digunakan sebagai tabel non-partisi dan didistribusikan secara acak ke node data yang berbeda dari PolarDB-X untuk menyeimbangkan beban.
Jika definisi partisi tabel logis ditentukan secara eksplisit di MySQL, tabel tersebut digunakan sebagai tabel partisi dan didistribusikan secara merata ke node data yang berbeda.
Skenario
Fitur ini membagi semua tabel MySQL dari layanan asli dan secara otomatis mengalokasikan tabel ke node data. Fitur ini menyelesaikan hambatan sumber daya server tunggal dan menyeimbangkan beban. Fitur ini cocok untuk skenario dengan sejumlah besar basis data dan tabel dalam aplikasi Anda, terutama untuk tabel dengan lebih sedikit hubungan join.
Contoh
Buat basis data yang menggunakan fitur sharding tabel umum
Untuk menggunakan fitur sharding tabel umum di PolarDB-X, gunakan pernyataan SQL berikut untuk membuat basis data:
CREATE DATABASE autodb1 MODE='auto' DEFAULT_SINGLE='on';Jika Anda membuat basis data dalam mode AUTO di Konsol PolarDB, SQL yang dihasilkan sistem tidak menyertakan parameter DEFAULT_SINGLE='on'. Untuk membuat basis data yang menggunakan fitur sharding tabel umum, jalankan pernyataan SQL di atas secara manual. Untuk informasi lebih lanjut, lihat CREATE DATABASE.
Berikut adalah pernyataan lengkap untuk membuat basis data yang menggunakan fitur sharding tabel umum:
mysql> show create database autodb1;
+----------+------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE |
+----------+------------------------------------------------------------------------------------------------------------------+
| autodb1 | CREATE DATABASE `autodb1` CHARSET = `utf8mb4` COLLATE = `utf8mb4_general_ci` MODE = 'auto' DEFAULT_SINGLE = 'on' |
+----------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0,01 sec)Buat beberapa tabel MySQL non-partisi dan otomatis bagi tabel tersebut
Gunakan pernyataan SQL berikut untuk membuat beberapa tabel di basis data my_autodb:
CREATE TABLE sin_t1(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t2(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t3(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t4(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);Lihat topologi tabel yang dibagi
Gunakan pernyataan SHOW TOPOLOGY FROM #tableName untuk melihat distribusi tabel:
sin_t1:
SHOW TOPOLOGY FROM sin_t1\G ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t1_HnMx
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _defaultsin_t2:
SHOW TOPOLOGY FROM sin_t2\G ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t2_IT7l
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _defaultsin_t3:
SHOW TOPOLOGY FROM sin_t3\G ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t3_HmtN
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _defaultsin_t4:
SHOW TOPOLOGY FROM sin_t4\G ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t4_ab7e
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _defaultBerdasarkan hasil pernyataan SHOW TOPOLOGY untuk tabel di atas, sin_t1 dan sin_t3 didistribusikan ke node data polardbx-storage-0-master. sin_t2 dan sin_t4 didistribusikan ke node data polardbx-storage-1-master.
Catatan penggunaan
Setelah tabel umum dibagi di beberapa node data, kinerja operasi JOIN yang melibatkan tabel tersebut mungkin terpengaruh. Data untuk operasi JOIN mungkin tersebar di berbagai DNs, sehingga operasi JOIN mungkin tidak lagi efisien untuk didorong ke DNs.
Jika Anda tidak secara eksplisit menentukan skema partisi MySQL untuk tabel logis, tabel tersebut didistribusikan secara acak di berbagai node dalam instance PolarDB-X. Jumlah data di setiap shard tabel bisa bervariasi, sehingga ruang penyimpanan yang digunakan pada setiap node mungkin berbeda.