All Products
Search
Document Center

Hologres:Menyiapkan replikasi binlog untuk Hologres

Last Updated:Mar 12, 2026

Hologres mendukung binary logging (binlog) untuk menangkap event database. Anda dapat menggunakan fitur ini untuk mereplikasi atau menyinkronkan data serta meneruskan event tersebut sebagai aliran pesan ke berbagai konsumen. Mengonsumsi binlog Hologres meningkatkan penggunaan ulang data dan mengurangi latensi end-to-end dalam transformasi data. Topik ini menjelaskan cara berlangganan binlog Hologres dan melakukan operasi terkait.

Pengenalan binlog

Seperti pada database MySQL tradisional, Hologres menggunakan binary logging untuk mencatat semua event perubahan data di dalam database. Binlog Hologres memungkinkan replikasi dan sinkronisasi data yang fleksibel serta nyaman. Namun, binlog Hologres biasanya hanya digunakan untuk sinkronisasi data, sedangkan binlog database tradisional juga digunakan dalam skenario ketersediaan tinggi (HA), seperti sinkronisasi instans primary-replica dan pemulihan data. Akibatnya, implementasinya berbeda dalam beberapa aspek:

  • Binary logging di Hologres tidak mencatat operasi DDL.

  • Binlog Hologres bersifat fleksibel dan beroperasi pada tingkat tabel. Anda dapat mengaktifkan atau menonaktifkannya sesuai kebutuhan serta mengatur nilai Time to Live (TTL) yang berbeda untuk tabel yang berbeda.

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

  • Anda dapat dengan mudah melakukan kueri terhadap binlog Hologres.

Dalam skenario data besar, Flink dapat langsung mengonsumsi binlog Hologres. Dibandingkan dengan pelapisan gudang data tradisional, kombinasi Flink dan binlog Hologres menciptakan arsitektur yang sepenuhnya berbasis event. Arsitektur ini memfasilitasi pekerjaan transformasi data real-time end-to-end dari operation data store (ODS) ke lapisan dimensi gudang data (DWD), dan dari lapisan DWD ke lapisan layanan gudang data (DWS). Solusi ini menyediakan penyimpanan terpadu yang mendukung administrasi berlapis, meningkatkan penggunaan ulang data, dan mengurangi latensi transformasi data end-to-end untuk memberikan solusi gudang data real-time terpadu.

Batasan

Perhatikan batasan berikut saat Anda berlangganan binlog Hologres:

  • Berlangganan binlog Hologres hanya didukung di Hologres V0.9 dan versi yang lebih baru. Jika versi instans Anda lebih lama dari V0.9, bergabunglah dengan grup DingTalk dukungan online. Untuk informasi selengkapnya, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.

  • Di Hologres V0.9 dan V0.10, Anda tidak dapat mengaktifkan binlog untuk tabel yang sudah ada dengan memodifikasi properti tabel. Sebagai gantinya, Anda harus membuat ulang tabel tersebut. Di Hologres V1.1 dan versi yang lebih baru, Anda dapat mengaktifkan binlog sesuai kebutuhan.

  • Pada versi sebelum Hologres V1.3.14 dan V1.1.82, hanya superuser yang dapat mengonsumsi binlog. Jika Anda mencoba menggunakan akun dengan izin yang lebih rendah untuk mengonsumsi binlog, akan muncul error izin: permission denied for table hg_replication_slot_properties. Di Hologres V1.3.14, V1.1.82, dan versi yang lebih baru, akun hanya memerlukan izin untuk melakukan kueri terhadap tabel jika Anda menggunakan Flink untuk mengonsumsi binlog. Untuk mengonsumsi binlog Hologres menggunakan Java Database Connectivity (JDBC), akun tersebut harus memiliki Replication Role.

  • Hologres mendukung fitur binlog pada tingkat tabel baik untuk tabel berorientasi baris maupun tabel berorientasi kolom. Tabel berikut menjelaskan dukungan untuk berlangganan binlog Hologres.

    Klasifikasi Flink

    Binlog tabel berorientasi baris Hologres

    Binlog tabel berorientasi kolom Hologres

    Binlog tabel hibrida baris-kolom Hologres (didukung sejak Hologres V1.1)

    Realtime Compute (Blink)

    Didukung

    Didukung

    Didukung

    Fully managed Flink

    Didukung

    Didukung

    Didukung

    Open source Flink

    Tidak didukung

    Tidak didukung

    Tidak didukung

    JDBC

    Didukung sejak Hologres V1.1

    Didukung sejak Hologres V1.1

    Didukung sejak Hologres V1.1

  • Saat Anda menggunakan Blink untuk mengonsumsi binlog Hologres, tipe data TIMESTAMP tidak didukung. Anda harus menggunakan tipe data TIMESTAMPTZ saat membuat tabel di Hologres. Tipe data lain, seperti SMALLINT, juga tidak didukung.

  • Anda tidak dapat mengonsumsi binlog dari tabel induk dari tabel partisi. Anda harus menggunakan tabel anak atau tabel standar (non-partisi). Di Hologres V1.3.24 dan versi yang lebih baru, Anda dapat memodifikasi TTL binlog untuk tabel anak dari tabel partisi sesuai kebutuhan. Jika Anda tidak secara eksplisit menentukan TTL binlog untuk tabel anak, tabel tersebut akan mewarisi TTL binlog dari tabel induk. Perhatikan bahwa TTL binlog bukanlah nilai yang presisi. Sistem tidak menjamin bahwa binlog akan langsung dihapus setelah masa berlakunya habis. Binlog tersebut akan dihapus pada suatu waktu setelah masa berlakunya berakhir.

  • Untuk skenario yang melibatkan pembaruan yang sering, secara teoretis mengaktifkan binlog untuk tabel berorientasi kolom memiliki overhead yang lebih besar dibandingkan tabel berorientasi baris. Kami menyarankan Anda menggunakan tabel berorientasi baris dengan binlog yang diaktifkan. Jika tabel tersebut juga digunakan untuk kueri online analytical processing (OLAP), kami menyarankan Anda menggunakan format penyimpanan hibrida baris-kolom. Untuk informasi selengkapnya, lihat Format penyimpanan tabel.

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

