All Products
Search
Document Center

Hologres:Berlangganan binlog Hologres

Last Updated:Jun 21, 2026

Hologres menyediakan fitur binlog untuk menangkap event database. Anda dapat menggunakan event ini untuk replikasi data, sinkronisasi data, atau sebagai aliran pesan bagi konsumen downstream. Mengonsumsi binlog Hologres meningkatkan penggunaan ulang data dan mengurangi latensi pemrosesan data end-to-end. Topik ini menjelaskan cara berlangganan binlog Hologres dan melakukan operasi terkait.

Binlog

Seperti database tradisional seperti MySQL, Hologres mendukung binlog untuk mencatat semua event perubahan data. Anda dapat menggunakan binlog Hologres untuk mengimplementasikan replikasi data dan sinkronisasi data. Namun, binlog Hologres biasanya hanya digunakan untuk sinkronisasi data, sedangkan binlog database tradisional juga digunakan dalam skenario ketersediaan tinggi, seperti sinkronisasi instans primary-replika dan pemulihan data. Oleh karena itu, implementasinya berbeda dalam beberapa aspek utama:

  • Binlog Hologres tidak mencatat operasi DDL.

  • Binlog Hologres bersifat fleksibel dan spesifik per tabel. Anda dapat mengaktifkan atau menonaktifkannya secara per tabel dan menetapkan Time to Live (TTL) yang berbeda untuk setiap tabel.

  • Sebagai gudang data real-time terdistribusi, Hologres memiliki binlog terdistribusi.

  • Anda dapat dengan mudah mengkueri binlog Hologres.

Dalam skenario data besar, Flink dapat langsung mengonsumsi binlog Hologres. Dibandingkan dengan pelapisan gudang data tradisional, kombinasi Flink dan binlog Hologres memungkinkan arsitektur yang sepenuhnya berbasis event. Hal ini memungkinkan pemrosesan real-time dari operation data store (ODS) ke lapisan dimensi gudang data (DWD), serta dari lapisan DWD ke lapisan layanan data (DWS). Pendekatan ini mendukung tata kelola data melalui pelapisan sekaligus menyatukan penyimpanan, meningkatkan penggunaan ulang data, dan mengurangi latensi pemrosesan end-to-end. Ini menyediakan solusi gudang data real-time terpadu.

Batasan

Perhatikan batasan berikut saat Anda berlangganan binlog Hologres:

  • Hanya Hologres V0.9 atau yang lebih baru yang mendukung langganan binlog. Jika instans Anda menggunakan versi sebelumnya, bergabunglah dengan grup DingTalk dukungan online. Untuk detailnya, lihat Bagaimana cara mendapatkan dukungan online tambahan?.

  • Pada Hologres V0.9 dan V0.10, Anda tidak dapat mengaktifkan binlog untuk tabel yang sudah ada dengan mengubah propertinya. Anda harus membuat ulang tabel tersebut. Mulai dari V1.1, Anda dapat mengaktifkan binlog sesuai kebutuhan.

  • Sebelum Hologres V1.3.14 dan V1.1.82, hanya Superuser yang dapat mengonsumsi binlog. Menggunakan akun dengan hak istimewa yang lebih rendah akan menghasilkan error permission denied for table hg_replication_slot_properties. Mulai dari V1.3.14 dan V1.1.82, akun hanya memerlukan izin SELECT pada tabel untuk mengonsumsi binlog dengan Flink. Untuk mengonsumsi binlog dengan JDBC, akun harus berada dalam Replication Role.

  • Hologres mendukung binlog tingkat tabel baik untuk tabel berorientasi baris maupun tabel berorientasi kolom. Tabel berikut mencantumkan metode konsumsi yang didukung.

    Kategori Flink

    Tabel berorientasi baris

    Tabel berorientasi kolom

    Tabel hibrida baris-kolom (Didukung mulai V1.1)

    Blink

    Didukung

    Didukung

    Didukung

    Realtime Compute for Apache Flink

    Didukung

    Didukung

    Didukung

    Apache Flink

    Tidak didukung

    Tidak didukung

    Tidak didukung

    JDBC

    Didukung di V1.1 dan yang lebih baru

    Didukung di V1.1 dan yang lebih baru

    Didukung di V1.1 dan yang lebih baru

  • Blink tidak mendukung tipe data TIMESTAMP saat mengonsumsi binlog Hologres. Gunakan tipe TIMESTAMPTZ saat membuat tabel di Hologres. Tipe khusus lain seperti SMALLINT juga tidak didukung.

  • Anda tidak dapat mengonsumsi binlog dari tabel induk tabel partisi. Gunakan tabel anak atau tabel reguler (non-partisi). Mulai dari Hologres V1.3.24, Anda dapat memodifikasi TTL binlog tabel anak sesuai kebutuhan. Jika Anda tidak secara eksplisit menentukan TTL binlog untuk tabel anak, tabel tersebut mewarisi TTL dari tabel induknya. Perhatikan bahwa TTL binlog bukanlah pengatur waktu yang presisi. Sistem tidak menjamin bahwa binlog langsung dihapus setelah kedaluwarsa. Sistem menghapus binlog beberapa saat setelah kedaluwarsa.

  • Untuk beban kerja berat tulis, mengaktifkan binlog pada tabel berorientasi kolom secara teoretis menimbulkan overhead lebih besar dibandingkan pada tabel berorientasi baris. Oleh karena itu, gunakan tabel berorientasi baris saat Anda mengaktifkan binlog. Jika tabel tersebut juga digunakan untuk kueri OLAP, gunakan format penyimpanan hibrida baris-kolom. Untuk informasi lebih lanjut, lihat Format penyimpanan tabel.

  • Hanya tabel internal Hologres yang mendukung binlog. Tabel eksternal tidak didukung.

