All Products
Search
Document Center

PolarDB:Sinkronisasi data dari PolarDB MySQL ke PolarSearch

Last Updated:Mar 26, 2026

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.

Catatan

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 BIT dan tipe data spasial seperti GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, dan GEOMETRYCOLLECTION tidak 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

view_name

Ya

Nama search view. Ini juga merupakan nama indeks target pada node PolarSearch.

column_list

Tidak

Menentukan secara manual kolom-kolom search view. Gunakan koma (,) untuk memisahkan beberapa kolom.

Catatan

Untuk sinkronisasi tabel tunggal, Anda tidak perlu menentukan column_list. Secara default, sistem menggunakan nama kolom asli dari tabel sumber.

pk_column_list

Tidak

Menentukan kolom kunci primer untuk search view. Struktur search view dipetakan ke indeks pada node PolarSearch. pk_column_list menentukan ID dokumen indeks pada node PolarSearch.

Jika tidak ditentukan, sistem menggunakan kolom pertama dalam column_list sebagai ID dokumen secara default. Untuk sinkronisasi tabel tunggal, kunci primer tabel sumber digunakan sebagai ID dokumen secara default.

select_statement

Ya

Pernyataan SELECT yang menentukan sumber data dan logika sinkronisasi. Pernyataan ini mengambil data dari tabel sumber dan menyimpan hasilnya di PolarSearch. Pernyataan ini mendukung kueri tabel tunggal serta operasi seperti JOIN, UNION ALL, dan GROUP BY.

Batasan dan catatan

  • Tabel sumber harus memiliki kunci primer atau kunci unik.

  • Anda harus memiliki izin ALTER pada semua tabel sumber yang digunakan dalam search view dan izin SELECT pada 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.t1 ke PolarSearch. Nama view view_test juga merupakan nama indeks target di PolarSearch.

    CREATE SEARCH VIEW view_test AS SELECT * FROM db1.t1;
  • Sinkronisasi kolom tertentu: Hanya menyinkronkan kolom c1 dan c2, 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.t1 dan db2.t2 berdasarkan bidang id dan 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 SELECT harus 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 active menunjukkan 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 CREATE untuk 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

Penting

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 active pertama-tama berubah menjadi dropping. Setelah sistem membersihkan sumber daya dan menghapus data indeks target, statusnya berubah menjadi dropped.

  • 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.

  1. Buat search view baru yang menyinkronkan data ke indeks PolarSearch baru.

  2. Jalankan SHOW SEARCH VIEW STATUS untuk 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.

  3. 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

Penting

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

Catatan
  • 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-id unik dalam klausul WITH semua 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>')\G

    Deskripsi 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.

Penting

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 active pertama-tama berubah menjadi dropping. Statusnya berubah menjadi dropped hanya 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.

  1. Buat tautan sinkronisasi data baru untuk menyinkronkan data ke indeks PolarSearch baru.

  2. 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.

  3. Hapus tautan sinkronisasi data lama.

FAQ

Apa perbedaan antara search view dan prosedur tersimpan ETL (sync_by_sql)?

Perbedaan utamanya terletak pada kasus penggunaan dan kompleksitasnya:

  • Search view: Menggunakan sintaksis SQL standar (CREATE SEARCH VIEW). Sistem secara otomatis menangani detail koneksi dan sinkronisasi yang mendasarinya, sehingga Anda tidak perlu menulis Flink SQL. Metode ini cocok untuk sebagian besar skenario sinkronisasi tabel tunggal dan agregasi multi-tabel.

  • Prosedur tersimpan ETL: Menggunakan sintaksis yang kompatibel dengan Flink SQL (CALL dbms_etl.sync_by_sql). Anda harus menentukan secara manual konfigurasi koneksi untuk tabel sumber dan target. Metode ini cocok untuk skenario pembersihan data, transformasi, dan agregasi kompleks, memberikan kontrol penuh melalui Flink SQL.