Hologres menyediakan fitur pencatatan log biner untuk memungkinkan Anda mengonsumsi log biner Hologres. Fitur ini membantu meningkatkan kemampuan replikasi data dan mempersingkat latensi ujung ke ujung dalam pemrosesan data. Anda dapat menggunakan fitur ini untuk menangkap peristiwa basis data Hologres guna replikasi atau sinkronisasi data, atau meneruskan peristiwa tersebut ke konsumen sebagai pesan. Topik ini menjelaskan cara berlangganan log biner Hologres dan operasi terkait.
Pengenalan log biner
Mirip dengan database MySQL tradisional, Hologres menggunakan log biner untuk mencatat semua peristiwa perubahan data pada database. Log biner Hologres membuat replikasi dan sinkronisasi data menjadi lebih nyaman dan fleksibel. Namun, log biner Hologres umumnya digunakan hanya untuk sinkronisasi data. Pada database tradisional, log biner juga digunakan dalam skenario ketersediaan tinggi seperti sinkronisasi antara instans primer dan sekunder serta skenario pemulihan data. Implementasi log biner Hologres berbeda dari implementasi log biner database tradisional dalam aspek berikut:
Log biner Hologres tidak mencatat operasi bahasa definisi data (DDL).
Anda dapat mengaktifkan atau menonaktifkan fitur pencatatan log biner untuk tabel Hologres sesuai kebutuhan bisnis. Anda juga dapat mengonfigurasi pengaturan time to live (TTL) yang berbeda untuk setiap tabel.
Log biner mendukung konfigurasi distribusi Hologres.
Log biner Hologres dapat diquery dengan mudah.
Dalam skenario big data, Anda dapat menggunakan Flink untuk langsung mengonsumsi log biner Hologres. Dibandingkan dengan pelapisan gudang data tradisional, Flink dan log biner Hologres dapat mengimplementasikan tugas pemrosesan real-time ujung ke ujung dari lapisan Operational Data Store (ODS) ke lapisan Data Warehouse Detail (DWD), serta dari lapisan DWD ke lapisan Data Warehouse Summary (DWS). Ini memenuhi persyaratan penyimpanan terpadu dengan tata kelola berlapis, meningkatkan kemampuan penggunaan ulang data, mempersingkat latensi ujung ke ujung dalam pemrosesan data, dan memberikan pengguna solusi gudang data real-time satu atap.
Batasan
Sebelum berlangganan log biner di Hologres, perhatikan hal-hal berikut:
Hanya Hologres V0.9 dan versi lebih baru yang mendukung langganan log biner. Jika versi instance Hologres Anda lebih lama dari V0.9, bergabunglah dengan grup DingTalk Hologres untuk dukungan teknis. Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan dukungan online untuk Hologres.
Di Hologres V0.9 dan V0.10, Anda tidak dapat mengaktifkan pencatatan log biner untuk tabel yang sudah ada dengan memodifikasi properti tabel. Untuk mengaktifkan pencatatan log biner, Anda harus mengaktifkan fitur tersebut saat membuat tabel. Di Hologres V1.1 dan versi lebih baru, Anda dapat mengaktifkan pencatatan log biner untuk tabel yang sudah ada sesuai kebutuhan bisnis.
Untuk instance Hologres dengan versi minor lebih lama dari V1.3.14 atau instance Hologres dari semua versi lebih lama dari V1.1.82, hanya superuser yang dapat mengonsumsi log biner Hologres. Jika Anda menggunakan akun dengan izin lebih rendah untuk mengonsumsi log biner Hologres, pesan kesalahan
"permission denied for table hg_replication_slot_properties"akan dikembalikan. Di Hologres V1.3.14 dan semua versi lebih baru atau V1.1.82 dan versi minor lebih baru, jika Flink digunakan untuk mengonsumsi log biner Hologres, Anda dapat menggunakan akun dengan izin query. Jika Anda menggunakan driver Java Database Connectivity (JDBC) untuk mengonsumsi log biner Hologres, Anda harus menggunakan akun yang memiliki izin peran replikasi.Di Hologres, Anda dapat berlangganan log biner tabel berorientasi baris tunggal atau kolom tunggal. Tabel berikut menjelaskan dukungan untuk mode langganan yang berbeda.
Tipe Flink
Langganan log biner tabel Hologres berorientasi baris
Langganan log biner tabel Hologres berorientasi kolom
Langganan log biner tabel hibrid baris-kolom Hologres (didukung di Hologres V1.1 dan lebih baru)
Realtime Compute berbasis Blink
Didukung
Didukung
Didukung
Flink sepenuhnya dikelola
Didukung
Didukung
Didukung
Flink sumber terbuka
Tidak didukung
Tidak didukung
Tidak didukung
JDBC
Didukung dari Hologres V1.1
Didukung dari Hologres V1.1
Didukung dari Hologres V1.1
Realtime Compute berbasis Blink tidak mendukung log biner Hologres yang berisi data tipe TIMESTAMP. Saat membuat tabel di Hologres, tentukan tipe data TIMESTAMPTZ untuk bidang terkait. Selain itu, Realtime Compute berbasis Blink tidak mendukung log biner Hologres yang berisi data tipe khusus seperti SMALLINT.
Anda tidak dapat berlangganan log biner tabel induk. Anda dapat berlangganan log biner tabel anak atau tabel non-partisi. Di Hologres V1.3.24 dan versi lebih baru, Anda dapat mengonfigurasi TTL log biner untuk tabel anak sesuai kebutuhan bisnis. Jika Anda tidak secara eksplisit menentukan TTL untuk log biner tabel anak, TTL untuk log biner tabel induk digunakan sebagai TTL untuk log biner tabel anak. TTL log biner tidak akurat. Sistem tidak menjamin bahwa log biner dihapus segera setelah kedaluwarsa, tetapi menghapus log biner pada waktu tertentu setelah kedaluwarsa.
Secara teoritis, overhead pencatatan log biner untuk tabel berorientasi kolom lebih tinggi daripada untuk tabel berorientasi baris. Jika tabel Anda sering diperbarui, kami sarankan Anda mengaktifkan pencatatan log biner untuk tabel berorientasi baris. Jika tabel Anda juga melibatkan query pemrosesan analitik online (OLAP), kami sarankan Anda menggunakan mode penyimpanan hibrid baris-kolom. Untuk informasi lebih lanjut, lihat Mode penyimpanan tabel.
Anda hanya dapat mengaktifkan pencatatan log biner untuk tabel internal Hologres. Anda tidak dapat mengaktifkan pencatatan log biner untuk tabel asing.
Format dan prinsip log biner
Bidang dalam log biner terdiri dari bidang sistem dan bidang tabel yang ditentukan pengguna. Tabel berikut menjelaskan bidang tersebut.
Bidang | Tipe data | Deskripsi |
hg_binlog_lsn | BIGINT | Nomor urut log biner saat ini. Bidang ini adalah bidang sistem. Nilai bidang ini dalam log biner di shard yang sama bertambah monoton dan mungkin tidak berkelanjutan. Nilai bidang ini dalam log biner di shard yang berbeda mungkin identik dan tidak berurutan. Catatan Untuk informasi tentang bagaimana data log biner didistribusikan di shard, lihat Kunci distribusi. |
hg_binlog_event_type | BIGINT | Tipe operasi yang dicatat dalam log biner saat ini. Bidang ini adalah bidang sistem.
|
hg_binlog_timestamp_us | BIGINT | Timestamp sistem. Unit: mikrodetik. Bidang ini adalah bidang sistem. |
user_table_column_1 | Ditetapkan oleh pengguna | Bidang tabel yang ditentukan pengguna. |
... | ... | ... |
user_table_column_n | Ditetapkan oleh pengguna | Bidang tabel yang ditentukan pengguna. |
Operasi UPDATE menghasilkan dua rekaman dalam log biner, yang menunjukkan rekaman sebelum pembaruan dan rekaman setelah pembaruan. Pencatatan log biner memastikan bahwa nomor urut dari dua rekaman tersebut berkelanjutan dan dalam urutan yang benar. Rekaman yang dihasilkan setelah pembaruan datang setelah rekaman yang dihasilkan sebelum pembaruan.
Peristiwa yang sama dari operasi UPDATE dicatat sebagai nilai berbeda jika Anda melakukan operasi UPDATE menggunakan konektor Hologres, seperti Holo Client, konektor Flink, atau Data Integration dari DataWorks. Misalnya, jika Anda menggunakan konektor Hologres, nilai BEFORE_UPDATE untuk bidang hg_binlog_event_type diubah menjadi DELETE, dan nilai AFTER_UPDATE untuk bidang tersebut diubah menjadi INSERT. Akibatnya, nilai 2 dan 5 ditampilkan untuk bidang
hg_binlog_event_type. Perbedaan tersebut tidak dirasakan oleh pengguna.Nilai BEFORE_UPDATE dan AFTER_UPDATE tersedia untuk bidang
hg_binlog_event_typehanya jika Anda melakukan operasi UPDATE menggunakan pernyataan SQL.
Anda dapat menganggap log biner tabel Hologres sebagai tabel khusus berorientasi baris. Jika Anda mengaktifkan fitur pencatatan log biner untuk tabel bisnis, tabel berorientasi baris dibuat untuk tabel tersebut. Di tabel berorientasi baris, bidang hg_binlog_lsn adalah kunci, dan bidang yang ditentukan pengguna dalam tabel bisnis serta bidang hg_binlog_event_type dan hg_binlog_timestamp_us adalah nilainya. Bidang dalam log biner tetap dengan skema kuat. Urutan bidang yang ditentukan pengguna sama dengan yang didefinisikan dalam pernyataan DDL tabel bisnis. Oleh karena itu, kami sarankan Anda menggunakan mode penyimpanan berorientasi baris atau mode penyimpanan hibrid baris-kolom untuk tabel tempat Anda ingin mengaktifkan fitur pencatatan log biner. Ini memberikan kinerja yang lebih baik dalam membaca log biner.
Aktifkan pencatatan log biner
Secara default, pencatatan log biner dinonaktifkan untuk tabel Hologres. Anda dapat mengaktifkan fitur ini untuk tabel Hologres dengan mengonfigurasi properti tabel binlog.level dan binlog.ttl. Contoh kode berikut memberikan contoh cara mengaktifkan pencatatan log biner. Untuk informasi lebih lanjut tentang parameter untuk membuat tabel, lihat Ikhtisar.
Secara teoritis, overhead pencatatan log biner untuk tabel berorientasi kolom lebih tinggi daripada untuk tabel berorientasi baris. Jika tabel Anda sering diperbarui dan Anda ingin mengaktifkan pencatatan log biner untuk tabel Anda, kami sarankan Anda menggunakan mode penyimpanan berorientasi baris untuk tabel Anda.
Sintaks yang didukung di Hologres V2.1 dan lebih baru:
Di Hologres V2.1 dan lebih baru, properti
binlog.leveldanbinlog.ttldiubah menjadi propertibinlog_leveldanbinlog_ttlmasing-masing.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' -- Tentukan TTL log biner. Unit: detik. );Sintaks yang didukung di semua versi Hologres:
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'); -- Konfigurasikan kolom id sebagai kunci klaster. call set_table_property('test_message_src', 'binlog.level', 'replica'); -- Konfigurasikan properti binlog.level untuk mengaktifkan pencatatan log biner. call set_table_property('test_message_src', 'binlog.ttl', '86400'); -- Tentukan TTL log biner. Unit: detik. commit;
Tabel berikut menjelaskan properti tersebut.
Properti | Deskripsi |
| Menentukan apakah akan mengaktifkan pencatatan log biner. Nilai valid:
|
| TTL log biner. Unit: detik. Nilai default: 2592000, yang menunjukkan 30 hari. |
Konfigurasikan fitur pencatatan log biner untuk tabel yang sudah ada berdasarkan kebutuhan bisnis Anda
Di Hologres V1.1 dan versi lebih baru, Anda dapat mengaktifkan atau menonaktifkan pencatatan log biner untuk tabel yang sudah ada sesuai kebutuhan bisnis. Untuk mengaktifkan pencatatan log biner untuk tabel yang sudah ada, Anda tidak perlu membuat tabel lagi. Anda juga dapat menentukan TTL log biner untuk menyimpan log biner selama periode waktu tertentu. Ini memenuhi persyaratan untuk periode retensi terbatas dalam skenario bisnis tertentu.
Operasi yang dijelaskan dalam bagian ini hanya berlaku untuk Hologres V1.1 dan versi lebih baru. Jika versi instance Hologres Anda lebih lama dari V1.1, tingkatkan instance Hologres Anda secara manual di konsol Hologres atau bergabunglah dengan grup DingTalk Hologres untuk dukungan teknis. Untuk informasi lebih lanjut tentang cara meningkatkan instance Hologres Anda secara manual di konsol Hologres, lihat Peningkatan manual (beta). Untuk informasi lebih lanjut tentang cara mendapatkan dukungan teknis, lihat Dapatkan dukungan online untuk Hologres.
Aktifkan pencatatan log biner
Anda dapat mengeksekusi pernyataan berikut untuk mengaktifkan pencatatan log biner untuk tabel yang sudah ada dan menentukan TTL log biner:
-- Konfigurasikan properti binlog.level untuk mengaktifkan pencatatan log biner. begin; call set_table_property('<table_name>', 'binlog.level', 'replica'); commit; -- Konfigurasikan properti binlog.ttl untuk menentukan TTL log biner. Unit: detik. begin; call set_table_property('<table_name>', 'binlog.ttl', '2592000'); commit;Parameter table_name menentukan nama tabel tempat Anda ingin mengaktifkan pencatatan log biner.
Nonaktifkan pencatatan log biner
Anda dapat mengeksekusi pernyataan berikut untuk menonaktifkan pencatatan log biner untuk tabel:
-- Konfigurasikan properti binlog.level untuk menonaktifkan pencatatan log biner. begin; call set_table_property('<table_name>', 'binlog.level', 'none'); commit;Parameter table_name menentukan nama tabel tempat Anda ingin menonaktifkan pencatatan log biner.
Ubah TTL log biner
Anda dapat mengeksekusi pernyataan berikut untuk mengubah TTL log biner untuk tabel. Dengan cara ini, Anda dapat menentukan periode retensi log yang sesuai berdasarkan kebutuhan bisnis Anda.
CatatanDi Hologres V1.3.24 dan versi lebih baru, Anda dapat mengonfigurasi TTL log biner untuk tabel anak sesuai kebutuhan bisnis. Jika Anda tidak menentukan TTL untuk log biner tabel anak, TTL untuk log biner tabel induk digunakan sebagai TTL untuk log biner tabel anak secara default.
call set_table_property('<table_name>', 'binlog.ttl', '8640000'); -- Unit: detik.Parameter table_name menentukan nama tabel tempat Anda ingin mengubah TTL log biner.
Query log biner
Log biner Hologres menggunakan skema kuat. Untuk menanyakan log biner tabel, Anda dapat menggunakan kombinasi bidang tambahan dalam log biner dan bidang dalam tabel untuk melakukan query. Selain itu, Hologres menyediakan fungsi untuk Anda menanyakan log biner terbaru atau paling awal, atau menanyakan informasi tentang log biner berdasarkan nomor urut log (LSN) atau timestamp.
Query log biner berdasarkan bidang bawaan khusus
Anda dapat menggunakan kombinasi bidang tambahan dalam log biner dan bidang dalam tabel untuk melakukan query. Pernyataan sampel:
SELECT hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timestamp_us,* FROM test_message_src;Gambar berikut menunjukkan hasil query.