Format dan prinsip binlog

Sebuah catatan binlog berisi field sistem dan kolom tabel pengguna. Tabel berikut menjelaskan field-field tersebut.

Nama field

Tipe

Deskripsi

hg_binlog_lsn

BIGINT

Field sistem binlog yang merepresentasikan nomor urutan log (LSN). Nilainya meningkat secara monoton tetapi tidak dijamin kontinu dalam satu shard. Nilai tersebut tidak dijamin unik atau terurut antar shard.

Catatan

Untuk informasi lebih lanjut tentang bagaimana data binlog didistribusikan di seluruh shard, lihat Distribution key.

hg_binlog_event_type

BIGINT

Field sistem binlog yang menunjukkan jenis event perubahan.

  • Nilai valid untuk hg_binlog_event_type adalah:

    • 5 (INSERT): Catatan binlog untuk penyisipan baris baru.

    • 2 (DELETE): Catatan binlog untuk penghapusan baris yang ada.

    • 3 (BEFORE_UPDATE): Catatan binlog untuk status baris yang ada sebelum pembaruan.

    • 7 (AFTER_UPDATE): Catatan binlog untuk status baris yang ada setelah pembaruan.

hg_binlog_timestamp_us

BIGINT

Field sistem binlog yang merepresentasikan timestamp sistem dalam mikrodetik (us).

user_table_column_1

User-defined

Kolom tabel pengguna.

...

...

...

user_table_column_n

User-defined

Kolom tabel pengguna.

  • Operasi UPDATE menghasilkan dua catatan binlog: satu untuk status baris sebelum pembaruan dan satu untuk status baris setelah pembaruan. Fitur langganan binlog memastikan bahwa kedua catatan ini berurutan, dengan catatan sebelum pembaruan muncul lebih dulu.

  • Saat Anda melakukan UPDATE dengan Hologres Connector, seperti Holo Client, Flink Connector, atau Data Integration, connector tersebut menerjemahkan event BEFORE_UPDATE menjadi event DELETE dan event AFTER_UPDATE menjadi event INSERT. Oleh karena itu, Anda akan melihat nilai 2 dan 5 pada field hg_binlog_event_type. Namun, connector tersebut memastikan konsistensi data eventual.

  • Field hg_binlog_event_type mencatat event BEFORE_UPDATE dan AFTER_UPDATE hanya ketika Anda mengeksekusi pernyataan UPDATE menggunakan SQL murni.