Format dan prinsip binlog

Sebuah catatan binlog terdiri dari field sistem binlog dan field tabel pengguna, yang dijelaskan dalam tabel di bawah ini.

Nama bidang

Tipe bidang

Deskripsi

hg_binlog_lsn

BIGINT

Field sistem binlog yang merepresentasikan nomor seri binlog. Nilainya meningkat secara monoton dalam satu shard tetapi tidak dijamin kontinu. Nilai ini juga tidak dijamin unik atau terurut di antara shard yang berbeda.

Catatan

Untuk informasi lebih lanjut tentang bagaimana data binlog didistribusikan dalam shard, lihat Distribution Key.

hg_binlog_event_type

BIGINT

Field sistem binlog yang menunjukkan jenis modifikasi yang direpresentasikan oleh catatan saat ini.

  • hg_binlog_event_type memiliki empat nilai kemungkinan berikut:

    • INSERT=5: Binlog untuk menyisipkan catatan baru.

    • DELETE=2: Binlog untuk menghapus catatan yang ada.

    • BEFORE_UPDATE=3: Binlog adalah catatan sebelum pembaruan.

    • AFTER_UPDATE=7: Binlog adalah catatan setelah pembaruan.

hg_binlog_timestamp_us

BIGINT

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

user_table_column_1

User-defined

Field tabel pengguna.

...

...

...

user_table_column_n

User-defined

Field tabel pengguna.

  • Operasi UPDATE menghasilkan dua catatan binlog: satu untuk status sebelum pembaruan dan satu untuk status setelah pembaruan. Fitur langganan binlog memastikan bahwa kedua catatan ini berurutan. Catatan sebelum pembaruan mendahului catatan setelah pembaruan.

  • Untuk operasi UPDATE yang dilakukan menggunakan konektor Hologres, seperti Holo Client, Flink Connector, atau Data Integration, konektor tersebut menerjemahkan BEFORE_UPDATE menjadi DELETE dan AFTER_UPDATE menjadi INSERT. Oleh karena itu, Anda akan melihat nilai 2 dan 5 pada field hg_binlog_event_type. Namun, konektor tersebut memastikan konsistensi akhir data.

  • Field hg_binlog_event_type hanya mencatat BEFORE_UPDATE dan AFTER_UPDATE ketika operasi UPDATE dilakukan menggunakan pernyataan SQL murni.