Query log biner paling awal atau terbaru dari shard dalam tabel
Anda dapat menggunakan fungsi hg_get_binlog_cursor untuk melakukan query. Sintaks:
-- Query log biner paling awal dari shard.
SELECT * FROM hg_get_binlog_cursor('<table_name>','OLDEST',<shard_id>);
-- Query log biner terbaru dari shard.
SELECT * FROM hg_get_binlog_cursor('<table_name>','LATEST',<shard_id>);Pernyataan berikut menunjukkan contoh.
SELECT * FROM hg_get_binlog_cursor('test_message_src','OLDEST',0);Gambar berikut menunjukkan hasil query.

Query timestamp log biner berdasarkan LSN log biner
Anda dapat menggunakan fungsi hg_get_binlog_cursor_by_lsn untuk menanyakan timestamp log biner. Fungsi ini mengembalikan timestamp log biner pertama yang LSN-nya lebih besar dari atau sama dengan nilai yang ditentukan dalam query. Jika LSN tidak valid, fungsi ini mengembalikan timestamp saat ini sebagai nilai bidang hg_binlog_timestamp_us. Sintaks:
SELECT * FROM hg_get_binlog_cursor_by_lsn('<table_name>',<lsn>,<shard_id>);-- Tentukan LSN tipe BIGINT.Pernyataan berikut menunjukkan contoh.
SELECT * FROM hg_get_binlog_cursor_by_lsn('test_message_src',152,0);Gambar berikut menunjukkan hasil query.