Anda dapat menganggap binlog Hologres sebagai tabel berorientasi baris khusus. Mengaktifkan binlog untuk sebuah tabel sama seperti membuat tabel berorientasi baris baru di mana hg_binlog_lsn adalah kunci, dan kolom tabel asli, hg_binlog_event_type, serta hg_binlog_timestamp_us bersama-sama membentuk nilainya. Tabel binlog memiliki skema tetap atau strongly-typed. Urutan kolom pengguna konsisten dengan urutan yang ditentukan dalam DDL tabel. Karena alasan ini, gunakan tabel berorientasi baris atau tabel hibrida baris-kolom untuk tabel yang diaktifkan binlog-nya agar mencapai performa baca binlog yang lebih baik.

Mengaktifkan binlog

Secara default, fitur binlog dinonaktifkan di Hologres. Anda dapat mengaktifkannya dengan mengatur properti tabel binlog.level dan binlog.ttl. Contoh berikut menunjukkan cara mengaktifkan binlog. Untuk informasi lebih lanjut tentang parameter pembuatan tabel, lihat CREATE TABLE.

Catatan

Secara teori, mengaktifkan binlog pada tabel berorientasi kolom lebih mahal dibandingkan pada tabel berorientasi baris. Jika Anda sering memperbarui tabel tersebut, kami menyarankan untuk mengaktifkan binlog pada tabel berorientasi baris.

  • Sintaksis untuk V2.1 dan yang lebih baru:

    Nama properti tabel binlog.level dan binlog.ttl diperbarui menjadi binlog_level dan binlog_ttl.

    CREATE TABLE test_message_src (
        id int PRIMARY KEY,
        title text NOT NULL,
        body text
    )
    WITH (
        orientation = 'row',
        clustering_key = 'id',
        binlog_level = 'replica',
        binlog_ttl = '86400' -- TTL binlog, dalam detik.
    );
  • Sintaksis yang didukung di semua versi:

    begin;
    create table test_message_src(
      id int primary key, 
      title text not null, 
      body text);
    call set_table_property('test_message_src', 'orientation', 'row');--Buat tabel berorientasi baris bernama test_message_src.
    call set_table_property('test_message_src', 'clustering_key', 'id');--Buat indeks terkluster pada kolom id.
    call set_table_property('test_message_src', 'binlog.level', 'replica');--Atur properti tabel untuk mengaktifkan fitur binlog.
    call set_table_property('test_message_src', 'binlog.ttl', '86400');--TTL binlog, dalam detik.
    commit;

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

binlog_level atau binlog.level

Menentukan apakah binlog diaktifkan. Nilai valid:

  • replica: diaktifkan.

  • none: dinonaktifkan.

binlog_ttl atau binlog.ttl

TTL untuk binlog, dalam detik. Nilai default: 2592000 (30 hari).

Mengaktifkan binlog sesuai kebutuhan

Mulai dari Hologres V1.1, Anda dapat mengaktifkan atau menonaktifkan binlog. Anda juga dapat mengonfigurasi TTL untuk memenuhi kebutuhan retensi yang berbeda. Anda dapat mengaktifkan binlog untuk tabel yang sudah ada tanpa harus membuat ulang.

Catatan