Binlog Hologres dapat dipandang sebagai tabel berorientasi baris khusus. Mengaktifkan binlog untuk sebuah tabel mirip dengan membuat tabel berorientasi baris baru di mana hg_binlog_lsn adalah kuncinya. Field asli dari tabel bisnis, bersama dengan hg_binlog_event_type dan hg_binlog_timestamp_us, digabungkan untuk membentuk nilainya. Field-field pada tabel binlog bersifat tetap, artinya memiliki skema yang kuat. Urutan field pengguna sesuai dengan urutan yang didefinisikan dalam DDL tabel bisnis. Oleh karena itu, kami menyarankan Anda menggunakan tabel berorientasi baris atau tabel hibrida baris-kolom saat mengaktifkan binlog untuk mencapai performa yang lebih baik saat membaca binlog.

Aktifkan binlog

Di Hologres, fitur binlog dinonaktifkan secara default. Anda dapat mengaktifkannya dengan mengatur properti tabel binlog.level dan binlog.ttl. Contoh berikut menunjukkan cara mengaktifkan binlog. Untuk informasi lebih lanjut tentang parameter yang digunakan untuk membuat tabel, lihat CREATE TABLE.

Catatan

Secara teoretis, overhead mengaktifkan binlog untuk tabel berorientasi kolom lebih tinggi dibandingkan tabel berorientasi baris. Jika tabel Anda sering diperbarui, kami menyarankan Anda menggunakan tabel berorientasi baris untuk mengaktifkan binlog.

  • Sintaks yang didukung di V2.1 dan versi 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 untuk log biner, dalam detik.
    );
  • Sintaks yang didukung oleh 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');-- Membuat tabel berorientasi baris test_message_src.
    call set_table_property('test_message_src', 'clustering_key', 'id');-- Membuat indeks terkluster pada kolom id.
    call set_table_property('test_message_src', 'binlog.level', 'replica');-- Mengatur properti tabel untuk mengaktifkan fitur binlog.
    call set_table_property('test_message_src', 'binlog.ttl', '86400');-- TTL untuk log biner, dalam detik.
    commit;

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

binlog_level atau binlog.level

Menentukan apakah binlog diaktifkan. Nilai yang valid:

  • replica: Aktifkan.

  • none: Nonaktifkan.

binlog_ttl atau binlog.ttl

TTL untuk binlog, dalam detik. Nilai default adalah 30 hari, yaitu 2592000 detik.

Aktifkan binlog sesuai kebutuhan

Di Hologres V1.1 dan versi yang lebih baru, Anda dapat mengaktifkan atau menonaktifkan fitur binlog sesuai kebutuhan bisnis Anda. Anda juga dapat mengonfigurasi TTL untuk memenuhi persyaratan periode retensi berbagai skenario bisnis. Anda dapat mengaktifkan binlog untuk tabel yang sudah ada tanpa perlu membuat ulang, yang merupakan proses cepat dan nyaman.

Catatan

Fitur berikut hanya tersedia di Hologres V1.1 dan versi yang lebih baru. Jika versi instans Anda lebih lama dari V1.1, lihat Error umum kegagalan persiapan peningkatan atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi selengkapnya, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.

  • Aktifkan binlog

    Anda dapat menggunakan pernyataan berikut untuk mengaktifkan binlog pada tabel yang sudah ada dan mengatur TTL binlog.

    -- Mengatur properti tabel untuk mengaktifkan fitur binlog.
    begin;
    call set_table_property('<table_name>', 'binlog.level', 'replica');
    commit;
    
    -- Mengatur 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

    Anda dapat menggunakan pernyataan berikut untuk menonaktifkan binlog pada sebuah tabel.

    -- Mengatur properti tabel untuk menonaktifkan fitur 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 pada tabel yang telah diaktifkan binlog-nya. Hal ini memungkinkan Anda memenuhi berbagai persyaratan periode retensi bisnis.

    Catatan

    Di Hologres V1.3.24 dan versi yang lebih baru, Anda dapat mengaktifkan TTL binlog untuk tabel anak dari tabel partisi sesuai kebutuhan. Jika Anda tidak secara eksplisit mengubah TTL binlog untuk tabel anak, tabel tersebut secara default akan mewarisi TTL binlog dari tabel induk.

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

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

Lakukan kueri terhadap binlog

