AnalyticDB for PostgreSQL mendukung tiga model penyimpanan: berorientasi baris, berorientasi kolom, dan hybrid baris-kolom. Pilih model yang sesuai saat membuat tabel.
Pilih model penyimpanan
Model yang Anda pilih memengaruhi throughput penulisan, performa kueri, dan rasio kompresi. Gunakan kriteria berikut untuk menentukan pilihan.
Kriteria | Row-oriented | Column-oriented | Hybrid row-column |
Pola penulisan | Pembaruan sering, INSERT real-time | Pemuatan batch (COPY, INSERT INTO SELECT) | Campuran: baik penulisan real-time maupun pemuatan batch |
Pola kueri | Kueri titik, akses seluruh baris | Agregasi pada beberapa kolom, misalnya | Keduanya |
Kompresi | Standar | 3–5x lebih tinggi daripada row-oriented | Otomatis berdasarkan metode penulisan |
Persyaratan versi | Semua versi | Semua versi | Hanya V7.0 |
Kompatibilitas Data Transmission Service (DTS) | Diperlukan (tabel tujuan harus berorientasi baris) | Tidak didukung | Tidak didukung |
Penyimpanan hybrid baris-kolom hanya tersedia di AnalyticDB for PostgreSQL V7.0.
Tentukan model penyimpanan
Gunakan klausa WITH dalam perintah CREATE TABLE untuk mengatur model penyimpanan dan mengonfigurasi kompresi. Parameter berikut didukung.
Parameter | Deskripsi | Bawaan | Nilai yang valid |
| Model penyimpanan. Penyimpanan hybrid baris-kolom tidak dapat diatur di sini — gunakan |
|
|
| Mengaktifkan penyimpanan yang dioptimalkan untuk append. Diperlukan untuk tabel berorientasi kolom. |
|
|
| Algoritma kompresi. | V4.3 dan V6.0: | Lihat Kompresi data |
| Tingkat kompresi. Nilai yang lebih tinggi menghasilkan kompresi lebih baik dengan kecepatan lebih rendah. |
|
|
Tabel berorientasi baris
Secara bawaan, AnalyticDB for PostgreSQL membuat tabel berorientasi baris menggunakan model penyimpanan heap PostgreSQL. Tabel berorientasi baris dioptimalkan untuk:
Penulisan real-time melalui INSERT
Operasi UPDATE dan DELETE yang sering
Kueri titik dengan Indeks Pohon-B
Tabel heap (bawaan)
CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);Tabel berorientasi baris yang dioptimalkan untuk append (AORO)
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=row)
DISTRIBUTED BY (a);Saat menggunakan Data Transmission Service (DTS) untuk menulis data ke AnalyticDB for PostgreSQL, tabel tujuan harus berorientasi baris. DTS mendukung sinkronisasi hampir real-time untuk operasi INSERT, UPDATE, dan DELETE.
Tabel berorientasi kolom
Tabel berorientasi kolom menyimpan data berdasarkan kolom, sehingga hanya membaca kolom yang dirujuk dalam suatu kueri. Hal ini menjadikannya sangat cocok untuk beban kerja gudang data — terutama kueri yang melakukan agregasi pada sejumlah kecil kolom, seperti:
SELECT SUM(revenue), AVG(cost) FROM orders WHERE region = 'us';Tabel berorientasi kolom memberikan rasio kompresi 3–5 kali lipat dibandingkan tabel berorientasi baris. Tabel ini kurang efisien untuk operasi insert atau update tingkat baris yang sering — gunakan metode pemuatan batch seperti COPY untuk performa terbaik.
Tabel berorientasi kolom harus dioptimalkan untuk append. Atur appendonly=true saat membuatnya.
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);Tabel penyimpanan hybrid baris-kolom
Penyimpanan hybrid baris-kolom hanya didukung di instans AnalyticDB for PostgreSQL V7.0.
Model penyimpanan hybrid baris-kolom menggunakan Mesin penyimpanan Beam, yang menggabungkan dua lapisan penyimpanan internal:
Penyimpanan Delta (berorientasi baris): menangani penulisan aliran real-time melalui
INSERT INTO ... VALUES. Memberikan performa penulisan yang setara dengan tabel berorientasi baris.Penyimpanan Dasar (berbasis PAX, berorientasi kolom): menangani penulisan batch melalui
COPYatauINSERT INTO ... SELECT. Memberikan throughput lebih tinggi untuk data massal.
Beam secara otomatis mengarahkan data masuk ke lapisan yang sesuai berdasarkan metode penulisan.
Tabel non-partisi
Membuat Tabel dengan Mesin Penyimpanan Beam
CREATE TABLE testtable (a int) USING beam;Ubah tabel yang sudah ada agar menggunakan Mesin penyimpanan beam
ALTER TABLE testtable SET ACCESS METHOD beam;Tabel partisi
Contoh berikut menggunakan tabel partisi dasar yang dibuat dengan penyimpanan heap:
CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;Tentukan model penyimpanan saat membuat partisi
Buat partisi dengan penyimpanan berorientasi kolom yang dioptimalkan untuk append (AOCO):
CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned
FOR VALUES WITH (MODULUS 3, REMAINDER 0) USING ao_column;Buat partisi dengan penyimpanan hybrid baris-kolom (beam):
CREATE TABLE amm_partitioned_2 PARTITION OF amm_partitioned
FOR VALUES WITH (MODULUS 3, REMAINDER 1) USING beam;Ubah model penyimpanan partisi yang sudah ada
ALTER TABLE am_partitioned_1 SET ACCESS METHOD ao_row;Kompresi data
Kompresi tersedia untuk tabel berorientasi kolom dan tabel berorientasi baris yang dioptimalkan untuk append (AORO) (appendonly=true). Dua tingkat kompresi didukung:
Kompresi tingkat tabel: menerapkan satu algoritma untuk seluruh tabel
Kompresi tingkat kolom: menerapkan algoritma kompresi unik untuk setiap kolom
Algoritma yang didukung berdasarkan versi
Algoritma | V4.3 | V6.0 | V7.0 | Catatan |
| Tidak | Ya | Ya | |
| Ya | Ya | Tidak | |
| Tidak | Ya | Ya | |
| Ya | Ya | Tidak | Hanya untuk tabel berorientasi kolom |
| Ya | Ya | Ya | Tanpa kompresi |
| Ya | Ya | Ya | Bawaan untuk V7.0; memilih algoritma berdasarkan atribut data |
Jika Anda menentukan algoritma QuickLZ, algoritma tersebut secara otomatis diganti dengan zlib. Algoritma rle_type hanya berlaku untuk tabel berorientasi kolom.
Contoh
Buat tabel berorientasi kolom dengan pengaturan kompresi bawaan:
CREATE TABLE am_testtable(x INT, y INT)
WITH (orientation=column);Buat tabel berorientasi kolom dengan kompresi zlib pada level 5:
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5);Buat tabel berorientasi kolom dengan kompresi zstd pada level 9:
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zstd, compresslevel=9);