Query LSN log biner berdasarkan timestamp log biner
Anda dapat menggunakan fungsi hg_get_binlog_cursor_by_timestamp untuk menanyakan LSN log biner. Fungsi ini mengembalikan LSN log biner pertama yang nilainya timestamp lebih besar dari atau sama dengan nilai yang ditentukan dalam query. Jika timestamp adalah yang terbaru, fungsi ini mengembalikan timestamp saat ini sebagai nilai bidang hg_binlog_timestamp_us dan LSN yang akan ditetapkan ke rekaman data berikutnya sebagai nilai bidang hg_binlog_lsn. Sintaks:
Jika timestamp yang ditentukan dalam query lebih baru daripada waktu saat ini, pesan kesalahan "get binlog cursor in future time" akan dikembalikan. Anda dapat menggunakan fungsi now() untuk menanyakan waktu saat ini.
SELECT * FROM hg_get_binlog_cursor_by_timestamp('<table_name>',<timestamp>,<shard_id>);Pernyataan sampel:
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);Gambar berikut menunjukkan hasil query.

Konsumsi log biner Hologres secara real-time
Anda dapat menggunakan Flink, Blink, JDBC, atau Holo Client untuk mengonsumsi log biner Hologres. Untuk informasi lebih lanjut, lihat topik-topik berikut:
Periksa tabel tempat pencatatan log biner diaktifkan
Anda dapat mengeksekusi pernyataan SQL berikut untuk memeriksa tabel tempat pencatatan log biner diaktifkan:
SELECT
*
FROM
hologres.hg_table_properties
WHERE
property_key = 'binlog.level'
AND property_value = 'replica';Gambar berikut menunjukkan hasil yang dikembalikan.
Query ruang penyimpanan log biner
Hologres menyediakan fungsi
pg_relation_sizeuntuk menanyakan ukuran penyimpanan tabel tempat pencatatan log biner diaktifkan. Ukuran tersebut mencakup ukuran penyimpanan log biner. Untuk informasi lebih lanjut, lihat Query ukuran penyimpanan tabel dalam topik "Query ukuran penyimpanan tabel dan database".Hologres V2.1 dan versi lebih baru menyediakan fungsi
hologres.hg_relation_sizeuntuk menanyakan detail penyimpanan tabel, termasuk ukuran penyimpanan data dan ukuran penyimpanan log biner. Untuk informasi lebih lanjut, lihat Query detail penyimpanan tabel dalam topik "Query ukuran penyimpanan tabel dan database".
Nonaktifkan pencatatan log biner untuk pernyataan DML tabel
Anda dapat menonaktifkan pencatatan log biner untuk pernyataan bahasa manipulasi data (DML) tabel dengan menggunakan parameter Grand Unified Configuration (GUC). Anda harus menambahkan perintah SET berikut sebelum pernyataan DML dan melakukan commit pada tingkat sesi.
-- Jalankan perintah SET berikut pada tingkat sesi:
SET hg_experimental_generate_binlog=off;