PolarDB for PostgreSQL Distributed Edition adalah database terdistribusi yang dibangun di atas PolarDB for PostgreSQL. Database ini mendukung skalabilitas horizontal untuk menangani volume data hingga sub-petabyte, menjamin konsistensi dalam transaksi terdistribusi, dan mempertahankan seluruh kemampuan edisi terpusat—menjadikannya pilihan ideal ketika data atau throughput tulis melebihi kapasitas node tunggal.
Arsitektur teknis
PolarDB for PostgreSQL Distributed Edition terdiri dari dua jenis node inti:
-
Compute Nodes (CNs): Titik akses untuk kluster yang mengurai SQL, menghasilkan rencana kueri terdistribusi, dan mengelola metadata.
-
Data Nodes (DNs): Menyimpan shard data fisik dari tabel.
Setiap CN atau DN merupakan kluster PolarDB for PostgreSQL berkeandalan tinggi yang terdiri atas node read-write (RW), node read-only (RO), dan penyimpanan terdistribusi (PolarStore), sehingga menjamin keandalan pada tingkat komponen.
Keunggulan arsitektur
-
Skalabilitas horizontal online: Perluas kapasitas komputasi dan penyimpanan dengan menambahkan node secara online, mengatasi bottleneck node tunggal untuk mendukung data skala petabyte dan beban kerja konkurensi tinggi.
-
Metode penskalaan fleksibel: Node menggunakan arsitektur penyimpanan bersama yang mendukung penskalaan dengan menambahkan node (Scale Out) atau meningkatkan spesifikasi node (Scale Up).
-
Ketersediaan tinggi dan biaya rendah: Penyimpanan terdistribusi tiga replika (PolarStore) berbasis protokol replikasi ParallelRaft menjamin ketersediaan data yang tinggi, sementara Anda hanya dikenai biaya untuk satu replika. Ruang penyimpanan ditagih berdasarkan penggunaan aktual, sehingga tidak perlu penyesuaian kapasitas manual.
-
Kinerja tinggi: Optimasi IO mendalam berbasis sistem file terdistribusi (Polar File System atau PolarFS), seperti parallel dirty page flushing, operasi baca/tulis batch, dan caching ukuran tabel, menghasilkan IOPS ultra-tinggi.
-
Backup dan pemulihan cepat: Mendukung pembuatan backup dalam hitungan detik dan menyediakan berbagai metode pemulihan data, termasuk point-in-time recovery (PITR).
Pola pengembangan terdistribusi
Saat mengembangkan aplikasi pada PolarDB for PostgreSQL Distributed Edition, kunci utamanya adalah merancang distribusi data. Anda dapat memilih salah satu dari dua pola berikut berdasarkan skenario bisnis Anda:
-
Pemisahan horizontal: Baris dari satu tabel besar didistribusikan ke beberapa DN berdasarkan nilai hash dari kolom tertentu (kolom distribusi). Pola ini cocok untuk mengatasi masalah kinerja akibat tabel yang terlalu besar, seperti tabel pengguna dan tabel pesanan. Untuk kinerja optimal, kueri sebaiknya selalu menyertakan kolom distribusi sebagai kondisi filter.
-
Tabel terdistribusi: Secara logis merupakan tabel lengkap, tetapi datanya secara fisik dipisah dan disimpan di beberapa DN. Misalnya, aplikasi mengakses tabel sensors_data, sedangkan data tersebut sebenarnya disimpan dalam shard seperti sensors_data_shard1 dan sensors_data_shard2.
-
Kolom distribusi: Kolom yang digunakan untuk menghitung nilai hash guna menentukan distribusi data saat membuat tabel terdistribusi, misalnya sensor_id.
-
Tabel replikasi: Tabel khusus yang menyimpan salinan lengkap semua datanya di setiap DN. Biasanya digunakan untuk menyimpan tabel dimensi kecil (seperti tabel negara dan konfigurasi) yang sering di-join dengan tabel terdistribusi besar. Hal ini mengoptimalkan JOIN lintas node menjadi JOIN lokal, sehingga secara signifikan meningkatkan kinerja kueri.
-
Transaksi terdistribusi: Ketika satu operasi (transaksi eksplisit BEGIN ... COMMIT/ROLLBACK atau transaksi implisit) perlu memodifikasi data yang tersebar di beberapa DN, sistem secara otomatis mengaktifkan transaksi terdistribusi untuk menjamin konsistensi data (ACID).
Catatan
Modifikasi apa pun pada tabel replikasi akan memicu transaksi terdistribusi.
-
CN Primary/Follower: Semua CN dapat memproses permintaan kueri. Namun, untuk menjamin konsistensi metadata, operasi DDL (seperti CREATE TABLE) hanya dapat dieksekusi pada CN primary, dan perubahan tersebut secara otomatis disinkronkan ke semua node lainnya (CN dan DN).
-
Pemisahan vertikal: Tabel dari modul bisnis yang berbeda ditempatkan pada DN yang berbeda. Pola ini cocok untuk mengisolasi sumber daya berdasarkan bisnis, misalnya menyimpan tabel beban kerja transaksi frekuensi tinggi dan beban kerja pelaporan back-end pada node berbeda agar tidak saling mengganggu. Pola ini memiliki dampak minimal terhadap aplikasi karena CN menyembunyikan detail lapisan bawah dari lapisan atas, sehingga aplikasi dapat mengakses semua tabel seolah-olah mengakses database standalone.
Panduan pengembangan
-
Persiapan:
-
Buat akun database
Buka Konsol PolarDB. Pada halaman Clusters, klik ID kluster target untuk membuka halaman detail kluster. Di panel navigasi kiri, pilih untuk membuat akun database.
Catatan
Akun database diklasifikasikan menjadi Privileged Account dan Standard Account. Kedua jenis akun ini memiliki izin yang berbeda. Anda dapat membuat akun database sesuai kebutuhan bisnis Anda.
-
Buat database
Buka Konsol PolarDB. Pada halaman Clusters, klik ID kluster target untuk membuka halaman detail kluster. Di panel navigasi kiri, pilih . Klik Create Database untuk membuat database terdistribusi. Untuk Database Owner, pilih Privileged Account yang telah Anda buat.
Catatan
Jangan menjalankan pernyataan DROP DATABASE atau RENAME pada database PolarDB for PostgreSQL Distributed Edition dari command line psql.
-
Konfigurasikan daftar putih kluster
Buka konsol PolarDB. Pada halaman Clusters, klik ID kluster target untuk membuka halaman detail kluster. Di panel navigasi sebelah kiri, pilih , lalu tambahkan daftar putih alamat IP atau grup keamanan.
Catatan
-
Jika Anda mengakses PolarDB dari Instance ECS dan Instance ECS tersebut berada dalam VPC yang sama dengan PolarDB, Anda dapat menambahkan Alamat IP pribadi Instance ECS ke grup daftar putih alamat IP baru, atau menambahkan security group Instance ECS ke daftar putih kluster.
-
Jika Anda mengakses PolarDB dari Instance ECS tetapi Instance ECS dan PolarDB tidak berada dalam VPC yang sama, Anda dapat menambahkan Alamat IP publik Instance ECS ke grup daftar putih alamat IP baru, atau menambahkan security group Instance ECS ke daftar putih kluster.
-
Jika Anda mengakses PolarDB dari lingkungan on-premises, tambahkan Alamat IP publik lingkungan on-premises Anda ke grup daftar putih alamat IP baru.
Untuk mendapatkan Alamat IP publik lingkungan on-premises Anda, lakukan langkah-langkah berikut: Untuk Linux, buka terminal dan jalankan perintah curl ifconfig.me.
-
Untuk Windows, buka Command Prompt dan jalankan perintah curl ip.me.
-
Untuk macOS, buka terminal dan jalankan perintah curl ifconfig.me.
Jika jaringan lokal Anda menggunakan proxy atau konfigurasi serupa, alamat IP yang diperoleh dengan metode di atas mungkin bukan Alamat IP publik aktual Anda. Anda dapat menambahkan Blok CIDR 0.0.0.0/0 ke daftar putih kluster PolarDB. Setelah terhubung ke kluster, jalankan perintah SELECT pid,usename,datname,client_addr,state,query FROM pg_stat_activity WHERE state = 'active'; untuk mendapatkan Alamat IP publik aktual, lalu tambahkan ke daftar putih kluster. Setelah itu, hapus Blok CIDR 0.0.0.0/0 dari daftar putih.

