Topik ini menjelaskan basis data PolarDB-X dalam mode AUTO dan mode DRDS serta perbedaan antara kedua mode tersebut.
Ikhtisar Mode Basis Data PolarDB-X
Basis data dalam mode AUTO tersedia di PolarDB-X V5.4.13 dan versi yang lebih baru, juga dikenal sebagai basis data dalam mode partisi otomatis. Mode ini mendukung fitur partisi otomatis, sehingga Anda tidak perlu menentukan kunci partisi saat membuat tabel. Data dalam tabel didistribusikan secara otomatis dan merata di antara partisi. Anda juga dapat menggunakan pernyataan MySQL standar untuk mempartisi tabel. Basis data dalam mode AUTO mendukung fitur-fitur seperti distribusi transparan, penskalaan otomatis, dan manajemen partisi.
Basis data PolarDB-X dengan versi lebih lama dari V5.4.13 adalah basis data dalam mode DRDS. Mode ini tidak mendukung partisi otomatis. Saat membuat tabel, Anda dapat menggunakan sintaks sharding khusus untuk PolarDB-X untuk menentukan kunci shard database dan kunci shard tabel. Jika tidak ada kunci shard yang ditentukan, tabel non-partisi akan dibuat.
PolarDB-X V5.4.13 dan versi yang lebih baru mendukung basis data dalam mode AUTO dan DRDS. Instance PolarDB-X dapat berisi basis data dalam kedua mode tersebut.
Catatan Penggunaan
Untuk membuat basis data dalam mode AUTO, tentukan
MODE='AUTO'dalam pernyataanCREATE DATABASE.Secara default, jika Anda tidak menentukan nilai parameter MODE dalam pernyataan
CREATE DATABASE, basis data dalam mode DRDS akan dibuat.Jika basis data Anda dalam mode AUTO, Anda tidak dapat menggunakan sintaks sharding basis data DRDS untuk membagi tabel saat membuat tabel. Anda hanya dapat membuat tabel partisi dalam basis data yang berada dalam mode AUTO.
Jika basis data Anda dalam mode DRDS, Anda tidak dapat menggunakan sintaks partisi tabel untuk membagi tabel saat membuat tabel. Anda hanya dapat membuat tabel bersharding dalam basis data yang berada dalam mode DRDS.
Anda tidak dapat membuat basis data dalam mode AUTO di kluster PolarDB-X edisi standar.
Gunakan Parameter MODE untuk Menentukan Mode Basis Data
PolarDB-X memungkinkan Anda menentukan parameter MODE saat membuat basis data sehingga Anda dapat memutuskan untuk membuat basis data dalam mode AUTO atau DRDS. Tabel berikut menjelaskan cara menentukan parameter MODE.
Setelah basis data dibuat, mode basis data tidak dapat diubah.
Parameter | Nilai | Deskripsi | Sintaks untuk membuat basis data | Sintaks untuk membuat tabel |
MODE | 'AUTO' | Menentukan bahwa basis data dibuat dalam mode AUTO. | Contoh: Untuk informasi lebih lanjut, lihat CREATE DATABASE. | Tabel yang dibuat dalam basis data dalam mode AUTO adalah partitioned tables. Anda dapat menggunakan pernyataan CREATE TABLE MySQL standar untuk membuat tabel. Untuk informasi tentang cara membuat tabel partisi, lihat CREATE TABLE (mode AUTO). |
'DRDS' (default) Catatan Jika Anda tidak menentukan parameter MODE, sistem akan membuat basis data dalam mode DRDS. | Menentukan bahwa basis data dibuat dalam mode DRDS. | Contoh:
Untuk informasi lebih lanjut, lihat CREATE DATABASE. | Tabel yang dibuat dalam basis data dalam mode DRDS adalah sharded tables. Untuk informasi tentang cara membuat tabel bersharding, lihat CREATE TABLE (mode DRDS). |
Partisi Otomatis dan Partisi Manual
Automatic partitioning
Untuk mengonfigurasi partisi otomatis, Anda tidak perlu menentukan item konfigurasi terkait partisi, seperti kunci partisi dan kebijakan partisi, saat membuat tabel. PolarDB-X secara otomatis memilih kunci partisi dan melakukan partisi horizontal pada tabel dan indeks tabel. Hanya tabel dari basis data dalam mode AUTO yang dapat dipartisi secara otomatis. Fitur partisi otomatis tidak tersedia untuk basis data dalam mode DRDS.
Contoh:
Anda dapat menjalankan pernyataan berikut dalam sintaks MySQL standar tanpa menentukan item konfigurasi terkait partisi untuk membuat tabel bernama tb:
CREATE TABLE tb(a INT, b INT, PRIMARY KEY(a));Jika Anda menjalankan pernyataan DDL sebelumnya pada basis data dalam mode DRDS, tabel non-partisi akan dibuat.
Anda dapat menjalankan pernyataan
SHOWuntuk melihat detail pernyataan CREATE TABLE.SHOW FULL CREATE TABLE tb \G *************************** 1. row *************************** Table: tb Create Table: CREATE TABLE `tb` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 1 row in set (0.02 sec)Jika Anda menjalankan pernyataan DDL sebelumnya pada basis data dalam mode AUTO, tabel partisi akan dibuat. Tabel tersebut dipartisi secara otomatis berdasarkan kunci utama. Anda dapat menjalankan pernyataan
SHOWuntuk melihat detail pernyataan CREATE TABLE.SHOW FULL CREATE TABLE tb \G *************************** 1. row *************************** TABLE: tb CREATE TABLE: CREATE PARTITION TABLE `tb` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 PARTITION BY KEY(`a`) PARTITIONS 16 1 row in set (0.01 sec)
Jika basis data dalam mode AUTO, Anda dapat membuat tabel dengan menggunakan sintaks MySQL standar, seperti sintaks untuk membuat indeks. Fitur partisi otomatis dari PolarDB-X menyediakan kemampuan basis data terdistribusi, seperti distribusi transparan, penskalaan otomatis, dan manajemen partisi.
Manual partitioning
Saat menggunakan metode partisi manual untuk membuat tabel, Anda perlu menentukan item konfigurasi terkait partisi seperti kunci partisi dan kebijakan partisi. Jika tabel dipartisi secara manual, sintaks yang digunakan untuk membuat tabel dalam basis data dalam mode AUTO berbeda dari sintaks yang digunakan untuk membuat tabel dalam basis data dalam mode DRDS.
Mode AUTO: Anda dapat menggunakan sintaks MySQL standar untuk membuat tabel partisi. Kebijakan partisi seperti partisi hash, partisi rentang, dan partisi daftar didukung.
Dalam contoh berikut, klausa
PARTITION BY HASH(a)digunakan untuk menentukan kunci partisi a dan kebijakan partisi hash.CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a)) -> PARTITION by HASH(a) PARTITIONS 4; Query OK, 0 rows affected (0.83 sec) SHOW FULL CREATE TABLE tb\G *************************** 1. row *************************** TABLE: tb CREATE TABLE: CREATE TABLE `tb` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 PARTITION BY KEY(`a`) PARTITIONS 4 1 row in set (0.02 sec)Mode DRDS: Anda dapat menggunakan sintaks sharding untuk basis data dalam mode DRDS saat membuat tabel. Hanya kebijakan hash yang didukung.
Dalam contoh berikut, klausa
DBPARTITION BY HASH(a) TBPARTITION BY HASH(a)digunakan untuk menentukan bahwa kolom a adalah kunci sharding.CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a)) -> DBPARTITION by HASH(a) -> TBPARTITION by HASH(a) -> TBPARTITIONS 4; Query OK, 0 rows affected (1.16 sec) SHOW FULL CREATE TABLE tb\G *************************** 1. row *************************** Table: tb Create Table: CREATE TABLE `tb` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 dbpartition by hash(`a`) tbpartition by hash(`a`) tbpartitions 4 1 row in set (0.02 sec)
Perbandingan Algoritma Routing yang Digunakan untuk Tabel Partisi dan Tabel Bersharding
Perbedaan utama antara tabel partisi dan tabel bersharding adalah algoritma routing yang digunakan untuk tabel partisi berbeda dari algoritma routing yang digunakan untuk tabel bersharding.
Dalam algoritma routing yang digunakan untuk tabel bersharding, nilai hash dan jumlah shard tabel fisik digunakan untuk melakukan operasi modulo. Jika Anda ingin mengubah jumlah shard, nilai hash dari semua data perlu dihitung ulang. Misalnya, jika Anda ingin mengubah jumlah shard dari empat menjadi lima, Anda perlu menghitung ulang nilai hash untuk semua data. Algoritma routing yang digunakan untuk sharding tabel dalam mode DRDS tidak cocok untuk skenario di mana Anda ingin mengubah jumlah shard.
Algoritma routing default yang digunakan untuk tabel partisi adalah algoritma hashing konsisten berbasis rentang. Algoritma ini memungkinkan Anda melakukan operasi pada partisi, seperti membagi partisi dan menggabungkan partisi, untuk mengubah jumlah partisi. Anda tidak perlu menghitung ulang nilai hash untuk semua data saat menggunakan algoritma ini. Dalam mode AUTO, Anda dapat mengubah jumlah partisi dari sebuah tabel.
Perbandingan Fitur yang Disediakan untuk Basis Data dalam Mode AUTO dan Mode DRDS
Dibandingkan dengan basis data dalam mode DRDS, basis data dalam mode AUTO mendukung fitur baru seperti partisi otomatis, pemisahan data panas, penjadwalan partisi, dan tabel time to live (TTL). Fitur distribusi yang disediakan untuk basis data dalam mode AUTO juga dioptimalkan berdasarkan berbagai dimensi seperti manajemen partisi dan modifikasi partisi.
Tabel berikut menjelaskan perbedaan antara fitur yang disediakan untuk basis data dalam mode AUTO dan mode DRDS.
Fitur | Basis Data dalam Mode AUTO | Basis Data dalam Mode DRDS | |
Distribusi Transparan | Partisi Berbasis Kunci Utama Default | Didukung. Jika Anda tidak mengonfigurasi kebijakan partisi saat membuat tabel, tabel akan dipartisi secara otomatis berdasarkan kunci utama. | Tidak Didukung. |
Indeks Sekunder Global (GSIs) Default | Didukung. Jika Anda tidak menentukan kebijakan partisi untuk tabel indeks, tabel indeks akan dipartisi secara otomatis berdasarkan kolom kunci indeks. | Tidak Didukung. | |
Keseimbangan Beban | Didukung. | Tidak Didukung. | |
Distribusi Data Panas | Didukung. | Tidak Didukung. | |
Kebijakan Partisi | Partisi Hash dan Partisi Kunci | Didukung. Algoritma routing hashing konsisten digunakan. Data panas dapat dibagi menjadi beberapa partisi dan didistribusikan di antara beberapa node data. | Operasi modulo dapat dilakukan berdasarkan jumlah shard untuk merutekan data. Data panas tidak dapat dibagi menjadi beberapa shard dan didistribusikan di antara beberapa node data. |
Partisi Rentang dan Partisi Kolom Rentang | Didukung. Data panas dapat dibagi menjadi beberapa partisi dan didistribusikan di antara beberapa node data. | Tidak Didukung. | |
Partisi Daftar dan Partisi Kolom Daftar | Didukung. | Tidak Didukung. | |
Vektor Kunci Partisi (Beberapa kolom digunakan sebagai kunci partisi.) | Didukung. Vektor dapat digunakan sebagai kunci partisi. Misalnya, Anda dapat menggunakan klausa | Tidak Didukung. | |
Urutan Kunci Partisi | Didukung. | Tidak Didukung. | |
Tabel Non-Partisi dan Tabel Siaran | Didukung. | Didukung. | |
Manajemen Partisi | Pembuatan, Penghapusan, dan Modifikasi Partisi | Didukung. | Tidak Didukung. |
Pemisahan dan Penggabungan Partisi | Didukung. | Tidak Didukung. | |
Migrasi Partisi | Didukung. | Tidak Didukung. | |
Pengosongan Partisi | Didukung. | Tidak Didukung. | |
Analisis Partisi Data Panas | Fitur ini akan segera dirilis. Partisi data panas dapat dianalisis secara otomatis. | Tidak Didukung. | |
Modifikasi Tabel | Perubahan Jenis Tabel (Jenis tabel dapat diubah menjadi tabel non-partisi, tabel siaran, dan tabel partisi.) | Didukung. | Didukung. |
Modifikasi Partisi (Jumlah partisi, jenis kunci partisi, dan kebijakan partisi dapat diubah.) | Didukung. | Didukung. | |
Penskalaan Otomatis | Apakah operasi penulisan data terganggu selama operasi penskalaan | Tidak | Ya. Operasi penulisan data terganggu untuk jangka waktu singkat. |
Apakah operasi DDL lainnya dapat dilakukan selama operasi penskalaan | Ya. | Tidak | |
Lokalitas | Isolasi Penyimpanan Statis | Didukung. Anda dapat menentukan sumber daya penyimpanan fisik saat membuat basis data, tabel, dan partisi. | Didukung. Anda dapat menentukan sumber daya penyimpanan fisik saat membuat basis data dan tabel. |
Isolasi Penyimpanan Dinamis | Didukung. Anda dapat memodifikasi sumber daya penyimpanan fisik yang digunakan untuk basis data dan tabel secara dinamis. | Tidak Didukung. | |
Kompatibel dengan Penskalaan Otomatis | Ya. | Tidak | |
Pemangkasan Partisi | Pemangkasan Partisi Berdasarkan Awalan | Didukung. Saat Anda menggunakan | Tidak Didukung. |
Folding Konstan dalam Ekspresi Perhitungan | Didukung. Sebagai contoh, pemangkasan partisi dapat dilakukan berdasarkan kondisi | Tidak Didukung. Kunci partisi harus ditentukan oleh konstanta seperti pk = 123. Jika kunci partisi ditentukan oleh ekspresi perhitungan seperti | |
Opsi Sensitivitas Huruf Besar-Kecil dan Mengabaikan Spasi di Akhir Baris dalam Konfigurasi Routing Partisi | Didukung. Anda dapat menentukan urutan untuk kunci partisi untuk menentukan apakah akan memastikan sensitivitas huruf besar-kecil dan mengabaikan spasi di akhir baris dalam routing partisi. | Tidak Didukung. Urutan tidak dapat digunakan untuk kolom kunci partisi. Jika Anda menggunakan algoritma hash, sensitivitas nilai dapat dipastikan, dan spasi yang ditentukan di akhir baris tidak dapat diabaikan. | |
Penurunan Operasi Join | Didukung. Saat operasi dilakukan pada partisi, seperti membagi, menggabungkan, dan memigrasikan partisi, proses penurunan operasi join tidak terpengaruh. | Didukung. | |
Pemilihan Partisi | Didukung. Anda dapat menggunakan pernyataan SELECT untuk menanyakan data dari partisi tertentu. Sebagai contoh, Anda dapat menjalankan | Tidak Didukung. | |
TTL | Didukung. | Tidak Didukung. | |
AUTO_INCREMENT | Didukung. Nilai dalam kolom auto-increment bersifat unik secara global, meningkat secara monoton, dan berurutan. | Didukung. Nilai dalam kolom auto-increment bersifat unik secara global tetapi mungkin tidak meningkat secara monoton dan berurutan. | |
Perbandingan Kinerja Basis Data dalam Mode DRDS dan Mode AUTO
Algoritma routing yang digunakan untuk sharding tabel dalam mode DRDS berbeda dari algoritma routing yang digunakan untuk partisi tabel dalam mode AUTO. Sysbench digunakan untuk melakukan pengujian benchmark untuk basis data PolarDB-X untuk mendapatkan permintaan per detik (QPS) saat algoritma digunakan dalam skenario pengujian Sysbench yang berbeda. Anda dapat menggunakan hasil pengujian untuk mengevaluasi perbedaan antara kinerja algoritma routing.
Test environment
Jenis instance PolarDB-X: polarx.x4.2xlarge.2e
CN (16C64G) × 2
DN (16C64G) × 2
Versi: 5.4.13-16415631
Pengaturan partisi tabel dan pengaturan sharding tabel:
Partisi Tabel:
32 partisi
Klausa partisi: PARTITION BY HASH(id) PARTITIONS 32
Total volume data: 160 juta baris
Sharding Tabel:
32 shard tabel fisik
Klausa sharding: DBPARTITION BY HASH(id) TBPARTITION BY HASH(id) TBPARTITION 2
Total volume data: 160 juta baris
Test scenario
Daftar berikut menjelaskan skenario di mana pengujian Sysbench dilakukan:
oltp_point_select: Pernyataan yang hanya mencakup kondisi kesetaraan dieksekusi untuk melakukan operasi pembacaan titik. Kunci partisi tabel digunakan dalam klausa WHERE.
oltp_read_only: Pernyataan yang mencakup operator BETWEEN atau kondisi kesetaraan dieksekusi untuk melakukan operasi pembacaan rentang kecil dan pembacaan titik dalam transaksi. Kunci partisi tabel digunakan dalam klausa WHERE.
oltp_read_write: Operasi pembacaan titik, operasi penulisan titik, operasi pembacaan rentang kecil, dan operasi penulisan rentang kecil dilakukan berdasarkan kunci partisi tabel untuk memproses transaksi.
Test results
Hasil analisis berikut diperoleh berdasarkan hasil pengujian sebelumnya:
Algoritma routing hashing konsisten yang digunakan dalam partisi tabel lebih kompleks daripada algoritma routing hash modular yang digunakan dalam sharding. Dalam skenario di mana query oltp_point_select dilakukan, QPS untuk partisi tabel serupa dengan QPS untuk sharding.
Ekspresi dalam pernyataan yang digunakan untuk melakukan query oltp_read_only dan oltp_read_write lebih kompleks daripada ekspresi dalam pernyataan yang digunakan untuk melakukan query oltp_point_select karena query rentang kecil diperlukan dalam query oltp_read_only dan oltp_read_write. Dalam hal ini, QPS keseluruhan pada tabel partisi sekitar 33% lebih tinggi daripada QPS keseluruhan pada tabel bersharding karena tabel partisi dipangkas.
FAQ
How do I determine whether to create a database in AUTO mode or DRDS mode?
Mode AUTO didukung di PolarDB-X V5.4.13 dan versi yang lebih baru. Jika aplikasi Anda bermigrasi dari PolarDB-X 1.0, Anda hanya dapat menggunakan basis data dalam mode AUTO. Saat Anda menerapkan aplikasi baru, Anda dapat menggunakan basis data dalam mode AUTO.
How do I determine whether to use the automatic partitioning method or manual partitioning method when I create a table in a database in AUTO mode?
Jika tabel yang Anda buat digunakan untuk pengujian aplikasi, Anda dapat menggunakan metode partisi otomatis untuk mempartisi tabel. Jika Anda ingin memodifikasi partisi untuk mengoptimalkan kinerja basis data, Anda dapat menjalankan pernyataan DDL
ALTER PARTITIONuntuk mengubah metode partisi tabel. Jika Anda mengetahui pernyataan SQL yang digunakan dalam skenario bisnis Anda dan memahami hubungan yang didefinisikan antara tabel individu, Anda dapat menggunakan metode partisi manual saat membuat tabel.How can I change the mode of a database from DRDS to AUTO?
Untuk PolarDB-X V5.4.16 dan versi yang lebih baru, Anda dapat menggunakan salah satu dari metode berikut untuk mengubah mode basis data dari DRDS ke AUTO. Untuk PolarDB-X dengan versi lebih lama dari V5.4.16, hanya metode 2 dan 3 yang didukung. Untuk informasi lebih lanjut tentang cara melihat versi instance PolarDB-X, lihat Lihat versi instance.
Metode 1: PolarDB-X V5.4.16 dan versi yang lebih baru memungkinkan Anda mengubah mode basis data dari DRDS ke AUTO dengan menjalankan pernyataan CREATE DATABASE LIKE atau CREATE DATABASE AS. Untuk informasi lebih lanjut, lihat Konversi basis data dalam mode DRDS ke basis data dalam mode AUTO.
Metode 2: Anda dapat membuat basis data dalam mode AUTO di instance tujuan dan membuat tabel di basis data tersebut. Kemudian, gunakan Data Transmission Service (DTS) untuk memigrasikan data dari basis data sumber yang berada dalam mode DRDS ke tabel di basis data tujuan yang berada dalam mode AUTO.
Metode 3: Jalankan perintah
mysqldumpuntuk mengekspor file data dari basis data sumber yang berada dalam mode DRDS, tidak termasuk pernyataan CREATE TABLE. Kemudian, buat basis data dalam mode AUTO dan buat tabel di basis data tersebut. Kemudian, jalankan perintahsourceuntuk mengimpor file data yang telah diekspor ke basis data tujuan yang berada dalam mode AUTO.
What is the number of partitions that are generated if I use the automatic partitioning method when I create a table in a database in AUTO mode?
Jumlah partisi tabel dalam mode AUTO dihitung dengan menggunakan rumus berikut: Number of nodes that is specified when the instance is created × 8. Sebagai contoh, jika Anda menentukan 2 sebagai nilai parameter Nodes saat membuat instance, jumlah partisi tabel yang dipartisi secara otomatis adalah 16. Jumlah partisi tabel yang dipartisi secara otomatis tetap tidak berubah meskipun Anda menambahkan node ke instance. Jika Anda ingin mengubah jumlah partisi tabel, Anda dapat memodifikasi nilai parameter AUTO_PARTITION_PARTITIONS.
Can I change the number of partitions of a table that is automatically partitioned?
Ya, Anda dapat mengubah jumlah partisi tabel. Untuk mengubah jumlah partisi tabel yang dipartisi secara otomatis, modifikasi nilai parameter AUTO_PARTITION_PARTITIONS untuk instance yang berisi tabel tersebut. Konfigurasi parameter AUTO_PARTITION_PARTITIONS berlaku untuk semua tabel dalam instance. Setelah nilai parameter AUTO_PARTITION_PARTITIONS dimodifikasi, jumlah partisi tabel baru yang dibuat dengan menggunakan metode partisi otomatis sama dengan nilai baru parameter AUTO_PARTITION_PARTITIONS. Perhatikan bahwa jika jumlah partisi dalam tabel baru berbeda dari jumlah partisi dalam tabel asli, operasi JOIN antara kedua tabel tidak dapat diturunkan, yang memengaruhi efisiensi eksekusi. Kami merekomendasikan agar Anda secara manual menyetel jumlah partisi dalam tabel baru agar sesuai dengan jumlah partisi dalam tabel asli. Untuk informasi lebih lanjut, lihat Gunakan ALTER TABLE untuk memodifikasi partisi tabel (mode AUTO).