AnalyticDB for PostgreSQL mendukung tiga model penyimpanan tabel: berorientasi baris, berorientasi kolom, dan hibrida baris-kolom. Anda dapat memilih model yang sesuai dengan kebutuhan bisnis saat membuat tabel. Penyimpanan berorientasi baris cocok untuk skenario pembaruan data sering atau penulisan real-time menggunakan pernyataan INSERT. Penyimpanan berorientasi kolom ideal untuk gudang data, seperti kueri dan agregasi pada sejumlah kecil kolom.
Tentukan model penyimpanan tabel
Untuk menentukan tabel berorientasi baris atau kolom, gunakan klausa WITH dalam pernyataan CREATE TABLE. Anda juga dapat menentukan algoritma kompresi dan tingkat kompresi di klausa ini. Tabel berikut menjelaskan parameter tersebut.
Parameter | Deskripsi | Nilai valid |
orientation | Model penyimpanan tabel. Nilai valid: Catatan Anda tidak dapat menentukan model penyimpanan hibrida baris-kolom menggunakan klausa |
|
compresstype | Algoritma kompresi tabel. Nilai default untuk AnalyticDB for PostgreSQL V4.3 dan V6.0: Nilai default untuk AnalyticDB for PostgreSQL V7.0: |
|
compresslevel | Tingkat kompresi tabel. Nilai yang lebih tinggi mencapai kompresi yang lebih baik tetapi mengurangi kecepatan kompresi. Nilai default: 1. | 1 hingga 9. Nilainya harus berupa bilangan bulat. |
appendonly | Menentukan apakah akan mengaktifkan penyimpanan dioptimalkan-append. Nilai default: |
|
Tabel berorientasi baris
Secara default, AnalyticDB for PostgreSQL menggunakan model penyimpanan heap PostgreSQL untuk tabel berorientasi baris. Model ini digunakan untuk data yang sering diperbarui atau ditulis secara real-time menggunakan pernyataan INSERT. Tabel berorientasi baris dengan indeks Pohon-B memberikan kinerja pengambilan data tinggi untuk kueri titik.
Contoh
Buat tabel berorientasi baris menggunakan model penyimpanan heap.
CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);CatatanSaat menggunakan Data Transmission Service (DTS) untuk menulis data ke instance AnalyticDB for PostgreSQL, tabel tujuan harus berupa tabel berorientasi baris. AnalyticDB for PostgreSQL DTS mendukung sinkronisasi data hampir real-time. Selain data yang dimasukkan melalui pernyataan INSERT, DTS dapat menyinkronkan data yang diperbarui melalui pernyataan SQL seperti UPDATE dan DELETE.
Buat tabel berorientasi baris dioptimalkan-append (AORO) menggunakan parameter
orientationdan appendonly.CREATE TABLE bar (a int, b text) WITH (appendonly=true, orientation=row) DISTRIBUTED BY (a);
Tabel berorientasi kolom
Tabel berorientasi kolom menyimpan data berdasarkan kolom. Saat mengakses data, hanya kolom relevan yang dibaca. Model ini cocok untuk skenario gudang data, seperti kueri dan agregasi pada sejumlah kecil kolom. Dalam skenario ini, tabel berorientasi kolom memberikan kinerja I/O tinggi. Namun, model ini kurang efisien untuk skenario dengan pembaruan data sering. Disarankan menggunakan metode pemuatan batch, seperti pernyataan COPY, untuk memasukkan data ke tabel berorientasi kolom. Rasio kompresi data tabel berorientasi kolom mencapai tiga hingga lima kali lipat dari tabel berorientasi baris.
Contoh
Tabel berorientasi kolom harus berupa tabel dioptimalkan-append. Untuk membuat tabel berorientasi kolom, atur parameter appendonly menjadi true.
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);Tabel penyimpanan hibrida baris-kolom
Hanya instance AnalyticDB for PostgreSQL V7.0 yang mendukung tabel penyimpanan hibrida baris-kolom.
Tabel partisi dan non-partisi mendukung penyimpanan hibrida baris-kolom.
Tabel non-partisi
Untuk menerapkan penyimpanan hibrida baris-kolom, atur mesin penyimpanan tabel non-partisi ke beam.
Mesin penyimpanan Beam terdiri dari penyimpanan Delta berorientasi baris dan penyimpanan Base berorientasi kolom berbasis PAX. Saat menulis data, model penyimpanan dipilih berdasarkan metode penulisan. Jika menggunakan metode streaming real-time seperti pernyataan INSERT INTO VALUES, data ditulis ke penyimpanan Delta berorientasi baris untuk mencapai kinerja penulisan real-time setara tabel berorientasi baris. Jika menggunakan metode batch seperti pernyataan COPY atau INSERT INTO SELECT, data ditulis ke penyimpanan Base berorientasi kolom untuk meningkatkan throughput dan kinerja penulisan.
Atur mesin penyimpanan ke beam saat Anda membuat tabel
CREATE TABLE testtable (a int) USING beam;Ubah mesin penyimpanan tabel yang ada menjadi beam
ALTER TABLE testtable SET ACCESS METHOD beam;Tabel partisi
Contoh berikut menunjukkan cara mengonfigurasi tabel penyimpanan hibrida baris-kolom. Contoh-contoh ini menggunakan tabel am_partitioned.
CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;Tentukan model penyimpanan partisi saat Anda membuat partisi
Atur model penyimpanan partisi am_partitioned_1 ke penyimpanan berorientasi kolom dioptimalkan-append (AOCO).
CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 0) USING ao_column;Setelah dibuat, partisi am_partitioned_2 berada dalam model penyimpanan hibrida baris-kolom.
CREATE TABLE amm_partitioned_2 PARTITION OF amm_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 1) USING beam;
Ubah model penyimpanan partisi yang ada
Ubah model penyimpanan partisi am_partitioned_1 menjadi penyimpanan AORO.
ALTER TABLE am_partitioned_1 SET ACCESS METHOD ao_row;Kompresi data
Kompresi data digunakan untuk tabel berorientasi kolom atau tabel AORO dengan parameter appendonly diatur ke true. Dua jenis kompresi tersedia:
Kompresi tingkat tabel.
Kompresi tingkat kolom. Anda dapat menerapkan algoritma kompresi unik untuk setiap kolom.
AnalyticDB for PostgreSQL mendukung algoritma kompresi berikut:
V4.3: zlib, rle_type, none, dan auto.
V6.0: zstd, zlib, rle_type, lz4, none, dan auto.
V7.0: zstd, lz4, none, dan auto.
Anda juga dapat menentukan algoritma kompresi QuickLZ, tetapi algoritma tersebut diganti dengan zlib. Algoritma rle_type hanya cocok untuk tabel berorientasi kolom.
Contoh
Buat tabel berorientasi kolom.
CREATE TABLE am_testtable(x INT, y INT)
WITH (orientation=column);Buat tabel berorientasi kolom menggunakan algoritma kompresi zlib dengan tingkat kompresi 5.
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5);Buat tabel berorientasi kolom menggunakan algoritma kompresi zstd dengan tingkat kompresi 9.
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zstd, compresslevel=9);