Menjalankan pencarian teks lengkap atau analisis kompleks pada data bisnis di PolarDB for MySQL dapat memengaruhi stabilitas layanan inti. Fitur AutoETL PolarDB secara otomatis dan terus-menerus menyinkronkan data dari node baca-tulis ke node PolarSearch dalam kluster yang sama, sehingga menyediakan layanan data terpadu. Anda dapat dengan cepat membuat tautan sinkronisasi data menggunakan search view atau prosedur tersimpan ETL, memungkinkan sinkronisasi data sekaligus mengisolasi beban kerja pencarian dan analisis dari beban kerja pemrosesan transaksi online (OLTP) tanpa perlu men-deploy atau memelihara alat ETL eksternal.
Fitur ini saat ini sedang dalam rilis bertahap. Untuk menggunakan fitur ini, harap ajukan tiket untuk meminta akses.
Ikhtisar
AutoETL adalah kemampuan sinkronisasi data bawaan PolarDB for MySQL yang memungkinkan data mengalir secara otomatis antara berbagai jenis node dalam satu kluster. Versi saat ini hanya mendukung penyinkronan data dari PolarDB for MySQL ke node PolarSearch dalam kluster yang sama untuk pencarian dan analisis berkinerja tinggi.
AutoETL menyediakan dua metode untuk membuat tautan sinkronisasi data:
Search view: Menentukan logika sinkronisasi data dalam SQL standar menggunakan sintaksis
CREATE SEARCH VIEW. Metode ini ideal untuk sebagian besar skenario sinkronisasi tabel tunggal dan agregasi multi-tabel karena sistem secara otomatis menangani detail koneksi yang mendasarinya.Prosedur tersimpan ETL (
dbms_etl.sync_by_sql): Menentukan logika pembersihan data, transformasi, dan agregasi yang kompleks menggunakan prosedur tersimpan dengan sintaksis yang kompatibel dengan Flink SQL.
Penerapan
Sebelum menggunakan fitur AutoETL, pastikan lingkungan Anda memenuhi kondisi berikut:
Versi kluster:
Search view:
MySQL 8.0.1 dengan revisi 8.0.1.1.54 atau lebih baru.
MySQL 8.0.2 dengan revisi 8.0.2.2.34 atau lebih baru.
Prosedur tersimpan ETL (sync_by_sql):
MySQL 8.0.1 dengan revisi 8.0.1.1.52 atau lebih baru.
MySQL 8.0.2 dengan revisi 8.0.2.2.33 atau lebih baru.
Binlog: Kluster harus memiliki Binlog diaktifkan.
Arah sinkronisasi: Hanya didukung sinkronisasi data dari PolarDB for MySQL ke node PolarSearch dalam kluster yang sama.
Batasan DDL: Untuk menghindari gangguan pada sinkronisasi data, Anda harus mengikuti aturan tertentu saat melakukan operasi DDL pada tabel sumber yang memiliki search view atau prosedur tersimpan ETL aktif. Beberapa perubahan yang tidak kompatibel mengharuskan Anda membuat ulang search view tersebut. Untuk informasi lebih lanjut, lihat Aturan dan Praktik Perubahan DDL.
Tipe data: Sinkronisasi tipe data
BITdan tipe data spasial sepertiGEOMETRY,POINT,LINESTRING,POLYGON,MULTIPOINT,MULTILINESTRING,MULTIPOLYGON, danGEOMETRYCOLLECTIONtidak didukung.Batasan kueri search view: Search view hanya menentukan semantik sinkronisasi dan tidak dapat digunakan untuk kueri data langsung. Untuk mengkueri data, hubungkan langsung ke node PolarSearch dan jalankan kueri Anda.
Tampilan pencarian
Search view adalah mekanisme sinkronisasi data deklaratif yang disediakan oleh AutoETL. Anda dapat menggunakan sintaksis SQL standar untuk membuat search view, dan sistem secara otomatis membuat tautan sinkronisasi data berkelanjutan dari tabel sumber ke node PolarSearch.
Buat search view
Sintaksis
CREATE SEARCH VIEW view_name [(column_list, PRIMARY KEY (pk_column_list))] AS select_statement;Parameter
Parameter | Wajib | Deskripsi |
| Ya | Nama search view. Ini juga merupakan nama indeks target pada node PolarSearch. |
| Tidak | Menentukan secara manual kolom-kolom search view. Gunakan koma ( Catatan Untuk sinkronisasi tabel tunggal, Anda tidak perlu menentukan |
| Tidak | Menentukan kolom kunci primer untuk search view. Struktur search view dipetakan ke indeks pada node PolarSearch. Jika tidak ditentukan, sistem menggunakan kolom pertama dalam |
| Ya | Pernyataan |
Batasan dan catatan
Tabel sumber harus memiliki kunci primer atau kunci unik.
Anda harus memiliki izin
ALTERpada semua tabel sumber yang digunakan dalam search view dan izinSELECTpada kolom terkait atau seluruh tabel.Setelah search view dibuat, kolom baru yang ditambahkan ke tabel sumber tidak akan disinkronkan secara otomatis secara default. Untuk menyinkronkan kolom baru, lihat Ubah search view.
Untuk menggunakan indeks target kustom, pertama buat dan konfigurasikan indeks tersebut pada node PolarSearch, lalu buat search view. Jika indeks target belum ada saat Anda membuat view, sistem akan membuatnya secara otomatis.
Untuk mengonfigurasi parameter sinkronisasi lanjutan, seperti konversi bidang JSON atau bidang routing, untuk agregasi multi-tabel atau kueri kompleks, lihat Konfigurasi Parameter AutoETL dan Studi Kasus.
Persiapan data
Contoh berikut menggunakan data uji. Anda dapat menjalankan pernyataan SQL berikut di PolarDB for MySQL untuk membuat data tersebut.
CREATE DATABASE IF NOT EXISTS db1;
CREATE DATABASE IF NOT EXISTS db2;
USE db1;
CREATE TABLE IF NOT EXISTS t1 (
id INT PRIMARY KEY,
c1 VARCHAR(100),
c2 VARCHAR(100)
);
INSERT INTO t1(id, c1, c2) VALUES
(1, 'apple', 'red'),
(2, 'banana', 'yellow'),
(3, 'grape', 'purple');
USE db2;
CREATE TABLE IF NOT EXISTS t2 (id INT PRIMARY KEY, c2 INT);
INSERT INTO t2(id, c2) VALUES (1, 111), (2, 222), (4, 444);Contoh
Sinkronisasi tabel penuh: Menyinkronkan semua data dari
db1.t1ke PolarSearch. Nama viewview_testjuga merupakan nama indeks target di PolarSearch.CREATE SEARCH VIEW view_test AS SELECT * FROM db1.t1;Sinkronisasi kolom tertentu: Hanya menyinkronkan kolom
c1danc2, dengan definisi manual tipe kolom dan kunci primer.CREATE SEARCH VIEW view_test1 AS SELECT c1, c2 FROM db1.t1;Filter bersyarat: Hanya menyinkronkan data yang memenuhi kondisi
WHERE.CREATE SEARCH VIEW view_test2 AS SELECT id, c1, c2 FROM db1.t1 WHERE c1 > 10;JOIN multi-tabel: Menggabungkan
db1.t1dandb2.t2berdasarkan bidangiddan menyinkronkan hasilnya ke PolarSearch.CREATE SEARCH VIEW view_test3(id, c1, c2) AS SELECT t1.id, t1.c1, t2.c2 FROM db1.t1 AS t1 LEFT JOIN db2.t2 AS t2 ON t1.id = t2.id;UNION multi-tabel: Menggabungkan dan menyinkronkan beberapa tabel dengan struktur identik. Pernyataan
SELECTharus memiliki jumlah dan tipe kolom yang sama.CREATE SEARCH VIEW view_test4(id, c2) AS SELECT id, c2 FROM db1.t1 UNION ALL SELECT id, c2 FROM db2.t2;Agregasi berkelompok: Mengelompokkan dan mengagregasi data sebelum disinkronkan. Saat menggunakan
GROUP BY, Anda harus menentukan secara manual kolom dan kunci primernya.CREATE SEARCH VIEW view_test5 (id, max_c) AS SELECT t1.id, MAX(t1.c1) AS max_c FROM db1.t1 GROUP BY t1.id;
Verifikasi data
Periksa status sinkronisasi search view:
SHOW SEARCH VIEW STATUS;Status active menunjukkan bahwa search view sedang menyinkronkan data secara normal. Hubungkan ke node PolarSearch dan gunakan REST API yang kompatibel dengan Elasticsearch untuk memverifikasi data:
# Ganti <user>:<password> dengan kredensial untuk node PolarSearch dan <polarsearch_endpoint> dengan titik akhir dan port node PolarSearch.
curl -u <user>:<password> -X GET "http://<polarsearch_endpoint>/view_test/_search"Mengelola tampilan pencarian
Anda dapat menggunakan perintah berikut untuk melihat search view yang telah Anda buat.
Lihat status semua tampilan pencarian:
SHOW SEARCH VIEW STATUS;Perintah ini mengembalikan output berikut. Status
activemenunjukkan bahwa search view sedang menyinkronkan data secara normal.+------------+--------+----------+---------+---------------------+---------------------+ | View Name | Type | Status | Message | Created_at | Updated_at | +------------+--------+----------+---------+---------------------+---------------------+ | view_test | search | active | | 2026-03-18 18:44:12 | 2026-03-18 18:51:37 | +------------+--------+----------+---------+---------------------+---------------------+Lihat pernyataan
CREATEuntuk search view tertentu:SHOW CREATE SEARCH VIEW view_test;Hasil berikut dikembalikan:
+-----------+------------------------------------------------------+ | View Name | Create Search View | +-----------+------------------------------------------------------+ | view_test | CREATE SEARCH VIEW view_test AS SELECT * FROM db1.t1 | +-----------+------------------------------------------------------+
Hapus search view
Menghapus search view adalah operasi berisiko tinggi. Pastikan Anda memahami konsekuensinya sebelum melanjutkan. Operasi ini menghentikan sinkronisasi data untuk search view dan membersihkan sumber daya terkait, tetapi tidak menghapus data indeks di PolarSearch.
DROP SEARCH VIEW view_name;Perilaku sistem saat Anda menghapus search view bervariasi berdasarkan statusnya:
Search view dalam status
activepertama-tama berubah menjadidropping. Setelah sistem membersihkan sumber daya dan menghapus data indeks target, statusnya berubah menjadidropped.Search view dalam status
dropped: Sistem menghapus permanen semua informasinya.Status lainnya: Menghapus search view dalam status apa pun selain yang disebutkan tidak didukung.
Ubah search view
Saat Anda perlu mengubah logika sinkronisasi search view, seperti menambahkan bidang baru untuk disinkronkan atau mengubah kondisi kueri, kami menyarankan menggunakan pendekatan "indeks baru + search view baru" untuk menerapkan perubahan tersebut. Praktik ini memastikan kueri bisnis tidak terganggu.
Buat search view baru yang menyinkronkan data ke indeks PolarSearch baru.
Jalankan
SHOW SEARCH VIEW STATUSuntuk memeriksa status search view baru. Saat latensi sinkronisasi untuk view baru turun menjadi 0–1 detik, alihkan kueri bisnis Anda dari indeks lama ke yang baru.Hapus search view lama.
Untuk informasi lebih lanjut tentang bagaimana perubahan DDL pada tabel sumber memengaruhi search view dan praktik modifikasi terperinci, lihat Aturan dan Praktik Perubahan DDL.
Prosedur tersimpan ETL (sync_by_sql)
Untuk transformasi, agregasi, atau komputasi kompleks, gunakan prosedur tersimpan dbms_etl.sync_by_sql untuk menentukan logika sinkronisasi data dengan sintaksis yang kompatibel dengan Flink SQL.
Buat tautan sinkronisasi
Peringatan keamanan: Jangan menyematkan password secara langsung dalam pernyataan SQL. Contoh berikut hanya menunjukkan struktur sintaksis. Klausul WITH dalam contoh ini berisi password dalam teks biasa, yang merupakan risiko keamanan signifikan. Di lingkungan produksi, Anda harus menggunakan metode yang lebih aman untuk mengelola kredensial.
Sintaksis
CALL dbms_etl.sync_by_sql("search", "<sync_sql>");Contoh
Sistem secara otomatis mengganti placeholder
{mysql_host},{mysql_port},{mysql_user},{mysql_password},{search_host},{search_port},{search_user}, dan{search_password}dalam pernyataan SQL. Anda hanya perlu menulis pernyataan SQL menggunakan placeholder tetap ini.Jika Anda memiliki beberapa tautan sinkronisasi Flink SQL, Anda harus menentukan
server-idunik dalam klausulWITHsemua tabel temporary untuk membedakan tautan dan menghindari konflik.
CALL dbms_etl.sync_by_sql("search", "
-- Langkah 1: Definisikan tabel sumber PolarDB
CREATE TEMPORARY TABLE `db1`.`sbtest1` (
`id` BIGINT,
`c1` STRING,
`c2` STRING,
PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
'connector' = 'mysql',
'hostname' = '{mysql_host}',
'port' = '{mysql_port}',
'username' = '{mysql_user}', -- Jangan gunakan password teks biasa di lingkungan produksi.
'password' = '{mysql_password}', -- Jangan gunakan password teks biasa di lingkungan produksi.
'database-name' = 'db1',
'table-name' = 't1',
'server-id' = '10000-11000' -- Pengenal tautan
);
-- Langkah 2: Definisikan tabel target PolarSearch
CREATE TEMPORARY TABLE `dest` (
`id` BIGINT,
`max_c` STRING,
PRIMARY KEY (`k`) NOT ENFORCED
) WITH (
'connector' = 'opensearch',
'hosts' = '{search_host}:{search_port}',
'index' = 'dest',
'username' = '{search_user}', -- Jangan gunakan password teks biasa di lingkungan produksi.
'password' = '{search_password}' -- Jangan gunakan password teks biasa di lingkungan produksi.
);
-- Langkah 3: Definisikan logika komputasi dan penyisipan
INSERT INTO `dest`
SELECT
`t1`.`id`,
MAX(`t1`.`c1`)
FROM `db1`.`t1` AS `t1`
GROUP BY `t1`.`id`;
");Verifikasi data
Hubungkan ke node PolarSearch dan gunakan REST API yang kompatibel dengan Elasticsearch untuk mengkueri data dan memastikan data telah disinkronkan.
# Ganti <polarsearch_endpoint> dengan titik akhir node PolarSearch.
curl -u <user>:<password> -X GET "http://<polarsearch_endpoint>/dest/_search"Kelola tautan sinkronisasi
Gunakan perintah berikut untuk melihat tautan sinkronisasi data yang telah Anda buat.
Lihat semua tautan:
CALL dbms_etl.show_sync_link();Lihat tautan tertentu berdasarkan ID. Ganti
<sync_id>dengan ID yang dikembalikan saat Anda membuat tautan tersebut.CALL dbms_etl.show_sync_link_by_id('<sync_id>')\GDeskripsi bidang:
*************************** 1. row *************************** SYNC_ID: crb5rmv8rttsg NAME: crb5rmv8rttsg SYSTEM: search SYNC_DEFINITION: db1.t1 -> dest SOURCE_TABLES: db1.t1 SINK_TABLES: dest STATUS: active -- Status tautan; `active` menunjukkan operasi normal. MESSAGE: -- Menampilkan pesan error jika terjadi kesalahan. CREATED_AT: 2024-05-20 11:55:06 UPDATED_AT: 2024-05-20 17:28:04 OPTIONS: ...
Hapus tautan sinkronisasi
Operasi ini menghentikan sinkronisasi data dan membersihkan sumber daya terkait.
Menghapus tautan sinkronisasi data adalah operasi berisiko tinggi. Pastikan Anda memahami konsekuensinya sebelum melanjutkan. Operasi ini menghentikan sinkronisasi data untuk tautan tersebut dan membersihkan sumber daya terkait, tetapi tidak menghapus data indeks di PolarSearch.
CALL dbms_etl.drop_sync_link('<sync_id>');Saat Anda menggunakan drop_sync_link untuk menghapus tautan dalam status berbeda, logika pemrosesan sistem berbeda:
Tautan dalam status
activepertama-tama berubah menjadidropping. Statusnya berubah menjadidroppedhanya setelah sistem selesai membersihkan sumber daya tautan dan data indeks target.Tautan dalam status
dropped: Sistem sepenuhnya menghapus informasinya.Status lainnya: Menghapus tautan dalam status apa pun selain yang disebutkan tidak didukung.
Ubah tautan sinkronisasi
Saat Anda perlu mengubah tautan sinkronisasi data, gunakan pendekatan "indeks baru + tautan baru" yang sama seperti pada search view.
Buat tautan sinkronisasi data baru untuk menyinkronkan data ke indeks PolarSearch baru.
Jalankan
CALL dbms_etl.show_sync_link_by_id('<sync_id>')untuk memeriksa status tautan baru. Saat latensi sinkronisasi untuk tautan baru turun menjadi 0–1 detik, alihkan kueri bisnis Anda dari indeks lama ke yang baru.Hapus tautan sinkronisasi data lama.