-
Blok CIDR 0.0.0.0/0 mengizinkan akses dari semua sumber. Menambahkannya ke daftar putih kluster menimbulkan risiko keamanan signifikan. Jangan tambahkan ke daftar putih kecuali benar-benar diperlukan.
-
Dapatkan titik akhir database dan port
Setelah Anda membuat kluster terdistribusi PolarDB for PostgreSQL, sistem akan membuat titik akhir utama default yang hanya terkait dengan CN primary dan titik akhir proxy terdistribusi yang terkait dengan semua CN. Titik akhir proxy terdistribusi melakukan load balancing di antara CN terkait berdasarkan jumlah koneksi, menyediakan titik akses terpadu untuk bisnis Anda. Anda juga dapat membuat titik akhir kustom dan menentukan CN terkait sesuai kebutuhan untuk mencapai distribusi traffic dan isolasi bisnis yang lebih fleksibel.
Prosedur
Buka Konsol PolarDB. Pada halaman Clusters, klik ID kluster target untuk membuka halaman detail kluster. Di bagian Database Connections, dapatkan titik akhir database.
Catatan
-
Kluster PolarDB for PostgreSQL Distributed Edition berisi Primary Endpoint dan titik akhir proxy terdistribusi yang secara default terkait dengan semua CN, dengan nomor port default 5432.
-
Pilih Private Endpoint atau Public Endpoint berdasarkan lingkungan akses Anda.
-
Jika Anda mengakses PolarDB dari Instance ECS dan Instance ECS tersebut berada dalam VPC yang sama dengan PolarDB, pilih Private Endpoint.
-
Jika Anda mengakses PolarDB dari lingkungan on-premises, pilih Public Endpoint. Klik Apply untuk mengajukan titik akhir publik.
-
Public Endpoint dapat diakses melalui Internet. Mengakses melalui Public Endpoint tidak dapat mencapai kinerja optimal kluster PolarDB.
-
Cloud Web Hosting dan server aplikasi ringan tidak didukung untuk menghubungkan ke kluster PolarDB menggunakan Private Endpoint.
-
Hubungkan ke kluster terdistribusi
Gunakan DMS untuk menghubungkan ke kluster
DMS adalah tool manajemen data grafis yang disediakan oleh Alibaba Cloud. Ini adalah layanan manajemen data yang mengintegrasikan manajemen data, manajemen skema, otorisasi pengguna, audit keamanan, tren data, pelacakan data, grafik BI, kinerja dan optimasi, serta manajemen server. Anda dapat langsung mengelola kluster PolarDB Anda di DMS tanpa perlu tool tambahan.
-
Buka Konsol PolarDB. Pada halaman Clusters, klik ID kluster target untuk membuka halaman detail kluster. Di sudut kanan atas halaman, klik Log on to Database.
-
Pada kotak dialog yang muncul, masukkan akun database dan password database yang telah dibuat di kluster, lalu klik Login.
-
Setelah login, Anda dapat melihat kluster PolarDB yang telah login di daftar Database Instances > Connected Instances di panel navigasi kiri dan melakukan operasi manajemen.
Gunakan client untuk menghubungkan ke kluster
Anda dapat menggunakan client umum apa pun untuk menghubungkan ke kluster PolarDB. Contoh ini menggunakan pgAdmin 4 v9.0. Prosedur untuk client lainnya serupa.
-
Unduh dan instal client pgAdmin 4.
-
Buka client pgAdmin 4, klik kanan Servers, lalu pilih Register > Server....
-
Pada tab General, atur nama koneksi. Pada tab Connection, atur informasi koneksi kluster, lalu klik Save.
|
Parameter
|
Deskripsi
|
|
Host name/address
|
Titik akhir database dan port kluster PolarDB.
-
Jika Anda mengakses PolarDB dari Instance ECS dan Instance ECS tersebut berada dalam VPC yang sama dengan PolarDB, pilih titik akhir Private dan port.
-
Jika Anda mengakses PolarDB dari lingkungan on-premises, pilih titik akhir Public dan port.
-
Nomor port default adalah 5432.
|
|
Port
|
|
Username
|
Akun database dan password kluster PolarDB.
|
|
Password
|
-
Periksa hasil koneksi. Jika informasi koneksi benar, halaman berikut akan muncul, menandakan koneksi berhasil.
Gunakan CLI untuk menghubungkan ke kluster
Buka situs resmi PostgreSQL untuk mengunduh dan menggunakan tool psql guna menghubungkan ke kluster database PolarDB. Anda juga dapat menggunakan tool psql dalam toolkit PolarDB-Tools yang disediakan oleh PolarDB untuk menghubungkan ke kluster database PolarDB.
Sintaks
psql -h <host> -p <port> -U <username> -d <dbname>
|
Parameter
|
Deskripsi
|
|
host
|
Titik akhir database dan port kluster PolarDB.
-
Jika Anda mengakses PolarDB dari Instance ECS dan Instance ECS tersebut berada dalam VPC yang sama dengan PolarDB, pilih titik akhir private dan port.
-
Jika Anda mengakses PolarDB dari lingkungan on-premises, pilih titik akhir public dan port.
-
Nomor port default adalah 5432.
|
|
port
|
|
username
|
Akun database kluster PolarDB.
|
|
dbname
|
Database yang akan dikelola dan dirawat.
|
Contoh
psql -h pc-xxx.rwlb.rds.aliyuncs.com -p 5432 -U testusername -d postgres
Gunakan aplikasi untuk menghubungkan ke kluster
Menghubungkan ke kluster PolarDB for PostgreSQL Distributed Edition sama seperti menghubungkan ke database PostgreSQL lainnya. Anda hanya perlu mengganti titik akhir database, port, akun, dan password. Contoh berikut menunjukkan cara mengakses database PolarDB menggunakan aplikasi dalam berbagai bahasa pemrograman:
Java
Contoh ini menggunakan proyek Maven untuk menghubungkan driver JDBC PostgreSQL ke kluster PolarDB for PostgreSQL Distributed Edition.
-
Pertama, tambahkan dependensi driver JDBC PostgreSQL ke file pom.xml. Contoh kode:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.18</version>
</dependency>
-
Hubungkan ke kluster. Ganti parameter <HOST>, <PORT>, <USER>, <PASSWORD>, <DATABASE>, <YOUR_TABLE_NAME>, dan <YOUR_TABLE_COLUMN_NAME>.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class PolarDBConnection {
public static void main(String[] args) {
// URL database, username, password
String url = "jdbc:postgresql://<HOST>:<PORT>/<DATABASE>";
String user = "<USER>";
String password = "<PASSWORD>";
try {
// Muat driver JDBC
Class.forName("org.postgresql.Driver");
// Buat koneksi
Connection conn = DriverManager.getConnection(url, user, password);
// Buat objek Statement
Statement stmt = conn.createStatement();
// Jalankan kueri SQL
ResultSet rs = stmt.executeQuery("SELECT * FROM <YOUR_TABLE_NAME>");
// Proses set hasil
while (rs.next()) {
System.out.println(rs.getString("<YOUR_TABLE_COLUMN_NAME>"));
}
// Tutup resource
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Python
Contoh ini menggunakan Python 3 dengan library psycopg2 untuk menghubungkan ke kluster PolarDB for PostgreSQL Distributed Edition.
-
Pertama, instal library psycopg2. Jika belum terinstal, jalankan perintah berikut:
pip3 install psycopg2-binary
-
Hubungkan ke kluster. Ganti parameter <HOST>, <PORT>, <USER>, <PASSWORD>, <DATABASE>, dan <YOUR_TABLE_NAME>.
import psycopg2
try:
# Parameter koneksi
conn = psycopg2.connect(
host="<HOST>", # Alamat host database
database="<DATABASE>", # Nama database
user="<USER>", # Username
password="<PASSWORD>", # Password
port="<PORT>" # Port
)
# Buat objek cursor
cursor = conn.cursor()
# Jalankan kueri
cursor.execute("SELECT * FROM <YOUR_TABLE_NAME>")
# Ambil semua hasil
records = cursor.fetchall()
for record in records:
print(record)
except Exception as e:
print("Error:", e)
finally:
# Tutup koneksi
if 'cursor' in locals():
cursor.close()
if 'conn' in locals():
conn.close()
Go
Contoh ini menggunakan Go 1.23.0 dengan package database/sql dan driver lib/pq untuk menghubungkan ke kluster PolarDB for PostgreSQL Distributed Edition.
-
Pertama, instal driver lib/pq. Jalankan perintah berikut:
go get -u github.com/lib/pq
-
Hubungkan ke kluster. Ganti parameter <HOST>, <PORT>, <USER>, <PASSWORD>, <DATABASE>, dan <YOUR_TABLE_NAME>.
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq" // Inisialisasi driver
)
func main() {
// Format string koneksi
connStr := "user=<USER> password=<PASSWORD> dbname=<DATABASE> host=<HOST> port=<PORT> sslmode=disable"
// Buka koneksi database
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close() // Tutup koneksi sebelum program keluar
// Uji apakah koneksi berhasil
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to PostgreSQL!")
// Jalankan kueri contoh
rows, err := db.Query("SELECT * FROM <YOUR_TABLE_NAME>")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
}
Catatan
postgres adalah database sistem default. Jangan lakukan operasi apa pun di database ini.
-
Buat dan kelola tabel terdistribusi dan tabel replikasi
-
Operasi DML pada tabel terdistribusi
-
Topik tambahan: