All Products
Search
Document Center

PolarDB:BUAT TABEL

Last Updated:Jul 02, 2025

Anda dapat mengeksekusi pernyataan CREATE TABLE untuk membuat tabel. Topik ini menjelaskan sintaks dari pernyataan CREATE TABLE dan klausa, parameter, serta metode dasar yang dapat digunakan dalam pernyataan tersebut.

Catatan Penggunaan

  • PolarDB-X 1.0 instance tidak mengizinkan Anda untuk langsung membuat database dengan mengeksekusi pernyataan DDL. Anda hanya dapat membuat database di konsol PolarDB-X. Untuk informasi lebih lanjut, lihat Buat database.
  • PolarDB-X 1.0 instance mendukung indeks sekunder global (GSIs) hanya jika versi MySQL adalah 5.7 atau lebih baru dan versi instance PolarDB-X 1.0 adalah 5.4.1 atau lebih baru. Untuk informasi lebih lanjut tentang GSIs, lihat Indeks Sekunder Global.
  • PolarDB-X memastikan bahwa nilai kunci utama unik dalam shard tabel, tetapi tidak dalam shard database. Anda dapat membuat GSI unik jika diperlukan.
CREATE [SHADOW] TABLE [IF NOT EXISTS] tbl_name
    (create_definition, ...)
    [table_options]
    [drds_partition_options]

create_definition:
    col_name column_definition
  | mysql_create_definition
  | [UNIQUE] GLOBAL INDEX index_name [index_type] (index_sharding_col_name,...)
      [global_secondary_index_option]
      [index_option] ...

# Sintaks terkait GSI
global_secondary_index_option:
    [COVERING (col_name,...)]
    [drds_partition_options]

# Klausa untuk sharding
drds_partition_options:
    DBPARTITION BY db_partition_algorithm
    [TBPARTITION BY table_partition_algorithm [TBPARTITIONS num]]

db_sharding_algorithm:
    HASH([col_name])
  | {YYYYMM|YYYYWEEK|YYYYDD|YYYYMM_OPT|YYYYWEEK_OPT|YYYYDD_OPT}(col_name)
  | UNI_HASH(col_name)
  | RIGHT_SHIFT(col_name, n)
  | RANGE_HASH(col_name, col_name, n)

table_sharding_algorithm:
    HASH(col_name)
  | {MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|YYYYMM_OPT|YYYYWEEK_OPT|YYYYDD_OPT}(col_name)
  | UNI_HASH(col_name)
  | RIGHT_SHIFT(col_name, n)
  | RANGE_HASH(col_name, col_name, n)