Fitur berikut hanya tersedia di Hologres V1.1 dan yang lebih baru. Jika Anda menggunakan versi sebelumnya, lihat Pemecahan masalah kegagalan persiapan peningkatan atau hubungi kami melalui grup DingTalk Hologres. Untuk informasi lebih lanjut, lihat Bagaimana cara mendapatkan dukungan online tambahan?.

  • Aktifkan binlog

    Gunakan pernyataan berikut untuk mengaktifkan binlog pada tabel yang sudah ada dan mengatur TTL binlog.

    -- Atur properti tabel untuk mengaktifkan binlog.
    begin;
    call set_table_property('<table_name>', 'binlog.level', 'replica');
    commit;
    -- Atur properti tabel untuk mengonfigurasi TTL binlog dalam detik.
    begin;
    call set_table_property('<table_name>', 'binlog.ttl', '2592000');
    commit;

    table_name adalah nama tabel yang ingin Anda aktifkan binlog-nya.

  • Nonaktifkan binlog

    Gunakan pernyataan berikut untuk menonaktifkan binlog pada sebuah tabel.

    -- Atur properti tabel untuk menonaktifkan binlog.
    begin; 
    call set_table_property('<table_name>', 'binlog.level', 'none'); 
    commit; 

    table_name adalah nama tabel yang ingin Anda nonaktifkan binlog-nya.

  • Ubah TTL binlog

    Anda dapat menggunakan pernyataan berikut untuk mengubah TTL tabel yang telah diaktifkan binlog-nya.

    Catatan

    Mulai dari Hologres V1.3.24, Anda dapat mengatur TTL binlog untuk tabel anak dari tabel partisi. Jika Anda tidak secara eksplisit mengatur TTL binlog untuk tabel anak, tabel tersebut mewarisi TTL binlog dari tabel induknya.

    call set_table_property('<table_name>', 'binlog.ttl', '8640000'); -- Satuannya detik.

    table_name adalah nama tabel yang ingin Anda ubah TTL binlog-nya.

Mengkueri binlog

Data binlog Hologres bersifat strongly typed. Untuk mengkueri binlog dari tabel tertentu, Anda dapat menggabungkan field sistem binlog bawaan dengan kolom tabel asli. Hologres juga menyediakan fungsi untuk mengkueri binlog paling awal atau paling akhir, atau untuk mengkueri informasi binlog berdasarkan LSN atau timestamp yang diketahui.

Mengkueri berdasarkan field bawaan

Gunakan pernyataan berikut untuk mengkueri binlog dengan menggabungkan field binlog bawaan dan field tabel asli.

SELECT hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timestamp_us,* FROM test_message_src;

Kode berikut memberikan contoh hasil.

postgres=# select hg_binlog_lsn, hg_binlog_event_type, hg_binlog_timestamp_us, * from test_message_src ;
 hg_binlog_lsn | hg_binlog_event_type | hg_binlog_timestamp_us | id |  title  |       body
---------------+----------------------+------------------------+----+---------+-------------------
          1081 |                    5 |       1626856018921653 |  1 | title 1 | body 1
          1092 |                    3 |       1626856054284918 |  1 | title 1 | body 1
          1093 |                    7 |       1626856054284918 |  1 | title 1 | body after update
          1095 |                    2 |       1626856059747536 |  1 | title 1 | body after update
(4 rows)

Mengkueri binlog paling awal atau paling akhir

Gunakan fungsi hg_get_binlog_cursor untuk mengkueri binlog paling awal atau paling akhir pada shard tertentu. Kode berikut memberikan sintaksisnya.

-- OLDEST: Kueri binlog paling awal pada shard ini.
SELECT * FROM hg_get_binlog_cursor('<table_name>','OLDEST',<shard_id>);
-- LATEST: Kueri binlog paling akhir pada shard ini.
SELECT * FROM hg_get_binlog_cursor('<table_name>','LATEST',<shard_id>);

Kode berikut memberikan contoh.

SELECT * FROM hg_get_binlog_cursor('test_message_src','OLDEST',0);

Kode berikut memberikan contoh hasil.

test=# select * from hg_get_binlog_cursor('test_message_src','OLDEST',0);
 hg_shard_id | hg_binlog_lsn | hg_binlog_timestamp_us
-------------+---------------+------------------------
           0 |           152 |       1716204893791755
(1 row)

Mengkueri timestamp berdasarkan LSN

Gunakan fungsi hg_get_binlog_cursor_by_lsn untuk mengkueri timestamp binlog. Fungsi ini mengembalikan informasi tentang catatan binlog pertama yang LSN-nya lebih besar dari atau sama dengan LSN yang ditentukan. Jika LSN yang ditentukan tidak ada, field hg_binlog_timestamp_us dalam hasil mengembalikan waktu saat ini. Kode berikut memberikan sintaksisnya.