Data binlog tabel Hologres menggunakan format skema yang kuat. Untuk melakukan kueri terhadap binlog pada tabel tertentu, Anda dapat menggabungkan field binlog bawaan dengan field tabel asli. Hologres juga menyediakan fungsi untuk melakukan kueri terhadap binlog terbaru atau paling awal, atau melakukan kueri informasi binlog menggunakan LSN dan timestamp yang diketahui.

Lakukan kueri langsung terhadap binlog menggunakan field khusus bawaan

Anda dapat melakukan kueri terhadap binlog dengan menggabungkan field binlog bawaan dengan field tabel asli. Kode berikut memberikan contohnya.

SELECT hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timestamp_us,* FROM test_message_src;

Gambar berikut menunjukkan contoh hasil kueri.

image

Lakukan kueri terhadap binlog paling awal atau terbaru pada shard tertentu dari sebuah tabel

Anda dapat menggunakan fungsi hg_get_binlog_cursor untuk melakukan kueri terhadap binlog. Sintaksnya sebagai berikut.

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

-- LATEST: Binlog terbaru pada shard ini.
SELECT * FROM hg_get_binlog_cursor('<table_name>','LATEST',<shard_id>);

Kode berikut memberikan contohnya.

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

Gambar berikut menunjukkan contoh hasil kueri.

image

Lakukan kueri terhadap timestamp binlog berdasarkan LSN-nya

Gunakan fungsi hg_get_binlog_cursor_by_lsn untuk melakukan kueri terhadap timestamp binlog. Fungsi ini mengembalikan informasi tentang binlog pertama yang nomor urutan log (LSN)-nya lebih besar dari atau sama dengan LSN yang ditentukan. Jika LSN yang ditentukan tidak ada, field hg_binlog_timestamp_us dalam hasilnya adalah waktu saat ini. Sintaksnya sebagai berikut.

SELECT * FROM hg_get_binlog_cursor_by_lsn('<table_name>',<lsn>,<shard_id>);--Nilai LSN (tipe bigint)

Berikut ini contohnya.

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

Berikut ini menunjukkan contoh hasil kueri.

image

Lakukan kueri terhadap LSN binlog berdasarkan timestamp-nya

Anda dapat menggunakan fungsi hg_get_binlog_cursor_by_timestamp untuk melakukan kueri terhadap Log Sequence Number (LSN) binlog. Fungsi ini mengembalikan informasi tentang binlog pertama yang timestamp-nya lebih besar dari atau sama dengan waktu yang ditentukan. Jika waktu yang ditentukan lebih baru daripada timestamp entri binlog terbaru, field hg_binlog_timestamp_us dalam hasilnya berisi waktu saat ini, dan field hg_binlog_lsn berisi LSN yang akan diberikan pada penyisipan data berikutnya. Sintaksnya sebagai berikut.

Catatan

Jika timestamp yang diberikan lebih besar dari waktu saat ini (yang dikembalikan oleh fungsi now()), kueri SQL akan melemparkan exception "Get binlog cursor in future time".

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

Contohnya:

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);

Berikut ini menunjukkan contoh hasil kueri.

image

Mengonsumsi binlog Hologres secara real-time

Anda dapat mengonsumsi binlog Hologres menggunakan Flink, Blink, dan JDBC (termasuk Holo Client). Untuk informasi selengkapnya, lihat topik-topik berikut:

Lihat tabel yang telah diaktifkan binlog-nya

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

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

Gambar berikut menunjukkan contoh hasilnya.开启了binlog的表

Lihat ukuran penyimpanan binlog

  • Hologres memungkinkan Anda menggunakan fungsi pg_relation_size untuk mendapatkan ukuran penyimpanan tabel. Ukuran ini mencakup ukuran penyimpanan binlog. Untuk informasi selengkapnya, lihat Lihat ukuran penyimpanan tabel.

  • Di Hologres V2.1 dan versi yang lebih baru, Anda dapat menggunakan fungsi hologres.hg_relation_size untuk melihat informasi penyimpanan detail tabel, termasuk data, binlog, dan detail penyimpanan lainnya. Untuk informasi selengkapnya, lihat Lihat detail penyimpanan tabel.

Nonaktifkan binlog selama operasi DML pada tabel

Anda dapat menggunakan parameter Grand Unified Configuration (GUC) berikut untuk mencegah tabel menghasilkan binlog selama operasi DML. Anda harus mengaktifkan parameter ini pada tingkat session dan mengeksekusinya bersamaan dengan pernyataan DML.

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