# Sintaks DDL MySQL
index_sharding_col_name:
    col_name [(length)] [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'

index_type:
    USING {BTREE | HASH}
Catatan Sintaks DDL PolarDB-X 1.0 didasarkan pada sintaks MySQL. Daftar kode di atas mencantumkan sintaks yang berbeda dari sintaks MySQL. Untuk informasi lebih lanjut tentang sintaks, lihat Dokumentasi MySQL.

Klausa dan parameter untuk sharding

  • DBPARTITION BY hash(partition_key): Klausa ini menentukan kunci shard database dan algoritma sharding database.
  • TBPARTITION BY { HASH(column) | {MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|YYYYMM_OPT|YYYYWEEK_OPT|YYYYDD_OPT}(column): Opsional. Klausa ini menentukan metode yang digunakan untuk memetakan data ke tabel fisik. Klausa ini sama dengan klausa DBPARTITION BY secara default.
  • TBPARTITIONS num: Opsional. Parameter ini menentukan jumlah tabel fisik di setiap database. Nilai default: 1. Jika sharding tabel tidak diperlukan, Anda tidak perlu menentukan parameter ini.
  • Untuk informasi lebih lanjut tentang fungsi sharding, lihat Ikhtisar.

Klausa definisi GSI

  • [UNIQUE] GLOBAL: Mendefinisikan GSI. UNIQUE GLOBAL menentukan bahwa indeks adalah indeks unik global.
  • index_name: Nama indeks. Nama yang ditentukan sama dengan nama tabel indeks.
  • index_type: Tipe indeks sekunder lokal pada kunci shard di tabel indeks. Untuk informasi lebih lanjut tentang jenis indeks sekunder lokal yang didukung, lihat Dokumentasi MySQL.
  • index_sharding_col_name,...: Kolom indeks. Kolom indeks hanya mencakup semua kolom kunci shard dari tabel indeks. Untuk informasi lebih lanjut, lihat Indeks Sekunder Global.
  • global_secondary_index_option: Sintaks ekstensi untuk GSIs PolarDB-X 1.0.
    • COVERING (col_name,...): Kolom penutup. Kolom penutup mencakup semua kolom tabel indeks kecuali kolom indeks. Secara default, kolom penutup mencakup kolom kunci utama dan kolom kunci shard dari tabel utama. Untuk informasi lebih lanjut, lihat Indeks Sekunder Global.
    • drds_partition_options: Klausa untuk sharding tabel indeks. Untuk informasi lebih lanjut, lihat Klausa dan Parameter untuk Sharding.
  • index_option: Atribut indeks lokal pada kunci shard tabel indeks. Untuk informasi lebih lanjut, lihat Dokumentasi MySQL.

Klausa tabel bayangan untuk pengujian stres full-link

SHADOW: Membuat tabel bayangan yang dapat digunakan untuk pengujian stres full-link. Nama tabel harus diawali dengan _test_. Nama tabel yang mengikuti awalan dan nama tabel formal yang terkait harus konsisten. Tabel formal harus dibuat sebelum tabel bayangan dibuat.

Buat tabel non-sharded

Buat tabel non-sharded. Tabel tersebut adalah tabel logis. Sharding tidak diperlukan.

CREATE TABLE single_tbl(
 id bigint not null auto_increment, 
 name varchar(30), 
 primary key(id)
);

Lihat topologi node tabel logis. Topologi node menunjukkan bahwa tabel non-sharded dibuat di database 0.

mysql> show topology from single_tbl;
+------+------------------------------------------------------------------+------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME |
+------+------------------------------------------------------------------+------------+
|    0 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | single_tbl |
+------+------------------------------------------------------------------+------------+
1 row in set (0.01 sec)
            

Buat tabel yang hanya melakukan sharding database dan bukan sharding tabel

Misalnya, delapan shard database dibuat. Buat tabel yang hanya melakukan sharding database dan bukan sharding tabel, dan hashing dilakukan sebagai metode sharding database berdasarkan kolom ID. Tabel tersebut adalah tabel logis.

CREATE TABLE multi_db_single_tbl(
  id bigint not null auto_increment, 
  name varchar(30), 
  primary key(id)
) dbpartition by hash(id);

Lihat topologi node tabel logis. Topologi node menunjukkan bahwa satu shard tabel dibuat di setiap shard database. Ini menunjukkan bahwa hanya sharding database yang dilakukan.

mysql> show topology from multi_db_single_tbl;
+------+------------------------------------------------------------------+---------------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME          |
+------+------------------------------------------------------------------+---------------------+
|    0 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | multi_db_single_tbl |
|    1 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | multi_db_single_tbl |
|    2 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0002_RDS | multi_db_single_tbl |
|    3 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0003_RDS | multi_db_single_tbl |
|    4 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0004_RDS | multi_db_single_tbl |
|    5 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0005_RDS | multi_db_single_tbl |
|    6 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0006_RDS | multi_db_single_tbl |
|    7 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | multi_db_single_tbl |
+------+------------------------------------------------------------------+---------------------+
8 rows in set (0.01 sec)

Buat tabel yang melakukan sharding database dan sharding tabel

Anda dapat menggunakan salah satu metode sharding berikut untuk membuat tabel yang melakukan sharding database dan sharding tabel:

Catatan Dalam contoh-contoh berikut, delapan shard database yang telah dibuat digunakan.

Gunakan fungsi hash untuk sharding

Buat tabel yang melakukan sharding database dan sharding tabel. Tabel tersebut adalah tabel logis. Setiap shard database berisi tiga tabel fisik. Hashing dilakukan sebagai metode sharding database berdasarkan kolom ID dan sebagai metode sharding tabel berdasarkan kolom bid. Lakukan operasi hash pada data di kolom ID untuk mendistribusikan data ke delapan shard database. Kemudian, lakukan operasi hash pada data di kolom bid untuk mendistribusikan data ke tiga tabel fisik di setiap shard database.

CREATE TABLE multi_db_multi_tbl(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30), 
 primary key(id)
) dbpartition by hash(id) tbpartition by hash(bid) tbpartitions 3;

Lihat topologi node tabel logis. Topologi node menunjukkan bahwa tiga shard tabel dibuat di setiap shard database.

mysql> show topology from multi_db_multi_tbl;
+------+------------------------------------------------------------------+-----------------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME            |
+------+------------------------------------------------------------------+-----------------------+
|    0 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | multi_db_multi_tbl_00 |
|    1 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | multi_db_multi_tbl_01 |
|    2 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | multi_db_multi_tbl_02 |
|    3 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | multi_db_multi_tbl_03 |
|    4 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | multi_db_multi_tbl_04 |
|    5 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | multi_db_multi_tbl_05 |
|    6 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0002_RDS | multi_db_multi_tbl_06 |
|    7 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0002_RDS | multi_db_multi_tbl_07 |
|    8 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0002_RDS | multi_db_multi_tbl_08 |
|    9 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0003_RDS | multi_db_multi_tbl_09 |
|   10 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0003_RDS | multi_db_multi_tbl_10 |
|   11 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0003_RDS | multi_db_multi_tbl_11 |
|   12 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0004_RDS | multi_db_multi_tbl_12 |
|   13 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0004_RDS | multi_db_multi_tbl_13 |
|   14 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0004_RDS | multi_db_multi_tbl_14 |
|   15 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0005_RDS | multi_db_multi_tbl_15 |
|   16 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0005_RDS | multi_db_multi_tbl_16 |
|   17 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0005_RDS | multi_db_multi_tbl_17 |
|   18 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0006_RDS | multi_db_multi_tbl_18 |
|   19 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0006_RDS | multi_db_multi_tbl_19 |
|   20 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0006_RDS | multi_db_multi_tbl_20 |
|   21 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | multi_db_multi_tbl_21 |
|   22 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | multi_db_multi_tbl_22 |
|   23 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | multi_db_multi_tbl_23 |
+------+------------------------------------------------------------------+-----------------------+
24 rows in set (0.01 sec)  

Lihat aturan sharding tabel logis. Aturan tersebut menunjukkan bahwa hashing digunakan untuk sharding. Kunci shard database adalah ID dan kunci shard tabel adalah bid.

mysql> show rule from multi_db_multi_tbl;
+------+--------------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
| ID   | TABLE_NAME         | BROADCAST | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT |
+------+--------------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
|    0 | multi_db_multi_tbl |         0 | id               | hash                | 8                  | bid              | hash                | 3                  |
+------+--------------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
1 row in set (0.01 sec)

Gunakan fungsi hash yang berisi dua bidang untuk sharding

  • Kunci shard harus bertipe data karakter atau numerik.
  • Metode routing: Hitung nilai hash dengan menggunakan N karakter terakhir dari kunci shard. Kemudian, gunakan fungsi hash untuk menghitung rute. N menentukan parameter ketiga untuk fungsi hash. Misalnya, jika fungsi RANGE_HASH(COL1, COL2, N) digunakan, COL1 dipilih dan kemudian dipotong untuk mendapatkan N karakter terakhir untuk perhitungan. Jika COL1 tidak ada, COL2 dipilih untuk perhitungan.
  • Skenario: Dua kunci shard diperlukan dan hanya satu nilai kunci shard yang digunakan untuk query. Misalnya, delapan database fisik dialokasikan untuk instance PolarDB-X 1.0 Anda dan skenario berikut diperlukan untuk layanan:
    • Sharding database dilakukan pada tabel pesanan berdasarkan ID pembeli dan ID pesanan.
    • Hanya ID pembeli atau ID pesanan yang ditentukan sebagai kondisi untuk query.

Dalam hal ini, Anda dapat mengeksekusi pernyataan DDL berikut untuk membuat tabel pesanan:

create table test_order_tb (
 id bigint not null auto_increment,
 seller_id varchar(30) DEFAULT NULL,
 order_id varchar(30) DEFAULT NULL,
 buyer_id varchar(30) DEFAULT NULL,
 create_time datetime DEFAULT NULL,
 primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by RANGE_HASH(buyer_id, order_id, 10) tbpartition by RANGE_HASH(buyer_id, order_id, 10) tbpartitions 3;  
Catatan
  • Kedua kunci shard tidak dapat dimodifikasi.
  • Jika kedua kunci shard menunjuk ke shard database atau shard tabel yang berbeda, data gagal disisipkan.

Gunakan fungsi tanggal untuk sharding

Anda dapat menggunakan fungsi hash sebagai algoritma sharding. Anda juga dapat menggunakan fungsi tanggal seperti MM, DD, WEEK, atau MMDD sebagai algoritma sharding untuk menshard tabel. Contoh berikut menunjukkan cara menggunakan fungsi tanggal untuk sharding.

Buat tabel yang melakukan sharding database dan sharding tabel. Tabel tersebut adalah tabel logis. Sharding database dilakukan dengan menerapkan hashing berdasarkan kolom userId. Sharding tabel dilakukan dengan menggunakan fungsi tanggal WEEK(actionDate) berdasarkan kolom actionDate untuk menghitung DAY_OF_WEEK. Data di tabel logis dirouting ke tujuh tabel fisik berdasarkan jumlah hari dalam seminggu.

Misalnya, jika nilai di kolom actionDate adalah 2017-02-27 dan harinya adalah Senin, nilai yang dikembalikan oleh fungsi WEEK(actionDate) adalah 2. Dalam hal ini, rekaman data yang mencakup 2017-02-27 disimpan di shard tabel yang sesuai dengan 2 berdasarkan persamaan berikut: 2 % 7 = 2. Shard tabel ini terletak di shard database dan bernama user_log_2. Jika nilai di kolom actionDate adalah 2017-02-26 dan harinya adalah Minggu, nilai yang dikembalikan oleh fungsi WEEK(actionDate) adalah 1. Dalam hal ini, rekaman data yang mencakup 2017-02-26 disimpan di shard tabel yang sesuai dengan 1 berdasarkan persamaan berikut: 1 % 7 = 1. Shard tabel ini terletak di shard database dan bernama user_log_1.

CREATE TABLE user_log(
 userId int, 
 name varchar(30), 
 operation varchar(30), 
 actionDate DATE
) dbpartition by hash(userId) tbpartition by WEEK(actionDate) tbpartitions 7;

Lihat topologi node tabel logis. Topologi node menunjukkan bahwa tujuh shard tabel dibuat di setiap shard database berdasarkan jumlah hari dalam seminggu.

mysql> show topology from user_log;
+------+------------------------------------------------------------------+------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME |
+------+------------------------------------------------------------------+------------+
|    0 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log_0 |
|    1 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log_1 |
|    2 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log_2 |
|    3 | SANGUAN_TEST_123_14488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log_3 |
|    4 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log_4 |
|    5 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log_5 |
|    6 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log_6 |
|    7 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log_0 |
|    8 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log_1 |
|    9 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log_2 |
|   10 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log_3 |
|   11 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log_4 |
|   12 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log_5 |
|   13 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log_6 |
...
|   49 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log_0 |
|   50 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log_1 |
|   51 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log_2 |
|   52 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log_3 |
|   53 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log_4 |
|   54 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log_5 |
|   55 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log_6 |
+------+------------------------------------------------------------------+------------+
56 rows in set (0.01 sec)
Catatan Elipsis (...) digunakan untuk menghilangkan beberapa data karena hasil yang dikembalikan panjang.

Lihat aturan sharding tabel logis. Aturan tersebut menunjukkan bahwa metode sharding database adalah hashing dan kunci shard database adalah userId. Aturan tersebut juga menunjukkan bahwa fungsi tanggal WEEK digunakan untuk menshard tabel dan kunci shard tabel adalah actionDate.

mysql> show rule from user_log;
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
| ID   | TABLE_NAME | BROADCAST | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
|    0 | user_log   |         0 | userId           | hash                | 8                  | actionDate       | week                | 7                  |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
1 row in set (0.00 sec)

Dengan cara ini, jika Anda menentukan kunci shard database dan kunci shard tabel, Anda dapat melihat database fisik dan tabel fisik yang termasuk dalam database fisik ke mana pernyataan SQL dirouting.

Buat tabel yang melakukan sharding database dan sharding tabel. Tabel tersebut adalah tabel logis. Sharding database dilakukan dengan menerapkan hashing berdasarkan kolom userId. Sharding tabel dilakukan dengan menggunakan fungsi tanggal MM(actionDate) berdasarkan kolom actionDate untuk menghitung MONTH_OF_YEAR. Data di tabel logis dirouting ke 12 tabel fisik berdasarkan jumlah bulan dalam setahun.

Misalnya, jika nilai di kolom actionDate adalah 2017-02-27, nilai yang dikembalikan oleh fungsi MM(actionDate) adalah 02. Dalam hal ini, rekaman data yang mencakup 2017-02-27 disimpan di shard tabel yang sesuai dengan 02 berdasarkan persamaan berikut: 02 % 12 = 02. Shard tabel ini terletak di shard database dan bernama user_log_02. Jika nilai di kolom actionDate adalah 2016-12-27, nilai yang dikembalikan oleh fungsi MM(actionDate) adalah 12. Dalam hal ini, rekaman data yang mencakup 2016-12-27 disimpan di shard tabel yang sesuai dengan 00 berdasarkan persamaan berikut: 12 % 12 = 00. Shard tabel ini terletak di shard database dan bernama user_log_00.

CREATE TABLE user_log2(
 userId int, 
 name varchar(30), 
 operation varchar(30), 
 actionDate DATE
) dbpartition by hash(userId) tbpartition by MM(actionDate) tbpartitions 12; 

Lihat topologi node tabel logis. Topologi node menunjukkan bahwa 12 shard tabel dibuat di setiap shard database berdasarkan jumlah bulan dalam setahun.

mysql> show topology from user_log2;
+------+------------------------------------------------------------------+--------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME   |
+------+------------------------------------------------------------------+--------------+
|    0 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_00 |
|    1 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_01 |
|    2 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_02 |
|    3 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_03 |
|    4 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_04 |
|    5 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_05 |
|    6 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_06 |
|    7 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_07 |
|    8 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_08 |
|    9 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_09 |
|   10 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_10 |
|   11 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log2_11 |
|   12 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_00 |
|   13 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_01 |
|   14 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_02 |
|   15 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_03 |
|   16 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_04 |
|   17 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_05 |
|   18 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_06 |
|   19 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_07 |
|   20 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_08 |
|   21 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_09 |
|   22 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_10 |
|   23 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | user_log2_11 |
...
|   84 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_00 |
|   85 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_01 |
|   86 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_02 |
|   87 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_03 |
|   88 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_04 |
|   89 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_05 |
|   90 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_06 |
|   91 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_07 |
|   92 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_08 |
|   93 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_09 |
|   94 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_10 |
|   95 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log2_11 |
+------+------------------------------------------------------------------+--------------+
96 rows in set (0.02 sec)
Catatan Elipsis (...) digunakan untuk menghilangkan beberapa data karena hasil yang dikembalikan panjang.

Lihat aturan sharding tabel logis. Aturan tersebut menunjukkan bahwa metode sharding database adalah hashing dan kunci shard database adalah userId. Aturan tersebut juga menunjukkan bahwa fungsi tanggal MM digunakan untuk menshard tabel dan kunci sharding tabel adalah actionDate.

mysql> show rule from user_log2;
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
| ID   | TABLE_NAME | BROADCAST | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
|    0 | user_log2  |         0 | userId           | hash                | 8                  | actionDate       | mm                  | 12                 |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
1 row in set (0.00 sec)

Buat tabel yang melakukan sharding database dan sharding tabel. Tabel tersebut adalah tabel logis. Sharding database dilakukan dengan menerapkan hashing berdasarkan kolom userId. Sharding tabel dilakukan dengan menggunakan fungsi DD(actionDate) untuk menghitung DAY_OF_MONTH. Data di tabel logis dirouting ke 31 tabel fisik berdasarkan jumlah maksimum hari dalam sebulan.

Misalnya, jika nilai di kolom actionDate adalah 2017-02-27, nilai yang dikembalikan oleh fungsi DD(actionDate) adalah 27. Dalam hal ini, rekaman data yang mencakup 2017-02-27 disimpan di shard tabel yang sesuai dengan 27 berdasarkan persamaan berikut: 27 % 31 = 27. Shard tabel ini terletak di shard database dan bernama user_log_27.

CREATE TABLE user_log3(
 userId int, 
 name varchar(30), 
 operation varchar(30), 
 actionDate DATE
) dbpartition by hash(userId) tbpartition by DD(actionDate) tbpartitions 31;

Lihat topologi node tabel logis. Topologi node menunjukkan bahwa 31 shard tabel dibuat di setiap shard database berdasarkan jumlah maksimum hari dalam sebulan.

mysql> show topology from user_log3;
+------+------------------------------------------------------------------+--------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME   |
+------+------------------------------------------------------------------+--------------+
|    0 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_00 |
|    1 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_01 |
|    2 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_02 |
|    3 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_03 |
|    4 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_04 |
|    5 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_05 |
|    6 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_06 |
|    7 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_07 |
|    8 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_08 |
|    9 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_09 |
|   10 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_10 |
|   11 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_11 |
|   12 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_12 |
|   13 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_13 |
|   14 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_14 |
|   15 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_15 |
|   16 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_16 |
|   17 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_17 |
|   18 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_18 |
|   19 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_19 |
|   20 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_20 |
|   21 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_21 |
|   22 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_22 |
|   23 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_23 |
|   24 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_24 |
|   25 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_25 |
|   26 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_26 |
|   27 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_27 |
|   28 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_28 |
|   29 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_29 |
|   30 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log3_30 |
...
|   84 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_00 |
|   85 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_01 |
|   86 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_02 |
|   87 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_03 |
|   88 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_04 |
|   89 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_05 |
|   90 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_06 |
|   91 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_07 |
|   92 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_08 |
|   93 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_09 |
|   94 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_10 |
|   95 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log3_11 |
+------+------------------------------------------------------------------+--------------+
96 rows in set (0.02 sec)
Catatan Elipsis (...) digunakan untuk menghilangkan beberapa data karena hasil yang dikembalikan panjang.

Lihat aturan sharding tabel logis. Aturan tersebut menunjukkan bahwa metode sharding database adalah hashing dan kunci shard database adalah userId. Aturan tersebut juga menunjukkan bahwa fungsi tanggal DD digunakan untuk melakukan sharding pada tabel dan kunci shard tabel adalah actionDate.

mysql> show rule from user_log3;
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
| ID   | TABLE_NAME | BROADCAST | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
|    0 | user_log3  |         0 | userId           | hash                | 8                  | actionDate       | dd                  | 31                 |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
1 row in set (0.01 sec)

Buat tabel yang melakukan sharding database dan sharding tabel. Tabel tersebut adalah tabel logis. Sharding database dilakukan dengan menerapkan hashing berdasarkan kolom userId. Sharding tabel dilakukan dengan menggunakan fungsi MMDD(actionDate) tbpartitions 365 untuk menghitung DAY_OF_YEAR % 365. Data di tabel logis dirouting ke 365 tabel fisik berdasarkan 365 hari yang dihitung sebagai satu tahun.

Misalnya, jika nilai di kolom actionDate adalah 2017-02-27, nilai yang dikembalikan oleh fungsi MMDD(actionDate) adalah 58. Dalam hal ini, rekaman data yang mencakup 2017-02-27 disimpan di shard tabel yang sesuai dengan 58. Shard tabel ini terletak di shard database dan bernama user_log_58.

CREATE TABLE user_log4(
 userId int, 
 name varchar(30), 
 operation varchar(30), 
 actionDate DATE
) dbpartition by hash(userId) tbpartition by MMDD(actionDate) tbpartitions 365;

Lihat topologi node tabel logis. Topologi node menunjukkan bahwa 365 shard tabel dibuat di setiap shard database berdasarkan 365 hari yang dihitung sebagai satu tahun.

mysql> show topology from user_log4;
+------+------------------------------------------------------------------+---------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME    |
+------+------------------------------------------------------------------+---------------+
...
| 2896 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_341 |
| 2897 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_342 |
| 2898 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_343 |
| 2899 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_344 |
| 2900 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_345 |
| 2901 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_346 |
| 2902 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_347 |
| 2903 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_348 |
| 2904 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_349 |
| 2905 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_350 |
| 2906 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_351 |
| 2907 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_352 |
| 2908 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_353 |
| 2909 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_354 |
| 2910 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_355 |
| 2911 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_356 |
| 2912 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_357 |
| 2913 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_358 |
| 2914 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_359 |
| 2915 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_360 |
| 2916 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_361 |
| 2917 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_362 |
| 2918 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_363 |
| 2919 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log4_364 |
+------+------------------------------------------------------------------+---------------+
2920 rows in set (0.07 sec)
Catatan Elipsis (...) digunakan untuk menghilangkan beberapa data karena hasil yang dikembalikan panjang.

Lihat aturan sharding tabel logis. Aturan tersebut menunjukkan bahwa metode sharding database adalah hashing dan kunci shard database adalah userId. Aturan tersebut juga menunjukkan bahwa fungsi tanggal MMDD digunakan untuk menshard tabel dan kunci sharding tabel adalah actionDate.

mysql> show rule from user_log4;
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
| ID   | TABLE_NAME | BROADCAST | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
|    0 | user_log4  |         0 | userId           | hash                | 8                  | actionDate       | mmdd                | 365                |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
1 row in set (0.02 sec)

Buat tabel yang melakukan sharding database dan sharding tabel. Tabel tersebut adalah tabel logis. Sharding database dilakukan dengan menerapkan hashing berdasarkan kolom userId. Sharding tabel dilakukan dengan menggunakan MMDD(actionDate) tbpartitions 10 untuk menghitung DAY_OF_YEAR % 10. Tabel logis di-shard dengan menggunakan 365 hari sebagai satu tahun, dan data di tabel logis dirouting ke 10 tabel fisik.

CREATE TABLE user_log5(
 userId int, 
 name varchar(30), 
 operation varchar(30), 
 actionDate DATE
) dbpartition by hash(userId) tbpartition by MMDD(actionDate) tbpartitions 10;

Lihat topologi node tabel logis. Topologi node menunjukkan bahwa 10 shard tabel dibuat di setiap shard database. Tabel logis di-shard dengan menggunakan 365 hari sebagai satu tahun, dan data di tabel logis dirouting ke 10 tabel fisik.

mysql> show topology from user_log5;
+------+------------------------------------------------------------------+--------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME   |
+------+------------------------------------------------------------------+--------------+
|    0 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_00 |
|    1 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_01 |
|    2 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_02 |
|    3 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_03 |
|    4 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_04 |
|    5 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_05 |
|    6 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_06 |
|    7 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_07 |
|    8 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_08 |
|    9 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | user_log5_09 |
...
|   70 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_00 |
|   71 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_01 |
|   72 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_02 |
|   73 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_03 |
|   74 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_04 |
|   75 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_05 |
|   76 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_06 |
|   77 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_07 |
|   78 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_08 |
|   79 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | user_log5_09 |
+------+------------------------------------------------------------------+--------------+
80 rows in set (0.02 sec)
Catatan Elipsis (...) digunakan untuk menghilangkan beberapa data karena hasil yang dikembalikan panjang.

Lihat aturan sharding tabel logis. Aturan tersebut menunjukkan bahwa metode sharding database adalah hashing dan kunci shard database adalah userId. Aturan tersebut juga menunjukkan bahwa tabel di-shard dengan menggunakan fungsi tanggal MMDD berdasarkan kunci shard actionDate dan data tabel dirouting ke 10 tabel fisik.

mysql> show rule from user_log5;
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
| ID   | TABLE_NAME | BROADCAST | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
|    0 | user_log5  |         0 | userId           | hash                | 8                  | actionDate       | mmdd                | 10                 |
+------+------------+-----------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+
1 row in set (0.01 sec)

Gunakan kunci utama sebagai kunci shard

Jika Anda tidak menentukan kunci shard untuk algoritma sharding, sistem secara default menggunakan kunci utama sebagai bidang shard. Kode berikut memberikan contoh tentang cara menggunakan kunci utama sebagai kunci shard database dan kunci shard tabel.

  • Gunakan kunci utama sebagai kunci shard database
    CREATE TABLE prmkey_tbl(
     id bigint not null auto_increment, 
     name varchar(30), 
     primary key(id)
    ) dbpartition by hash();
  • Gunakan kunci utama sebagai kunci shard
    CREATE TABLE prmkey_multi_tbl(
     id bigint not null auto_increment, 
     name varchar(30), 
     primary key(id)
    ) dbpartition by hash() tbpartition by hash() tbpartitions 3;

Atribut lain dalam pernyataan MySQL CREATE TABLE

Saat Anda mengeksekusi pernyataan MySQL CREATE TABLE untuk membuat tabel, Anda dapat menentukan metode sharding dan atribut lain untuk tabel tersebut. Contoh kode berikut memberikan contoh tentang cara menentukan atribut lain:

CREATE TABLE multi_db_multi_tbl(
  id bigint not null auto_increment, 
  name varchar(30), 
  primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(id) tbpartition by hash(id) tbpartitions 3;

GSI

Bagian ini menjelaskan cara mendefinisikan GSI saat Anda membuat tabel.

Catatan Dalam contoh-contoh berikut, delapan shard database yang telah dibuat digunakan.

Definisikan GSI

Examples

CREATE TABLE t_order (
 `id` bigint(11) NOT NULL AUTO_INCREMENT,
 `order_id` varchar(20) DEFAULT NULL,
 `buyer_id` varchar(20) DEFAULT NULL,
 `seller_id` varchar(20) DEFAULT NULL,
 `order_snapshot` longtext DEFAULT NULL,
 `order_detail` longtext DEFAULT NULL,
 PRIMARY KEY (`id`),
 GLOBAL INDEX `g_i_seller`(`seller_id`) dbpartition by hash(`seller_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`order_id`);

Perhatikan parameter berikut:

  • t_order: Tabel utama tempat sharding database dilakukan tetapi bukan sharding tabel. Sharding database dilakukan dengan menggunakan hashing berdasarkan kolom order_id.
  • g_i_seller: Tabel indeks tempat sharding database dilakukan tetapi bukan sharding tabel. Sharding database dilakukan dengan menggunakan hashing berdasarkan kolom seller_id. Tidak ada kolom penutup yang ditentukan.
  • GLOBAL INDEX `g_i_seller`(`seller_id`) dbpartition by hash(`seller_id`): Klausa yang digunakan untuk mendefinisikan GSI.

Eksekusi pernyataan SHOW INDEX untuk melihat informasi indeks, seperti informasi tentang indeks sekunder lokal pada kunci shard order_id dan GSIs pada seller_id, id, atau order_id. seller_id adalah kunci shard tabel indeks, dan id dan order_id adalah kolom penutup default. Kolom penutup default mencakup kolom kunci utama dan kolom kunci shard dari tabel utama.

mysql> show index from t_order;
+---------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
| TABLE   | NON_UNIQUE | KEY_NAME                | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULL | INDEX_TYPE | COMMENT  | INDEX_COMMENT |
+---------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
| t_order |          0 | PRIMARY                 |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |          |               |
| t_order |          1 | auto_shard_key_order_id |            1 | order_id    | A         |           0 |     NULL | NULL   | YES  | BTREE      |          |               |
| t_order |          1 | g_i_seller              |            1 | seller_id   | NULL      |           0 |     NULL | NULL   | YES  | GLOBAL     | INDEX    |               |
| t_order |          1 | g_i_seller              |            2 | id          | NULL      |           0 |     NULL | NULL   |      | GLOBAL     | COVERING |               |
| t_order |          1 | g_i_seller              |            3 | order_id    | NULL      |           0 |     NULL | NULL   | YES  | GLOBAL     | COVERING |               |
+---------+------------+-------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+

Anda dapat mengeksekusi pernyataan SHOW GLOBAL INDEX untuk menanyakan informasi tentang GSI. Untuk informasi lebih lanjut, lihat SHOW GLOBAL INDEX.

 mysql> show global index from t_order;
+--------+---------+------------+------------+-------------+----------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+
| SCHEMA | TABLE   | NON_UNIQUE | KEY_NAME   | INDEX_NAMES | COVERING_NAMES | INDEX_TYPE | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT | STATUS |
+--------+---------+------------+------------+-------------+----------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+
| d7     | t_order | 1          | g_i_seller | seller_id   | id, order_id   | NULL       | seller_id        | HASH                | 8                  |                  | NULL                | NULL               | PUBLIC |
+--------+---------+------------+------------+-------------+----------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+

Lihat skema tabel indeks. Tabel indeks berisi kunci utama tabel utama, kunci shard, dan kolom penutup default. Kolom kunci utama tidak mengandung atribut AUTO_INCREMENT, dan tabel utama tidak mengandung indeks sekunder lokal.

mysql> show create table g_i_seller;
+------------+-----------------------------------------------------------+
| Table      | Create Table                                              |
+------------+-----------------------------------------------------------+
| g_i_seller | CREATE TABLE `g_i_seller` (
 `id` bigint(11) NOT NULL,
 `order_id` varchar(20) DEFAULT NULL,
 `seller_id` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `auto_shard_key_seller_id` (`seller_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`seller_id`) |
+------------+-----------------------------------------------------------+

Definisikan GSI Unik

CREATE TABLE t_order (
 `id` bigint(11) NOT NULL AUTO_INCREMENT,
 `order_id` varchar(20) DEFAULT NULL,
 `buyer_id` varchar(20) DEFAULT NULL,
 `seller_id` varchar(20) DEFAULT NULL,
 `order_snapshot` longtext DEFAULT NULL,
 `order_detail` longtext DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE GLOBAL INDEX `g_i_buyer`(`buyer_id`) COVERING(`seller_id`, `order_snapshot`) 
   dbpartition by hash(`buyer_id`) tbpartition by hash(`buyer_id`) tbpartitions 3
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`order_id`);

Perhatikan parameter berikut:

  • t_order: Tabel utama tempat sharding database dilakukan tetapi bukan sharding tabel. Sharding database dilakukan dengan menggunakan hashing berdasarkan kolom order_id.
  • g_i_buyer: Tabel indeks tempat sharding database dan sharding tabel dilakukan. Sharding tabel dan sharding database dilakukan dengan menggunakan hashing berdasarkan kolom buyer_id. Kolom penutup mencakup kolom seller_id dan order_snapshot.
  • UNIQUE GLOBAL INDEX `g_i_buyer`(`buyer_id`) COVERING(`seller_id`, `order_snapshot`) dbpartition by hash(`buyer_id`) tbpartition by hash(`buyer_id`) tbpartitions 3: Klausa yang digunakan untuk mendefinisikan GSI unik.

Eksekusi pernyataan SHOW INDEX untuk melihat informasi indeks, seperti informasi tentang indeks sekunder lokal pada kunci shard order_id dan GSI unik pada buyer_id, id, order_id, seller_id, atau order_snapshot. buyer_id adalah kunci shard tabel indeks, dan id dan order_id adalah kolom penutup default. Kolom penutup default mencakup kolom kunci utama dan kolom kunci shard dari tabel utama. seller_id dan order_snapshot adalah kolom penutup yang ditentukan saat GSI unik didefinisikan.

mysql> show index from t_order;
+--------------+------------+-------------------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
| TABLE        | NON_UNIQUE | KEY_NAME                | SEQ_IN_INDEX | COLUMN_NAME    | COLLATION | CARDINALITY | SUB_PART | PACKED | NULL | INDEX_TYPE | COMMENT  | INDEX_COMMENT |
+--------------+------------+-------------------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
| t_order_dthb |          0 | PRIMARY                 |            1 | id             | A         |           0 |     NULL | NULL   |      | BTREE      |          |               |
| t_order_dthb |          1 | auto_shard_key_order_id |            1 | order_id       | A         |           0 |     NULL | NULL   | YES  | BTREE      |          |               |
| t_order      |          0 | g_i_buyer               |            1 | buyer_id       | NULL      |           0 |     NULL | NULL   | YES  | GLOBAL     | INDEX    |               |
| t_order      |          1 | g_i_buyer               |            2 | id             | NULL      |           0 |     NULL | NULL   |      | GLOBAL     | COVERING |               |
| t_order      |          1 | g_i_buyer               |            3 | order_id       | NULL      |           0 |     NULL | NULL   | YES  | GLOBAL     | COVERING |               |
| t_order      |          1 | g_i_buyer               |            4 | seller_id      | NULL      |           0 |     NULL | NULL   | YES  | GLOBAL     | COVERING |               |
| t_order      |          1 | g_i_buyer               |            5 | order_snapshot | NULL      |           0 |     NULL | NULL   | YES  | GLOBAL     | COVERING |               |
+--------------+------------+-------------------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+----------+---------------+

Anda dapat mengeksekusi pernyataan SHOW GLOBAL INDEX untuk menanyakan informasi tentang GSI. Untuk informasi lebih lanjut, lihat SHOW GLOBAL INDEX.

mysql> show global index from t_order;
+--------+---------+------------+-----------+-------------+-----------------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+
| SCHEMA | TABLE   | NON_UNIQUE | KEY_NAME  | INDEX_NAMES | COVERING_NAMES                          | INDEX_TYPE | DB_PARTITION_KEY | DB_PARTITION_POLICY | DB_PARTITION_COUNT | TB_PARTITION_KEY | TB_PARTITION_POLICY | TB_PARTITION_COUNT | STATUS |
+--------+---------+------------+-----------+-------------+-----------------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+
| d7     | t_order | 0          | g_i_buyer | buyer_id    | id, order_id, seller_id, order_snapshot | NULL       | buyer_id         | HASH                | 8                  | buyer_id         | HASH                | 3                  | PUBLIC |
+--------+---------+------------+-----------+-------------+-----------------------------------------+------------+------------------+---------------------+--------------------+------------------+---------------------+--------------------+--------+      

Lihat skema tabel indeks. Tabel indeks berisi kunci utama tabel utama, kunci shard, kolom penutup default, dan kolom penutup yang ditentukan saat GSI unik didefinisikan. Kolom kunci utama tidak mengandung atribut AUTO_INCREMENT, dan tabel utama tidak mengandung indeks sekunder lokal. Secara default, tabel dibuat untuk GSI unik. Dengan cara ini, data yang sesuai dengan GSI unik adalah unik.

mysql> show create table g_i_buyer;
+-----------+--------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                           |
+-----------+--------------------------------------------------------------------------------------------------------+
| g_i_buyer | CREATE TABLE `g_i_buyer` (
  `id` bigint(11) NOT NULL,
  `order_id` varchar(20) DEFAULT NULL,
  `buyer_id` varchar(20) DEFAULT NULL,
  `seller_id` varchar(20) DEFAULT NULL,
  `order_snapshot` longtext,
  PRIMARY KEY (`id`),
  UNIQUE KEY `auto_shard_key_buyer_id` (`buyer_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`buyer_id`) tbpartition by hash(`buyer_id`) tbpartitions 3 |
+-----------+--------------------------------------------------------------------------------------------------------+