Global secondary indexes (GSIs) memungkinkan Anda menambahkan dimensi sharding ke tabel PolarDB-X sehingga kueri pada kolom yang bukan kunci shard tidak memerlukan pemindaian cross-shard penuh. Setiap GSI didukung oleh tabel indeks yang disinkronkan oleh PolarDB-X dengan tabel utama menggunakan transaksi XA.
Cara kerja
Dalam database terdistribusi, setiap tabel logis dibagi menjadi beberapa shard berdasarkan kunci shard. Ketika sebuah kueri melakukan filter pada kolom yang bukan kunci shard, PolarDB-X harus memindai semua shard—yaitu menjalankan kueri cross-shard. Seiring pertumbuhan ukuran tabel dan lalu lintas, pemindaian semacam ini menyebabkan kueri menjadi lambat dan kolam koneksi habis.
GSI mengatasi masalah ini dengan memelihara tabel indeks terpisah yang di-shard berdasarkan kolom yang diindeks. PolarDB-X mengarahkan kueri langsung ke shard yang relevan dalam tabel indeks, lalu hanya mengambil baris yang sesuai dari tabel utama bila diperlukan.
Kemampuan utama
| Kemampuan | Deskripsi |
|---|---|
| Dimensi sharding tambahan | Indeks kolom selain kunci shard tabel utama untuk mengarahkan kueri tanpa pemindaian cross-shard |
| Indeks unik global | Menerapkan batasan unik di seluruh shard |
| Konsistensi kuat | Transaksi XA menjaga sinkronisasi antara tabel indeks dan tabel utama setiap saat |
| Kolom yang dicakup | Menyertakan kolom tambahan dalam tabel indeks untuk menghindari lookup ke tabel utama |
| Perubahan skema online | Menambahkan GSI tanpa mengunci tabel utama |
| Petunjuk indeks | Menentukan indeks mana yang akan digunakan; PolarDB-X menentukan apakah diperlukan lookup ke tabel utama |
FAQ
Masalah apa saja yang diatasi oleh GSIs?
Ketika kolom yang Anda kueri berbeda dari kunci shard tabel utama, PolarDB-X menjalankan kueri cross-shard. Pada skala besar, hal ini menyebabkan kueri menjadi lambat dan kolam koneksi habis. GSI mengurangi kueri cross-shard dengan menambahkan dimensi sharding alternatif, sehingga kueri dapat menargetkan shard tertentu dalam tabel indeks alih-alih memindai semua shard.
Saat membuat GSI, pilih kunci shard yang berbeda dari kunci shard tabel utama. Lihat Use global secondary indexes untuk detailnya.
Apa perbedaan antara GSI dan local secondary index (LSI)?
GSI menyimpan baris indeks pada shard yang berbeda dari baris data. GSI menentukan shard mana yang menyimpan data yang relevan dan mengarahkan kueri ke sana, sehingga memungkinkan kueri efisien melintasi batas shard.
LSI menyimpan baris indeks pada shard yang sama dengan baris data. Di PolarDB-X 1.0, LSI secara spesifik merujuk pada indeks secondary MySQL pada tabel fisik. Ketika PolarDB-X 1.0 mengarahkan kueri ke satu shard menggunakan GSI, LSI pada shard tersebut dapat lebih meningkatkan performa kueri di dalam shard tersebut.