Liquid Table adalah mode penyimpanan tabel yang diperkenalkan di Hologres V4.2.0, memungkinkan Anda mengubah Table Group tabel (dan karenanya jumlah shard-nya) secara online setelah pembuatan—tanpa perlu rebuild tabel, tanpa downtime, dan tanpa migrasi data manual.
Ikhtisar
Apa itu Liquid Table
Liquid Table adalah mode penyimpanan tabel baru di Hologres dengan kemampuan utama sebagai berikut:
Menetapkan ulang tabel ke Table Group berbeda secara dinamis (yaitu, mengubah jumlah shard-nya) secara online setelah pembuatan, tanpa rebuild tabel, tanpa gangguan layanan, dan tanpa migrasi data manual.
Fitur ini mengatasi masalah lama pada gudang data tradisional, di mana penyesuaian granularitas shard setelah pertumbuhan data sangat mahal:
|
Masalah (mode tradisional) |
Cara Liquid Table mengatasinya |
|
Jumlah shard awal salah sehingga memerlukan rebuild penuh tabel |
Jalankan |
|
Data menjadi dua kali lipat tetapi konkurensi kueri mencapai batas maksimum, memaksa migrasi |
Skala keluar shard secara online; data didistribusikan ulang secara otomatis di latar belakang |
|
Skala-masuk memerlukan rebuild tabel untuk mereklaim resource |
Skala-masuk secara online; kompaksi latar belakang mengonsolidasi data ke dalam lebih sedikit shard |
|
Waktu henti layanan selama operasi penskalaan |
Baca dan tulis terus berjalan (latensi tulis mungkin melonjak sebentar; latensi baca tidak terpengaruh) |
Kemampuan utama
-
Resharding Online: Gunakan
ALTER TABLEuntuk mengubah jumlah shard kapan saja, transparan bagi aplikasi. -
Beberapa format penyimpanan: Mendukung kolom (
column), berorientasi baris (row), dan hibrida (row,column). -
Redistribusi data terkendali: Pilih antara redistribusi latar belakang otomatis atau melewati redistribusi untuk perpindahan metadata yang lebih cepat.
-
Kontrol jendela partisi: Batasi redistribusi hanya pada N hari/bulan partisi terbaru, mengurangi overhead I/O.
-
Kompatibilitas fitur luas: Berfungsi dengan Dynamic Table, GSI, indeks teks penuh, indeks vektor (HGraph), Time Travel (MVCC), Binlog, dan tabel partisi logis.
Kasus penggunaan khas
-
Pertumbuhan data melampaui estimasi shard awal: Mulai dengan 16 shard, skala ke 64 enam bulan kemudian.
-
Skala keluar sementara untuk event trafik: Tambahkan shard sebelum event penjualan untuk meningkatkan konkurensi kueri, lalu skala-masuk setelahnya untuk mereklaim resource.
-
Manajemen partisi hot/cold: Skala-masuk partisi historis cold sambil mempertahankan partisi hot dalam skala keluar.
-
Pencarian vektor AI dengan skalabilitas elastis: Skala dinamis tabel vektor seiring pertumbuhan volume recall; indeks tetap tersedia sepanjang proses.
Prasyarat
Instans Hologres Anda harus menjalankan V4.2.0 atau versi yang lebih baru. Untuk memeriksa versi instans Anda, lihat Daftar pernyataan SQL.
Memulai cepat
Buat Liquid Table
Tambahkan WITH (liquid_table = 'true') ke pernyataan CREATE TABLE Anda:
-- Penyimpanan kolom (default, untuk workload OLAP)
CREATE TABLE my_table (
id INT NOT NULL,
name TEXT,
ts TIMESTAMPTZ,
PRIMARY KEY(id)
) WITH (liquid_table = 'true');
-- Penyimpanan berorientasi baris (untuk pencarian titik / pembaruan frekuensi tinggi)
CREATE TABLE my_row_table (
id INT NOT NULL,
name TEXT,
PRIMARY KEY(id)
) WITH (liquid_table = 'true', orientation = 'row');
-- Penyimpanan hibrida (untuk workload campuran pencarian titik + OLAP)
CREATE TABLE my_hybrid_table (
id INT NOT NULL,
name TEXT,
PRIMARY KEY(id)
) WITH (liquid_table = 'true', orientation = 'row,column');
Ubah jumlah shard (Resharding)
Resharding dilakukan dengan menetapkan ulang tabel ke Table Group berbeda:
-- Buat Table Group target jika belum ada
CALL hg_create_table_group('tg_64', 64);
-- Skala keluar (berlaku secara sinkron)
ALTER TABLE my_table SET (table_group = 'tg_64');
-- Skala-masuk
ALTER TABLE my_table SET (table_group = 'tg_16');
Perintah ALTER langsung mengembalikan respons begitu perpindahan metadata selesai. Tulisan dan kueri baru langsung menggunakan tata letak shard baru; data yang sudah ada didistribusikan ulang secara asinkron di latar belakang.
Verifikasi konfigurasi shard saat ini
-- Periksa Table Group dan jumlah shard untuk suatu tabel
SELECT property_key, property_value
FROM hologres.hg_table_properties
WHERE table_name = 'my_table'
AND property_key = 'table_group';
-- Periksa metadata Table Group
SELECT * FROM hologres.hg_table_group_properties
WHERE tablegroup_name = 'tg_64';
Referensi properti tabel
Properti saat pembuatan
|
Properti |
Tipe |
Default |
Deskripsi |
|
liquid_table |
BOOLEAN |
false |
Mengaktifkan mode Liquid Table. Harus ditentukan saat pembuatan tabel; tidak dapat diaktifkan nanti melalui ALTER TABLE. |
|
orientation |
STRING |
column |
Format penyimpanan: |
|
liquid_table_enable_data_reorganization |
BOOLEAN |
true |
Apakah akan mendistribusikan ulang data yang sudah ada secara otomatis di latar belakang setelah Resharding. |
|
liquid_table_reorganization_partition_window |
STRING |
Semua partisi |
Batasi redistribusi hanya pada partisi dalam jendela waktu tertentu, misalnya |
Memilih nilai yang tepat untuk liquid_table_enable_data_reorganization
|
Nilai |
Perilaku |
Paling cocok untuk |
|
true (default) |
Redistribusi latar belakang berjalan setelah Resharding, menimbulkan overhead I/O hingga selesai. |
Tabel aktif berumur panjang di mana stabilitas performa kueri penting. |
|
false |
Tidak ada redistribusi latar belakang. Performa kueri pada data lama mungkin menurun. |
Tabel yang akan segera diarsipkan atau dipotong; skenario sementara di mana penurunan performa ringan dapat diterima. |
Catatan performa untuk mode false: Hologres menggunakan oversharding internal hingga 8x untuk mengurangi kehilangan performa. Dalam skenario penskalaan tipikal 2–4x, dampaknya hampir nol. Namun, ketika faktor penskalaan jauh melebihi batas oversharding (misalnya 16x atau lebih), performa kueri data lama dapat menurun secara proporsional.
Contoh jendela partisi
-- Redistribusi hanya partisi 30 hari terakhir (memerlukan kunci partisi bertipe waktu)
ALTER TABLE order_log SET (
table_group = 'tg_64',
liquid_table_reorganization_partition_window = '30 day'
);
Ini ideal untuk tabel log atau fakta dengan retensi panjang di mana partisi historis cold jarang diakses—hanya partisi hot yang perlu didistribusikan ulang.
Kompatibilitas fitur
Matriks kompatibilitas (V4.2.0)
|
Kombinasi fitur |
Didukung |
Keterangan |
|
Dynamic Table sebagai Liquid Table |
Ya |
Setelah Resharding, Dynamic Table menjalani rebuild penuh sekali dengan latensi refresh lebih lama, lalu melanjutkan komputasi inkremental. |
|
Liquid Table sebagai tabel sumber untuk Dynamic Table |
Ya |
Setelah Resharding, Dynamic Table menjalani rebuild penuh sekali dengan latensi refresh lebih lama, lalu melanjutkan komputasi inkremental. |
|
Global Secondary Index (GSI) |
Ya |
Tabel dengan GSI dapat di-reshard di V4.2. |
|
Indeks terbalik teks penuh |
Ya |
Indeks tetap dapat digunakan setelah Resharding. |
|
Indeks vektor (HGraph) |
Ya |
Indeks tetap dapat digunakan; hasil pencarian perkiraan tetap stabil. |
|
Tabel partisi logis |
Ya |
Resharding didukung; partisi otomatis berfungsi normal. |
|
Time Travel (MVCC) |
Ya |
Data historis tetap dapat dikueri setelah Resharding. |
|
Binlog |
Memerlukan GUC eksperimental |
Memerlukan GUC eksperimental dan memiliki persyaratan khusus untuk konsumen downstream. |
|
Tabel partisi fisik |
Tidak |
Gunakan tabel partisi logis sebagai gantinya. |
|
Materialized view (MV) |
Tidak |
|
|
Mengonversi tabel yang sudah ada ke Liquid Table melalui ALTER |
Tidak |
Harus menggunakan pendekatan migrasi rebuild. |
|
Pembacaan langsung MaxCompute terhadap Liquid Table |
Tidak |
Belum didukung. |
Contoh koeksistensi indeks
-- Indeks teks penuh
CREATE INDEX ft_idx ON my_table USING FULLTEXT (content)
WITH (tokenizer = 'jieba');
-- GSI (Global Secondary Index)
CREATE GLOBAL INDEX gsi_name ON my_table(name) INCLUDE (ts);
-- Indeks vektor (melalui properti vectors)
ALTER TABLE my_table SET (vectors = '{
"embedding": {
"algorithm": "HGraph",
"distance_method": "Cosine"
}
}');
Setelah membuat indeks pada Liquid Table, Anda dapat melakukan Resharding melalui ALTER TABLE ... SET (table_group = '...') secara langsung. Semua indeks tetap dapat digunakan pada shard baru secara otomatis.
Dampak Resharding terhadap workload
Bagian ini wajib dibaca oleh pengembang gudang data dan DBA sebelum menjalankan ALTER TABLE ... SET (table_group = ...).
Resharding terdiri dari dua fase internal:
-
Perpindahan metadata (sinkron): Perintah
ALTER TABLEitu sendiri. Selesai dalam hitungan detik; topologi shard baru berlaku saat perintah mengembalikan respons. -
Redistribusi data (latar belakang asinkron): Memindahkan/mengompaksi data yang sudah ada dari shard lama ke shard baru. Durasi tergantung pada volume data, faktor penskalaan, dan I/O yang tersedia.
Sepanjang proses, baca dan tulis diharapkan terus berjalan tanpa kegagalan atau pemblokiran. Namun, latensi tulis dan performa kueri data lama akan terpengaruh secara nyata. Rencanakan jendela pemeliharaan dan strategi rollback Anda dengan asumsi dampak terlihat—jangan asumsikan dampak nol.
Rangkuman dampak
|
Dimensi |
Fase perpindahan metadata (detik) |
Fase redistribusi data (latar belakang asinkron) |
|
Ketersediaan layanan |
Tidak ada gangguan yang diharapkan |
Tidak ada gangguan yang diharapkan |
|
Kegagalan permintaan |
Tidak ada kegagalan yang diharapkan (dalam kasus ekstrem, sejumlah kecil error transien mungkin terjadi — andalkan retry klien) |
Tidak ada kegagalan yang diharapkan |
|
Latensi tulis |
Lonjakan yang teramati, biasanya milidetik hingga detik, berpotensi lebih lama dalam beberapa kasus |
Mungkin sedikit meningkat karena kontensi I/O latar belakang |
|
Throughput tulis |
Penurunan yang teramati sebelum dan sesudah perpindahan |
Sangat bergantung pada ruang I/O instans; mungkin dibatasi lajunya |
|
Performa kueri data baru |
Sebagian besar tidak terpengaruh |
Sebagian besar tidak terpengaruh (sudah ditulis ke shard baru) |
|
Performa kueri data lama |
Mungkin menurun segera |
Mungkin terus menurun hingga redistribusi selesai; penurunan bisa signifikan, tetapi skenario tipikal (misalnya penskalaan 2x) sebagian besar dapat menghindarinya |
|
Ketersediaan indeks |
Tetap tersedia |
Tetap tersedia (performa mungkin terpengaruh oleh kontensi I/O yang mendasarinya) |
|
Konsistensi transaksional |
Dijamin |
Dijamin |
Pernyataan "tidak ada gangguan yang diharapkan" dan "tidak ada kegagalan yang diharapkan" dalam tabel di atas menunjukkan perilaku dalam kondisi umum dan bukan jaminan absolut. Perilaku aktual bergantung pada spesifikasi instans, volume data, beban konkuren, dan faktor penskalaan. Kami sangat menyarankan melakukan latihan di lingkungan pengujian sebelum melakukan Resharding di produksi.
Dampak pada penulisan
1) Tulisan tidak diharapkan gagal, tetapi konfigurasikan retry klien. Selama perpindahan metadata, sejumlah kecil permintaan konkuren mungkin mengalami error transien (misalnya timeout koneksi). Konektor harus memiliki retry otomatis yang diaktifkan. Tidak akan ada ketidaktersediaan tulis yang berkepanjangan.
2) Latensi tulis akan mengalami lonjakan yang teramati—ini bukan "dampak nol". Tulisan yang sedang berjalan harus menunggu topologi baru berlaku. Lonjakan biasanya dalam kisaran milidetik hingga detik, tetapi mungkin lebih lama ketika:
-
Transaksi berdurasi panjang aktif pada tabel.
-
Pemanfaatan I/O instans sudah tinggi.
-
Faktor penskalaan sangat besar (misalnya 8 shard langsung ke 128 shard).
3) Selama fase redistribusi, tulisan tidak diblokir tetapi latensi mungkin sedikit meningkat.
-
Migrasi data latar belakang mengonsumsi I/O instans dan mungkin bersaing dengan tulisan foreground untuk resource.
-
Pada instans dengan pemanfaatan I/O tinggi, latensi tulis selama redistribusi mungkin sedikit lebih tinggi daripada kondisi stabil, dan throughput juga mungkin sedikit menurun.
-
Kami menyarankan terus memantau I/O instans dan metrik RT tulis selama fase redistribusi.
4) Untuk workload COPY / impor massal: mulai impor massal hanya setelah Resharding dan redistribusi benar-benar selesai. Mengimpor volume besar selama Resharding secara signifikan memperpanjang waktu redistribusi dan memperkuat fluktuasi latensi tulis.
Dampak terhadap kueri
1) Kueri tidak diharapkan gagal atau diblokir.
-
Selama perpindahan metadata, kueri baru dieksekusi terhadap topologi baru.
-
Kueri yang sedang berjalan selesai secara normal.
-
Dalam kasus langka, kueri yang dikeluarkan tepat pada saat perpindahan mungkin timeout karena pengalihan rute. Retry klien harus menangani hal ini.
2) Dampak latensi baca pada saat perpindahan biasanya minimal, tetapi tidak nol.
-
Dibandingkan dengan tulisan, jalur baca kurang terpengaruh oleh perpindahan.
-
Kueri yang mengenai momen perpindahan menjalani pengalihan rute; API real-time sensitif latensi mungkin mengamati jitter tingkat milidetik.
-
Untuk skenario kueri titik QPS tinggi, rencanakan pengaturan timeout upstream dengan asumsi jitter singkat akan terjadi.
3) Performa kueri data lama mungkin menurun secara signifikan hingga redistribusi selesai:
|
Skenario |
Dampak performa kueri data lama |
|
Skala keluar pangkat-dua dengan jumlah shard pangkat-dua (32 → 64) |
Penurunan minimal karena optimasi oversharding internal |
|
Skala keluar pangkat-dua tetapi jumlah shard bukan pangkat-dua (20 → 40) |
Optimasi oversharding internal tetap berlaku, tetapi penurunan performa lebih besar daripada saat jumlah shard adalah pangkat-dua |
|
Skala keluar bukan pangkat-dua atau bukan kelipatan bilangan bulat |
Penurunan moderat, umumnya tidak lebih dari 2x |
|
Skala keluar sangat besar (16x+ dari jumlah shard awal) |
Menurun secara proporsional terhadap faktor_penskalaan/8; kasus terburuk: kueri efektif tidak dapat digunakan hingga redistribusi selesai |
|
Skala-masuk kelipatan bilangan bulat (32 → 16) |
Paralelisme kueri lebih rendah; penurunan performa ringan hingga moderat |
|
Skala-masuk bukan kelipatan bilangan bulat, atau jumlah shard bukan pangkat-dua |
Penurunan moderat, umumnya tidak lebih dari 2x |
Optimasi oversharding internal: Hologres secara asinkron menerapkan oversharding 8x pada data di latar belakang secara default. Ketika jumlah shard adalah pangkat-dua, tabel berikut menunjukkan kehilangan performa kueri yang diharapkan untuk data yang telah sepenuhnya di-overshard pada setiap faktor penskalaan.
|
Faktor penskalaan (k) |
Kehilangan performa |
|
Scale-in 50% (0,5x) |
0% |
|
1x |
0% |
|
1.5x (skala keluar 50%) |
12.5% |
|
2x |
0% |
|
2.5x |
15% |
|
3x |
25% |
|
4x |
0% |
|
5x |
40% |
|
6x |
50% |
|
7x |
75% |
|
8x |
0% |
Dalam kebanyakan kasus, data telah sepenuhnya di-overshard, sehingga skenario penskalaan tipikal (2x, 4x) memiliki kehilangan performa hampir nol. Namun, oversharding adalah mitigasi, bukan jaminan—
-
Jika jumlah shard bukan pangkat-dua, skenario penskalaan tipikal tetap mengalami kehilangan performa.
-
Ketika faktor penskalaan melebihi kapasitas oversharding (misalnya di atas 8x), oversharding tidak lagi dapat mencegah kehilangan performa secara efektif.
-
Ketika volume data per shard terlalu kecil, optimasi oversharding mungkin tidak diterapkan.
-
Di bawah tekanan tulis berat, sebagian besar data yang baru ditulis mungkin belum menerapkan oversharding.
-
Ketika distribusi data atau pemilihan kunci shard suboptimal, penurunan performa mungkin tetap signifikan.
-
Jangan mengandalkan oversharding sebagai jaminan penurunan nol.
4) Kueri pada data yang baru ditulis sebagian besar tidak terpengaruh.
-
Data baru ditulis ke topologi shard baru; performa kueri konsisten dengan kondisi stabil.
-
Namun, jika kueri mencakup data baru dan lama (misalnya pemindaian rentang waktu), RT keseluruhan tetap ditarik turun oleh performa data lama yang menurun.
5) Kueri indeks (GSI / teks penuh / vektor) tetap berfungsi tetapi mungkin tidak memiliki performa stabil. Indeks tetap dapat digunakan setelah Resharding, tetapi I/O fisik untuk pencarian indeks mungkin bersaing dengan redistribusi latar belakang, menyebabkan waktu respons meningkat hingga redistribusi selesai. Pantau kueri P99 dan ekor panjang secara ketat.
Rekomendasi untuk workload sensitif latensi
Jika workload Anda termasuk dalam kategori berikut, perlakukan Resharding sebagai perubahan berisiko dan ikuti proses manajemen perubahan Anda:
|
Jenis workload |
Mitigasi yang direkomendasikan |
|
Dasbor real-time / kueri BI ad-hoc |
Eksekusi selama jam sepi; pilih penskalaan pangkat-dua; koordinasikan dengan pemangku kepentingan mengenai jendela pemeliharaan. |
|
Pencarian titik online (API CRM / kontrol risiko / akun) |
Tabel berorientasi baris memiliki dampak Resharding lebih rendah—pilih untuk kasus penggunaan ini. Tingkatkan timeout klien; siapkan strategi degradasi (pembatasan laju, fallback cache). |
|
Tulisan real-time Flink |
Tingkatkan parameter retry dan tekanan balik konektor; pantau lag sisi sumber; rencanakan buffering upstream selama jendela pemeliharaan. |
|
Konsumen Binlog |
Ikuti prosedur khusus Binlog dalam dokumen ini; beri tahu semua konsumen downstream untuk melakukan restart tanpa status; beri waktu agar konsumen dapat mengejar ketinggalan. |
|
Pekerjaan UPSERT frekuensi tinggi |
Eksekusi secara ketat selama jam sepi; pilih faktor penskalaan pangkat-dua. |
|
Laporan OLAP kritis SLA |
Nilai perkiraan penurunan performa kueri sebelum melanjutkan; pertimbangkan membagi menjadi beberapa langkah penskalaan lebih kecil jika perlu. |
Perkiraan durasi dampak (konservatif)
|
Fase |
Perkiraan durasi konservatif |
Cakupan dampak |
|
Perpindahan metadata |
Detik; mungkin memakan waktu menit jika menunggu transaksi panjang |
Lonjakan latensi tulis yang teramati; beberapa permintaan mungkin perlu retry |
|
Redistribusi (tabel kecil <100 GB) |
Puluhan menit |
Penurunan performa kueri data lama berkelanjutan; tulisan mungkin terpengaruh oleh kontensi I/O |
|
Redistribusi (tabel menengah 100 GB – 1 TB) |
Jam hingga setengah hari |
Penurunan performa kueri data lama berkelanjutan; jadwalkan selama jam sepi |
|
Redistribusi (tabel besar >1 TB) |
Satu hari atau lebih; berpotensi beberapa hari |
Penurunan performa kueri data lama berkepanjangan; sangat disarankan menggunakan |
Kesimpulan
Resharding menjaga layanan tetap berjalan dan permintaan berhasil, tetapi rencanakan untuk dampak yang teramati: latensi tulis akan melonjak (milidetik hingga detik, berpotensi lebih lama dalam kasus ekstrem); performa kueri data lama menurun hingga redistribusi selesai—tingkat keparahan berkorelasi dengan faktor penskalaan dan apakah itu kelipatan pangkat-dua; dalam kasus terburuk, penurunan mungkin berlangsung lama; dalam skenario tipikal (penskalaan 2x), optimasi oversharding internal sebagian besar dapat mengurangi dampak.
Pertimbangan khusus Binlog (penting)
Jika Liquid Table Anda memiliki Binlog diaktifkan (binlog_level = 'replica'), perilaku Resharding berbeda dari tabel biasa. Baca seluruh bagian ini sebelum melanjutkan.
Perilaku default
Liquid Table dengan Binlog diaktifkan tidak mengizinkan Resharding secara default. Menjalankan ALTER TABLE ... SET (table_group = ...) secara langsung mengembalikan error.
Prosedur Resharding paksa
-- Langkah 1: Aktifkan GUC eksperimental (hanya tingkat sesi)
SET hg_experimental_enable_liquid_resharding_for_table_with_binlog = on;
-- Langkah 2: Lakukan Resharding
ALTER TABLE my_binlog_table SET (table_group = 'tg_64');
-- Langkah 3: Bersihkan data delta pada shard lama
CALL hg_liquid_resharding_drop_non_current_delta('my_binlog_table');
Dampak terhadap konsumen Binlog
|
Event |
Deskripsi |
|
Selama Resharding |
Konsumen Binlog (konektor) akan mengalami error dan memicu failover. Namun, offset menjadi tidak valid dan pekerjaan memasuki keadaan tidak dapat digunakan. |
|
Setelah skala keluar (jumlah shard meningkat) |
Failover kemungkinan berhasil, tetapi status tidak andal — diperlukan restart tanpa status. |
|
Setelah skala-masuk (jumlah shard berkurang) |
Failover akan selalu gagal. |
|
Setelah Resharding selesai |
Semua konsumen harus melakukan restart tanpa status (reset offset dan konsumsi ulang dari awal). |
|
Kueri Binlog berbasis SQL |
Hanya entri Binlog yang dihasilkan setelah Resharding terbaru yang terlihat; entri historis hilang. |
Daftar periksa DBA: 1) Beri tahu semua konsumen downstream Binlog (Flink / konektor / subscriber kustom); 2) Selama jendela pemeliharaan: hentikan sementara konsumen → lakukan Resharding → panggil prosedur pembersihan → restart semua konsumen tanpa status; 3) Jangan pernah melakukan reshard pada Liquid Table yang diaktifkan Binlog tanpa mengoordinasikan dengan konsumen downstream.
Migrasi tabel yang sudah ada ke Liquid Table
Tabel yang sudah ada tidak dapat dikonversi ke Liquid Table melalui ALTER. Gunakan salah satu dari dua pendekatan berikut.
Pendekatan 1: Konversi melalui REBUILD (direkomendasikan)
Mulai dari Hologres V4.2, Anda dapat menggunakan ASYNC REBUILD TABLE untuk merebuild tabel yang sudah ada menjadi Liquid Table di tempat, tanpa tabel baru, tanpa migrasi data manual, dan nama tabel tidak berubah. Untuk detail tentang REBUILD, lihat REBUILD.
-- Konversi tabel yang sudah ada menjadi Liquid Table di tempat (nama tabel tidak berubah)
ASYNC REBUILD TABLE my_table
SET (
liquid_table = 'true'
);
Pendekatan 2: Migrasi tabel baru
Buat Liquid Table baru, migrasikan data dari tabel yang sudah ada, dan alihkan menggunakan rename transaksional atomik.
-- 1. Buat Liquid Table baru dengan skema yang sama
CREATE TABLE my_table_new (
id INT NOT NULL,
name TEXT,
ts TIMESTAMPTZ,
PRIMARY KEY(id)
) WITH (liquid_table = 'true');
-- 2. Salin data
INSERT INTO my_table_new SELECT * FROM my_table_old;
-- 3. Buat ulang indeks (jika ada)
CREATE INDEX ... ON my_table_new ...;
-- 4. Pertukaran atomik menggunakan transaksi
BEGIN;
ALTER TABLE my_table_old RENAME TO my_table_bak;
ALTER TABLE my_table_new RENAME TO my_table;
COMMIT;
-- 5. Hapus cadangan setelah verifikasi
DROP TABLE my_table_bak;
Batasan
-
Diperlukan Hologres V4.2.0 atau versi yang lebih baru. Tingkatkan instans Anda terlebih dahulu jika Anda menjalankan versi sebelumnya.
-
Properti
liquid_tablehanya dapat diatur saat pembuatan tabel. Tabel reguler yang sudah ada tidak dapat dikonversi ke Liquid Table melaluiALTER TABLE. Gunakan pendekatan migrasi rebuild sebagai gantinya. -
Tabel partisi fisik tidak didukung. Mencoba menggunakan sintaks partisi fisik pada Liquid Table mengembalikan error
Physical partitioned table of liquid table is not supported. Gunakan tabel partisi logis sebagai gantinya. -
Materialized view tidak dapat dibuat pada Liquid Table. Gunakan Dynamic Table sebagai alternatif.
-
Pembacaan langsung MaxCompute terhadap Liquid Table belum didukung. Jika downstream Anda bergantung pada pembacaan langsung MaxCompute, Liquid Table tidak berlaku di versi saat ini.
-
Instans yang berisi Liquid Table tidak dapat diturunkan spesifikasinya ke versi yang tidak mendukung fitur ini. Pastikan Anda tidak perlu melakukan rollback versi instans sebelum membuat Liquid Table.
-
Selama Resharding (perubahan Table Group), latensi tulis akan mengalami lonjakan yang teramati (milidetik hingga detik, berpotensi lebih lama dalam kasus ekstrem) dan performa kueri data lama mungkin menurun secara signifikan.
-
ALTER TABLE ... SET (table_group = ...)harus menunggu semua operasi DML yang sedang berjalan pada tabel selesai sebelum eksekusi dimulai. Operasi DML panjang atau transaksi terbuka akan memblokir perintah ALTER. -
Parameter
liquid_table_reorganization_partition_windowhanya berfungsi dengan satu kunci partisi bertipe waktu. Beberapa kunci partisi atau kunci partisi non-bertipe waktu tidak didukung. -
Liquid Table dengan Binlog diaktifkan tidak dapat di-reshard secara default. Anda harus mengaktifkan GUC eksperimental
hg_experimental_enable_liquid_resharding_for_table_with_binlogdan memastikan konsumen Binlog downstream dapat mentoleransi restart tanpa status. -
Setelah Resharding, kueri Binlog berbasis SQL hanya mengembalikan entri yang dihasilkan sejak Resharding terbaru. Binlog historis tidak lagi terlihat.
-
Table Group tidak dapat dihapus selama masih ada tabel yang terhubung padanya.
-
Resharding adalah operasi tidak dapat dibalik—setelah perpindahan metadata selesai, tidak ada pintasan "rollback". Untuk mengembalikan, Anda harus menjalankan ALTER lagi untuk memindahkan tabel ke Table Group asli.
-
Versi saat ini tidak menyediakan antarmuka kueri progres Resharding. Tidak ada cara untuk memeriksa persentase pasti redistribusi data secara real time.
Praktik terbaik
Kapan mengaktifkan Liquid Table
Sangat direkomendasikan:
-
Volume data diperkirakan tumbuh 5x atau lebih selama masa pakai tabel.
-
Trafik memiliki lonjakan musiman atau event penjualan yang memerlukan penskalaan shard elastis.
-
Tabel fakta inti atau tabel lebar dalam gudang data real-time.
-
Tabel pencarian vektor AI.
Dapat ditunda:
-
Tabel dimensi kecil dengan volume data stabil.
-
Workload yang bergantung pada tabel partisi fisik.
-
Workload yang bergantung pada pembacaan langsung MaxCompute.
Pedoman perencanaan jumlah shard
|
Data per shard |
Tindakan yang direkomendasikan |
|
< 10 GB |
Mungkin terlalu banyak shard; pertimbangkan skala-masuk |
|
10 GB – 50 GB |
Kisaran sehat |
|
50 GB – 100 GB |
Pantau performa kueri; siapkan untuk skala keluar |
|
> 100 GB |
Segera lakukan scale out |
Kiat eksekusi Resharding
-
Jalankan selama jam sepi: Eksekusi ALTER selama jendela pemeliharaan dengan trafik rendah.
-
Hentikan sementara DML besar: Pastikan tidak ada pekerjaan INSERT/UPDATE/DELETE massal yang berjalan.
-
Pilih kelipatan pangkat-dua: misalnya 16 → 32 → 64 menghasilkan performa lebih lancar daripada 16 → 50.
-
Gunakan jendela partisi untuk tabel besar: Atur
liquid_table_reorganization_partition_windowuntuk membatasi cakupan redistribusi pada tabel partisi berumur panjang. -
Lakukan latihan end-to-end untuk tabel Binlog: Uji alur lengkap Resharding + restart downstream di lingkungan staging terlebih dahulu.
Rekomendasi pemantauan
-
Sebelum redistribusi selesai: bandingkan secara berkala waktu respons kueri di shard lama dan baru untuk mengukur progres.
-
Pemanfaatan resource instans: Resharding menimbulkan overhead I/O tambahan—pantau penggunaan CPU dan I/O.
-
Lag kursor Binlog: untuk tabel yang diaktifkan Binlog, pantau lag konsumen downstream.
FAQ
P1: Apa perbedaan mendasar antara Liquid Table dan tabel reguler?
J: Liquid Table menggunakan model penyimpanan base + delta yang memungkinkan tata letak shard berubah tanpa menulis ulang semua data. Tabel reguler memiliki distribusi shard yang tetap saat pembuatan—mengubah shard memerlukan rebuild penuh tabel.
P2: Apakah Resharding dapat menyebabkan kehilangan data?
J: Tidak. Permintaan baca dan tulis mempertahankan konsistensi transaksional sepanjang Resharding. Semua data yang telah dikomit dipertahankan. Pengujian verifikasi mengonfirmasi integritas data 100% sebelum dan sesudah Resharding.
P3: Apakah Resharding menyebabkan downtime layanan?
J: Layanan tetap tersedia sepanjang Resharding dan permintaan tidak diharapkan gagal. Namun, latensi tulis akan mengalami lonjakan yang teramati (milidetik hingga detik), dan performa kueri data lama mungkin menurun hingga redistribusi selesai. Lihat bagian "Dampak Resharding terhadap workload" untuk detailnya.
Q4: Berapa lama waktu yang dibutuhkan untuk resharding?
J: Perintah ALTER TABLE itu sendiri mengembalikan respons dalam hitungan detik (perpindahan metadata sinkron). Redistribusi data aktual berjalan secara asinkron di latar belakang, dengan durasi sebanding dengan volume data dan faktor penskalaan.
P5: Apakah sebuah tabel dapat di-reshard berkali-kali?
J: Ya. Namun, setiap Resharding memicu putaran redistribusi latar belakang baru. Rencanakan jumlah shard target Anda dengan hati-hati untuk menghindari perubahan yang sering.
P6: Bisakah saya memantau progres Resharding?
J: Versi saat ini tidak menyediakan API progres khusus. Anda dapat menyimpulkan progres dengan memantau tugas kompaksi latar belakang dan waktu respons kueri. Kemampuan ini ada dalam roadmap produk.
P7: Apakah skala-masuk langsung membebaskan storage?
J: Skala-masuk mengonsolidasi data ke dalam lebih sedikit shard segera, tetapi ruang penyimpanan sebenarnya baru diklaim kembali setelah kompaksi latar belakang selesai.
P8: Apakah Liquid Table menimbulkan overhead penyimpanan tambahan?
J: Model base + delta mungkin memiliki overhead minor selama data delta belum dikompaksi. Kompaksi latar belakang menghilangkan ini secara otomatis. Penggunaan penyimpanan keseluruhan sebanding dengan tabel reguler.
P9: Bisakah beberapa jenis indeks (GSI + teks penuh + vektor) koeksistensi pada satu Liquid Table?
J: Ya. V4.2 mendukung Resharding Liquid Table yang memiliki beberapa jenis indeks secara bersamaan.
P10: Dapatkah saya mengonversi kembali Liquid Table menjadi tabel biasa?
J: Ya, melalui rebuild terbalik: buat tabel reguler, gunakan INSERT INTO ... SELECT untuk migrasi data, lalu RENAME untuk menukar. Perhatikan bahwa setelah instans berisi Liquid Table, instans tersebut tidak dapat diturunkan spesifikasinya ke versi yang tidak mendukung fitur ini.
Referensi cepat
-- Buat Liquid Table
CREATE TABLE t (...) WITH (liquid_table = 'true');
-- Resharding
ALTER TABLE t SET (table_group = 'tg_xxx');
-- Nonaktifkan redistribusi latar belakang
ALTER TABLE t SET (liquid_table_enable_data_reorganization = 'false');
-- Redistribusi hanya partisi 30 hari terakhir
ALTER TABLE t SET (
table_group = 'tg_xxx',
liquid_table_reorganization_partition_window = '30 day'
);
-- Reshard tabel yang diaktifkan Binlog (eksperimental; memerlukan restart downstream)
SET hg_experimental_enable_liquid_resharding_for_table_with_binlog = on;
ALTER TABLE t SET (table_group = 'tg_xxx');
CALL hg_liquid_resharding_drop_non_current_delta('t');