全部产品
Search
文档中心

PolarDB:Sharding tabel umum

更新时间:Jul 02, 2025

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';
Catatan

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: _default

sin_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: _default

sin_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: _default

sin_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: _default

Berdasarkan 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.