All Products
Search
Document Center

PolarDB:PolarDB untuk PostgreSQL Edisi Terdistribusi

Last Updated:Sep 03, 2025

Kluster PolarDB untuk PostgreSQL Edisi Terdistribusi adalah solusi database terdistribusi yang dikembangkan berdasarkan edisi terpusat PolarDB untuk PostgreSQL. Kluster ini menggunakan arsitektur dua lapis node komputasi (CN) dan node data (DN) untuk memisahkan komputasi dan penyimpanan serta menyediakan kemampuan penskalaan terdistribusi. Kluster ini menggabungkan kekuatan database terdistribusi dengan kemampuan teruji dari PolarDB untuk PostgreSQL dan dapat memenuhi berbagai persyaratan kinerja dan keandalan aplikasi tingkat perusahaan.

Cara kerjanya

PolarDB untuk PostgreSQL Edisi Terdistribusi mencakup dua jenis node inti:

  • Node Komputasi (CN): Bertindak sebagai titik akses untuk kluster. Mereka mengurai SQL, membuat rencana kueri terdistribusi, dan mengelola metadata.

  • Node Data (DN): Menyimpan shard data fisik dari tabel.

Setiap node komputasi atau data adalah kluster PolarDB untuk PostgreSQL dengan ketersediaan tinggi (HA). Setiap node mencakup node baca-tulis (RW), node baca-saja (RO), dan penyimpanan terdistribusi (PolarStore) untuk memastikan keandalan pada tingkat komponen.

Keunggulan arsitektur

  • Penskalaan Horizontal Daring: Tambahkan node secara daring untuk memperluas kapasitas komputasi dan penyimpanan. Ini mengatasi hambatan mesin tunggal dan mendukung data berskala petabyte serta layanan dengan konkurensi tinggi.

  • Metode Penskalaan Fleksibel: Node menggunakan arsitektur penyimpanan bersama. Anda dapat melakukan penskalaan keluar dengan menambahkan lebih banyak node atau penskalaan naik dengan meningkatkan spesifikasi node.

  • Ketersediaan Tinggi dan Biaya Rendah: Penyimpanan terdistribusi (PolarStore) menggunakan replika tripel dan protokol replikasi ParallelRaft untuk memastikan ketersediaan data yang tinggi. Anda hanya dikenakan biaya untuk satu replika. Penyimpanan dibebankan berdasarkan penggunaan aktual, sehingga Anda tidak perlu menyesuaikan kapasitas secara manual.

  • Kinerja Tinggi: Optimalisasi I/O mendalam berdasarkan sistem file terdistribusi (PolarFileSystem, atau PolarFS) memberikan operasi input/output per detik (IOPS) yang sangat tinggi. Optimalisasi ini mencakup pembersihan halaman kotor paralel, pembacaan dan penulisan batch, serta caching ukuran tabel.

  • Backup dan Pemulihan Cepat: Buat backup dalam hitungan detik. Beberapa metode pemulihan data tersedia, seperti pemulihan berdasarkan titik waktu (PITR).

Pola pengembangan terdistribusi

Saat mengembangkan di PolarDB untuk PostgreSQL Edisi Terdistribusi, tugas utamanya adalah merencanakan distribusi data. Anda dapat memilih salah satu dari dua pola berikut berdasarkan skenario bisnis Anda:

  • Pemisahan Horizontal: Mendistribusikan baris tabel besar tunggal di beberapa DN berdasarkan nilai hash kolom tertentu (kolom distribusi). Pola ini menyelesaikan masalah kinerja yang disebabkan oleh tabel tunggal yang terlalu besar, seperti tabel pengguna atau tabel pesanan. Untuk kinerja optimal, sertakan kolom distribusi sebagai kondisi filter dalam kueri Anda.

    • Tabel Terdistribusi: Tabel yang secara logis lengkap tetapi datanya secara fisik dipisah dan disimpan di beberapa DN. Sebagai contoh, aplikasi mengakses tabel sensors_data, tetapi data sebenarnya disimpan dalam shard seperti sensors_data_shard1 dan sensors_data_shard2.

    • Kolom Distribusi: Kolom yang digunakan untuk menghitung nilai hash untuk menentukan distribusi data saat Anda membuat tabel terdistribusi. Contohnya adalah sensor_id.

    • Tabel Replikasi: Jenis tabel khusus di mana salinan penuh datanya disimpan di setiap DN. Biasanya digunakan untuk tabel dimensi kecil, seperti tabel negara atau informasi konfigurasi, yang sering digabungkan dengan tabel terdistribusi besar. Ini mengoptimalkan JOIN lintas node menjadi JOIN lokal dan secara signifikan meningkatkan kinerja kueri.

    • Transaksi Terdistribusi: Saat operasi tunggal (transaksi eksplisit BEGIN ... COMMIT/ROLLBACK atau transaksi implisit) perlu memodifikasi data yang didistribusikan di beberapa DN, sistem secara otomatis mengaktifkan transaksi terdistribusi untuk memastikan konsistensi data (atomicity, consistency, isolation, and durability (ACID)).

      Catatan

      Modifikasi apa pun pada tabel replikasi memicu transaksi terdistribusi.

    • CN Utama/Pengikut: Semua CN dapat memproses permintaan kueri. Namun, untuk memastikan konsistensi metadata, operasi Data Definition Language (DDL), seperti CREATE TABLE, hanya dapat dieksekusi pada CN utama. Perubahan secara otomatis disinkronkan ke semua node lainnya (CN dan DN).

  • Pemisahan Vertikal: Menyebarkan tabel dari modul bisnis yang berbeda ke DN yang berbeda. Pola ini cocok untuk mengisolasi sumber daya berdasarkan bisnis. Misalnya, Anda dapat menyimpan tabel untuk layanan transaksi frekuensi tinggi dan layanan pelaporan backend pada node yang berbeda untuk mencegah mereka saling mempengaruhi. Pola ini memiliki dampak minimal pada aplikasi karena CN melindungi detail dasar dari lapisan atas. Aplikasi masih dapat mengakses semua tabel seolah-olah mengakses database mandiri.

