All Products
Search
Document Center

PolarDB:Petunjuk penggunaan

Last Updated:Sep 02, 2026

Topik ini menjelaskan cara membuat dan menggunakan tabel partisi kluster multi-master.

Informasi latar belakang

Tabel partisi kluster multi-master PolarDB for MySQL secara otomatis memisahkan data ke dalam beberapa shard fisik di dalam kluster berdasarkan aturan distribusi yang telah ditentukan, dengan beberapa node baca/tulis secara bersama-sama menangani beban bisnis.

Melalui pemisahan horizontal, PolarDB dapat melakukan penskalaan horizontal terhadap kemampuan pemrosesan database. Selain itu, tabel partisi kluster multi-master menggabungkan keunggulan alokasi sumber daya on-demand dari penyimpanan bersama, sehingga membantu meningkatkan pemanfaatan sumber daya.

Cakupan penerapan

  • Seri produk kluster PolarDB for MySQL adalah Multi-master Cluster (Limitless) Edition, dengan versi kernel 8.0.2.

  • Akun istimewa telah dibuat. Untuk informasi selengkapnya, lihat Buat dan kelola akun database.

  • Anda telah terhubung ke kluster database. Untuk informasi selengkapnya, lihat Hubungkan ke kluster.

Pernyataan DDL

CREATE DATABASE

Pernyataan CREATE DATABASE digunakan untuk membuat database dan memungkinkan Anda menentukan atribut default seperti set karakter dan aturan pengurutan. Sintaksnya sepenuhnya kompatibel dengan MySQL. Selain itu, Anda dapat menggunakan DIST_DB={'Y' | 'N'} untuk menentukan apakah database yang dibuat mendukung tabel partisi kluster multi-master dalam mode sharding database. Nilai default-nya adalah 'N'.

Catatan

Tabel partisi kluster multi-master saat ini tidak mendukung konversi database biasa menjadi database dengan atribut DIST_DB.

Sintaks

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_option] ...
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name
| COLLATE [=] collation_name
| ENCRYPTION [=] {'Y' | 'N'}
| DIST_DB [=] {'Y' | 'N'}
}

Contoh

Buat database bernama test1 dan izinkan pembuatan tabel partisi kluster multi-master di dalam database tersebut.

CREATE DATABASE test1 DIST_DB='Y';

CREATE TABLE

Mode database sharding

Pernyataan CREATE TABLE digunakan untuk membuat tabel. Di dalam database yang ditandai sebagai DIST_DB='Y', Anda dapat menggunakan DBDISTRIBUTION untuk menentukan metode distribusi tabel partisi kluster multi-master. Jika jumlah shard tidak didefinisikan secara eksplisit, sistem akan menentukannya secara otomatis berdasarkan konfigurasi kluster.

Sintaks

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [dbdistribution_options]

dbdistribution_options:
    DBDISTRIBUTION BY
        { [LINEAR] HASH(expr)
        | [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list)
        | RANGE{(expr) | COLUMNS(column_list)}
        | LIST{(expr) | COLUMNS(column_list)} }
    [(dbdistribution_definition [, dbdistribution_definition] ...)]

dbdistribution_definition:
    DBDISTRIBUTION distribution_name
        [VALUES
            {LESS THAN {(expr | value_list) | MAXVALUE}
            |
            IN (value_list)}]
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] 'string' ]
        [DATA DIRECTORY [=] 'data_dir']
        [INDEX DIRECTORY [=] 'index_dir']
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]

Contoh:

  • Tabel tunggal biasa

    CREATE database test;
    CREATE TABLE t1(
     id bigint NOT NULL, 
     name varchar(30), 
     PRIMARY key(id)
    );
  • Tabel partisi multi-master yang mendukung mode sharding database

    Gunakan fungsi hash untuk pemisahan

    Buat tabel partisi kluster multi-master dan gunakan kolom id untuk pemisahan hash. Shard data didistribusikan di seluruh node baca/tulis kluster.

    CREATE TABLE dist1(
     id bigint NOT NULL, 
     c1 int, 
     c2 varchar(30), 
     PRIMARY key(id)
    ) dbdistribution BY hash(id);

    LIST sharding

    list adalah kumpulan daftar nilai enumerasi yang dapat memenuhi kebutuhan sharding berbasis enumerasi. Pada sharding list, definisi dilakukan menggunakan DBDISTRIBUTION BY LIST(expr), di mana expr merupakan singkatan dari expression, yang merepresentasikan nilai suatu kolom atau ekspresi berdasarkan nilai kolom tersebut. expr harus mengembalikan nilai integer. Setiap shard kemudian dapat didefinisikan dengan VALUES IN (value_list), di mana value_list adalah daftar nilai integer yang dipisahkan koma.

    CREATE TABLE t1 (
        id INT NOT NULL,
        store_id INT,
        partition_no INT,
        PRIMARY key(id, partition_no)
    ) DBDISTRIBUTION BY LIST(partition_no) (
      DBDISTRIBUTION a VALUES IN (1),
      DBDISTRIBUTION b VALUES IN (2)
    );

    Sharding LIST-COLUMNS

    Sharding list column sangat mirip dengan sharding list dan didefinisikan dengan menggunakan DBDISTRIBUTION BY LIST COLUMNS(column_list), di mana column_list dapat berupa satu atau beberapa nama kolom, bukan ekspresi. Faktanya, columns() tidak mengizinkan ekspresi selain nama kolom. Sharding list columns tidak lagi terbatas pada kolom integer. Jenis data yang didukung meliputi:

    • Semua tipe integer: TINYINT, SMALLINT, MEDIUMINT, INT (INTEGER), dan BIGINT.

    • Tipe numerik lain: misalnya, DECIMAL dan FLOAT tidak didukung.

    • Tipe tanggal: DATE dan DATETIME.

    • Tipe string: CHAR, VARCHAR, BINARY, dan VARBINARY. TEXT dan BLOB tidak didukung.

    CREATE TABLE t3 (
        id INT NOT NULL,
        store_id INT,
        partition_no varchar(20),
        PRIMARY key(id, partition_no)
    ) DBDISTRIBUTION BY LIST COLUMNS (partition_no) (
      DBDISTRIBUTION a values in ('id_1'),
      DBDISTRIBUTION b values in ('id_2')
    );

ALTER TABLE

Sintaks ALTER TABLE MySQL yang umum digunakan didukung. Tabel partisi kluster multi-master tidak mendukung modifikasi aturan distribusi atau operasi yang memerlukan reorganisasi shard. Untuk batasan spesifik, lihat bagian batasan pengembangan dalam topik ini.

CREATE INDEX

Sintaks CREATE INDEX MySQL yang umum digunakan didukung. Saat membuat primary key atau unique index, indeks tersebut harus mencakup semua kunci distribusi.

Kueri terdistribusi

Tabel partisi kluster multi-master mendukung kueri single-shard dan cross-shard. Untuk kueri read-only lintas shard, sistem dapat menggabungkan kemampuan kueri terdistribusi dengan Global read-only nodes untuk mengeksekusinya. Perilaku aktual bergantung pada konfigurasi kluster dan cakupan pernyataan SQL yang didukung.

Kolom auto-increment global

Tabel partisi kluster multi-master mendukung urutan auto-increment yang unik secara global. Saat beberapa node baca/tulis melakukan penulisan secara konkuren, mungkin terdapat celah pada nilai auto-increment, dan nilai-nilai tersebut tidak dijamin berurutan atau meningkat secara monoton ketat. Saat merancang logika bisnis, jangan mengandalkan kontinuitas nilai auto-increment.

CREATE TABLE t1( id int NOT NULL auto_increment, c1 int, c2 int, PRIMARY key(id, c1)) dbdistribution BY RANGE (c1) ( dbdistribution p0 VALUES less than (100), dbdistribution p1 VALUES less than (1000), dbdistribution p2 VALUES less than (10000), dbdistribution p3 VALUES less than (20000) );
Query OK, 0 rows affected (0.26 sec)

INSERT INTO t1 (c1, c2) VALUES (1, 1);
Query OK, 1 row affected (0.04 sec)

Batasan

Batasan berikut hanya berlaku untuk tabel partisi kluster multi-master:

Operasi

Batasan

Memodifikasi aturan distribusi atau kunci distribusi

Tidak didukung. Rencanakan kunci distribusi dengan baik saat membuat tabel.

Operasi maintenance shard

Tidak mendukung operasi langsung seperti menambah, menghapus, menggabungkan, atau mereorganisasi shard.

Primary key dan unique index

Harus mencakup semua kunci distribusi.

Foreign key dan beberapa indeks khusus

Saat ini tidak didukung. Verifikasi kompatibilitas SQL sebelum membuat tabel atau mengubah struktur tabel.

Operasi terkait ruang tabel dan direktori data

Saat ini tidak didukung.