SELECT * FROM hg_get_binlog_cursor_by_lsn('<table_name>',<lsn>,<shard_id>);--Nilai LSN harus bertipe BIGINT.

Kode berikut memberikan contoh.

SELECT * FROM hg_get_binlog_cursor_by_lsn('test_message_src',152,0);

Kode berikut memberikan contoh hasil.

test=# select * from hg_get_binlog_cursor_by_lsn('test_message_src',152,0);
 hg_shard_id | hg_binlog_lsn | hg_binlog_timestamp_us
-------------+---------------+------------------------
           0 |           152 |      1716204893791755
(1 row)

Mengkueri LSN berdasarkan timestamp

Gunakan fungsi hg_get_binlog_cursor_by_timestamp untuk mengkueri LSN binlog. Fungsi ini mengembalikan informasi tentang catatan binlog pertama yang timestamp-nya lebih besar dari atau sama dengan waktu yang ditentukan. Jika waktu yang ditentukan lebih baru daripada entri binlog terakhir, field hg_binlog_timestamp_us dalam hasil mengembalikan waktu saat ini, dan field hg_binlog_lsn mengembalikan LSN yang akan diberikan pada baris yang akan disisipkan berikutnya. Kode berikut memberikan sintaksisnya.

Catatan

Jika timestamp yang diberikan lebih baru daripada waktu saat ini yang dikembalikan oleh fungsi now(), fungsi akan melemparkan exception "get binlog cursor in future time".

SELECT * FROM hg_get_binlog_cursor_by_timestamp('<table_name>',<timestamp>,<shard_id>);

Kode berikut memberikan contoh.

SELECT *,to_timestamp(hg_binlog_timestamp_us/1000000.0) FROM hg_get_binlog_cursor_by_timestamp('test_message_src','2024-05-20 19:34:53.791+08',0);

Kode berikut memberikan contoh hasil.

test=# select *, to_timestamp(hg_binlog_timestamp_us/1000000.0) from hg_get_binlog_cursor_by_timestamp('test_message_src','2024-05-20 19:34:53.791+08',0);
 hg_shard_id | hg_binlog_lsn | hg_binlog_timestamp_us |          to_timestamp
-------------+---------------+------------------------+-------------------------------
           0 |           152 |    1716204893791755 | 2024-05-20 19:34:53.791755+08
(1 row)

Konsumsi binlog real-time

Anda dapat mengonsumsi binlog Hologres dengan Flink, Blink, dan JDBC (termasuk Holo Client). Untuk informasi lebih lanjut, lihat topik berikut:

Menampilkan tabel yang diaktifkan binlog-nya

Anda dapat menggunakan pernyataan SQL berikut untuk melihat tabel mana saja yang telah diaktifkan binlog-nya.

SELECT
    *
FROM
    hologres.hg_table_properties
WHERE
    property_key = 'binlog.level'
    AND property_value = 'replica';

Berikut adalah contoh hasilnya. Kueri mengembalikan empat kolom: table_namespace, table_name, property_key, dan property_value. Kolom-kolom ini memberikan informasi tentang semua tabel yang telah diaktifkan binlog-nya.

Menampilkan ukuran penyimpanan binlog

  • Anda dapat menggunakan fungsi pg_relation_size untuk mendapatkan ukuran penyimpanan tabel, yang mencakup ukuran penyimpanan binlog. Untuk informasi lebih lanjut, lihat Mengkueri ukuran penyimpanan tabel.

  • Mulai dari Hologres V2.1, Anda dapat menggunakan fungsi hologres.hg_relation_size untuk melihat detail penyimpanan tabel, termasuk data dan binlog. Untuk informasi lebih lanjut, lihat Mengkueri detail penyimpanan tabel.

Menonaktifkan binlog selama operasi DML

Anda dapat menggunakan parameter GUC berikut untuk mencegah sesi saat ini menghasilkan binlog selama operasi DML. Atur parameter ini pada tingkat sesi sebelum menjalankan pernyataan DML.

-- Aktifkan pada tingkat sesi.
SET hg_experimental_generate_binlog=off;