Cara menggunakan

  1. Hubungkan ke Database Terdistribusi

    1. Buat Akun Database

      Masuk ke Konsol PolarDB. Dalam daftar kluster, klik ID kluster untuk masuk ke halaman Basic Information. Di panel navigasi di sebelah kiri, pilih Settings and Management > Accounts untuk membuat akun database.image

      Catatan

      Anda dapat membuat Privileged Account atau Standard Account. Kedua jenis akun ini memiliki izin yang berbeda. Buat akun database berdasarkan kebutuhan bisnis Anda.

    2. Konfigurasikan Daftar Putih Kluster

      Masuk ke Konsol PolarDB. Dalam daftar kluster, klik ID kluster yang ingin Anda hubungkan untuk masuk ke halaman Basic Information. Di panel navigasi di sebelah kiri, pilih Settings and Management > Cluster Whitelists, tambahkan daftar putih IP atau grup keamanan.image

      Catatan
      • Jika Anda ingin mengakses kluster PolarDB dari instance ECS dan instance ECS berada di VPC yang sama dengan kluster PolarDB, buat daftar putih alamat IP dan tambahkan alamat IP internal instance ECS ke daftar putih, atau tambahkan grup keamanan tempat instance ECS tersebut berada.

      • Jika Anda ingin mengakses kluster PolarDB dari instance ECS dan instance ECS berada di VPC yang berbeda dari kluster PolarDB, buat daftar putih alamat IP dan tambahkan alamat IP publik instance ECS ke daftar putih, atau tambahkan grup keamanan tempat instance ECS tersebut berada.

      • Jika Anda ingin mengakses kluster PolarDB dari lingkungan lokal Anda, buat daftar putih alamat IP dan tambahkan alamat IP publik lingkungan lokal Anda ke daftar putih.

        Gunakan metode berikut untuk mendapatkan alamat IP publik lingkungan lokal Anda:

        • Linux: Buka CLI, masukkan perintah curl ifconfig.me, lalu tekan tombol Enter.

        • Windows: Buka Command Prompt, masukkan perintah curl ip.me, lalu tekan tombol Enter.

        • macOS: Mulai Terminal, masukkan perintah curl ifconfig.me, lalu tekan tombol Enter.

        Jika proxy digunakan untuk lingkungan jaringan lokal Anda, alamat IP yang diperoleh dengan metode di atas mungkin bukan alamat IP publik Anda yang sebenarnya. Anda dapat menambahkan blok CIDR 0.0.0.0/0 ke daftar putih kluster PolarDB. Setelah Anda 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 yang sebenarnya dan tambahkan ke daftar putih kluster. Kemudian, hapus blok CIDR 0.0.0.0/0 dari daftar putih.

        image

      • Jika Anda menambahkan blok CIDR 0.0.0.0/0 ke daftar putih IP, semua sumber akan diizinkan mengakses kluster. Jangan tambahkan 0.0.0.0/0 ke daftar putih IP kluster kecuali benar-benar diperlukan.

    3. Dapatkan Endpoint Database dan Port

      Masuk ke Konsol PolarDB. Dalam daftar kluster, klik ID kluster untuk masuk ke halaman Basic Information. Kemudian, Anda dapat melihat informasi endpoint di bagian Database Connections.image

      Catatan
      • Secara default, kluster PolarDB untuk PostgreSQL terdistribusi hanya memiliki satu Primary Endpoint, dan nomor port defaultnya adalah 5432.

      • Gunakan endpoint Private atau Public berdasarkan lingkungan akses Anda.

        • Jika Anda ingin mengakses kluster PolarDB dari instance ECS dan instance ECS berada di VPC yang sama dengan kluster PolarDB, gunakan endpoint Private.

        • Jika Anda ingin mengakses kluster PolarDB dari lingkungan lokal Anda, gunakan endpoint Public. Secara default, tidak ada endpoint publik yang tersedia. Klik Apply untuk mengajukan endpoint publik.

      • Kluster PolarDB tidak dapat mencapai kinerja optimal jika Anda menghubungkannya menggunakan endpoint public endpoint.

      • Anda tidak dapat terhubung ke kluster PolarDB dari host virtual dan server ringan menggunakan endpoint Private.

    4. Hubungkan ke Kluster Terdistribusi

      Gunakan DMS untuk terhubung ke kluster

      Data Management (DMS) adalah alat manajemen data grafis yang disediakan oleh Alibaba Cloud. Ini menyediakan berbagai layanan manajemen data, termasuk manajemen data, manajemen skema, manajemen pengguna, audit keamanan, tren data, pelacakan data, grafik intelijen bisnis (BI), optimasi kinerja, dan manajemen server. Anda dapat mengelola kluster PolarDB langsung menggunakan DMS tanpa menggunakan alat lain.

      1. Masuk ke Konsol PolarDB. Dalam daftar kluster, klik ID kluster yang ingin Anda hubungkan untuk masuk ke halaman Basic Information. Di sudut kanan atas halaman, klik Log On To Database.image

      2. Dalam kotak dialog yang muncul, masukkan akun database dan kata sandi yang Anda buat untuk kluster, lalu klik Login.image

      3. Setelah Anda masuk ke kluster, pilih Database Instances > Instances Connected di panel navigasi di sebelah kiri untuk mengelola kluster .image

      Gunakan klien untuk terhubung ke kluster

      Anda dapat menggunakan klien untuk terhubung ke kluster PolarDB. Prosedur berikut menggunakan klien pgAdmin 4 v9.0 untuk terhubung ke kluster.

      1. Unduh dan instal klien pgAdmin 4.

      2. Buka klien pgAdmin 4, klik kanan Servers, dan pilih Register > Server....image

      3. Di tab General, atur nama koneksi. Di tab Connection, konfigurasikan informasi koneksi kluster, dan klik Save.image

        image

        Parameter

        Deskripsi

        Host name/address

        Endpoint dan port kluster PolarDB.

        • Untuk mengakses kluster PolarDB dari instance ECS, dan instance ECS berada di VPC yang sama dengan kluster PolarDB, tentukan endpoint Private dan port.

        • Untuk mengakses kluster PolarDB dari lingkungan lokal Anda, tentukan endpoint Public dan port.

        • Nomor port default adalah 5432.

        Port

        Username

        Akun database dan kata sandi kluster PolarDB.

        Password

      4. Lihat hasil koneksi. Jika informasi koneksi benar, antarmuka berikut muncul, menunjukkan koneksi berhasil.image

        Catatan

        postgres adalah database sistem default. Jangan melakukan operasi apa pun pada database ini.

      Gunakan psql untuk terhubung ke kluster

      Anda dapat mengunduh psql dari PostgreSQL Downloads untuk terhubung ke kluster PolarDB. Anda juga dapat menggunakan psql di PolarDB-Tools untuk terhubung ke kluster PolarDB.

      Catatan
      • Metode koneksi kluster menggunakan psql sama untuk sistem Windows dan Linux.

      • Untuk informasi lebih lanjut tentang cara menggunakan psql, lihat psql.

      Sintaksis

      psql -h <host> -p <port> -U <username> -d <dbname>

      Parameter

      Deskripsi

      host

      Endpoint kluster dan port dari kluster PolarDB.

      • Untuk mengakses kluster PolarDB dari instance ECS, dan instance ECS berada di VPC yang sama dengan kluster PolarDB, tentukan endpoint Private dan port.

      • Untuk mengakses kluster PolarDB dari lingkungan lokal Anda, tentukan endpoint Public dan port.

      • Nomor port default adalah 5432.

      port

      username

      Akun database dari kluster PolarDB.

      dbname

      Nama database.

      Contoh

      psql -h pc-xxx.rwlb.rds.aliyuncs.com -p 5432 -U testusername -d postgres

      Hubungkan ke kluster dalam bahasa pemrograman

      Menghubungkan ke kluster PolarDB untuk PostgreSQL serupa dengan menghubungkan ke database PostgreSQL biasa. Anda hanya perlu mengubah parameter koneksi, termasuk endpoint, port, akun, dan kata sandi. Berikut adalah contoh cara menghubungkan ke kluster PolarDB dalam bahasa pemrograman tertentu.

      Java

      Contoh ini menjelaskan cara menghubungkan ke kluster PolarDB untuk PostgreSQL menggunakan driver JDBC PostgreSQL dalam proyek Java berbasis Maven.

      1. Tambahkan dependensi driver JDBC PostgreSQL ke file pom.xml Anda. Contoh kode:

        <dependency>
          <groupId>org.postgresql</groupId>
          <artifactId>postgresql</artifactId>
          <version>42.2.18</version>
        </dependency>
      2. Hubungkan ke kluster. Ganti placeholder <HOST>, <PORT>, <USER>, <PASSWORD>, <DATABASE>, <YOUR_TABLE_NAME>, dan <YOUR_TABLE_COLUMN_NAME> dengan parameter koneksi kluster yang sebenarnya.

        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, nama pengguna, dan kata sandi.
                String url = "jdbc:postgresql://<HOST>:<PORT>/<DATABASE>";
                String user = "<USER>";
                String password = "<PASSWORD>";
        
                try {
                    // Muat driver JDBC PostgreSQL.
                    Class.forName("org.postgresql.Driver");
                    
                    // Bentuk koneksi.
                    Connection conn = DriverManager.getConnection(url, user, password);
                    
                    // Buat objek Statement.
                    Statement stmt = conn.createStatement();
                    
                    // Eksekusi kueri SQL.
                    ResultSet rs = stmt.executeQuery("SELECT * FROM <YOUR_TABLE_NAME>");
                    
                    // Proses hasil set.
                    while (rs.next()) {
                        System.out.println(rs.getString("<YOUR_TABLE_COLUMN_NAME>"));
                    }
                    
                    // Tutup sumber daya.
                    rs.close();
                    stmt.close();
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

      Python

      Contoh ini menjelaskan cara menghubungkan ke kluster PolarDB untuk PostgreSQL menggunakan library psycopg2 dalam Python 3.

      1. Instal library psycopg2.

        pip3 install psycopg2-binary
      2. Hubungkan ke kluster. Ganti placeholder <HOST>, <PORT>, <USER>, <PASSWORD>, <DATABASE>, dan <YOUR_TABLE_NAME> dengan parameter koneksi kluster yang sebenarnya.

        import psycopg2
        
        try:
            # Parameter koneksi
            conn = psycopg2.connect(
                host="<HOST>",  # Endpoint kluster.
                database="<DATABASE>",  # Nama database.
                user="<USER>",  # Nama pengguna.
                password="<PASSWORD>",  # Kata sandi.
                port="<PORT>"  # Nomor port.
            )
        
            # Buat objek cursor.
            cursor = conn.cursor()
        
            # Eksekusi kueri.
            cursor.execute("SELECT * FROM <YOUR_TABLE_NAME>")
        
            # Dapatkan 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 menjelaskan cara menghubungkan ke kluster PolarDB untuk PostgreSQL menggunakan paket database/sql dan driver lib/pq dalam Go 1.23.0.

      1. Instal driver lib/pq.

        go get -u github.com/lib/pq
      2. Hubungkan ke kluster. Ganti placeholder <HOST>, <PORT>, <USER>, <PASSWORD>, <DATABASE>, dan <YOUR_TABLE_NAME> dengan parameter koneksi kluster yang sebenarnya.

        package main
        
        import (
            "database/sql"
            "fmt"
            "log"
        
            _ "github.com/lib/pq" // Inisialisasi driver PostgreSQL.
        )
        
        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 saat program keluar.
        
            // Uji koneksi.
            err = db.Ping()
            if err != nil {
                log.Fatal(err)
            }
            fmt.Println("Terhubung ke PostgreSQL!")
        
            // Eksekusi kueri.
            rows, err := db.Query("SELECT * FROM <YOUR_TABLE_NAME>")
            if err != nil {
                log.Fatal(err)
            }
            defer rows.Close()
        }
        
  2. Buat dan kelola tabel terdistribusi dan tabel replikasi

  3. Operasi DML pada tabel terdistribusi

  4. Optimalkan kueri pada tabel terdistribusi

  5. Konfigurasikan CDC untuk menyinkronkan perubahan data