Saat melakukan operasi DDL pada tabel sumber yang memiliki tampilan pencarian atau prosedur tersimpan ETL (sync_by_sql), berbagai jenis perubahan memengaruhi tautan sinkronisasi secara berbeda. Topik ini menjelaskan dampak setiap operasi DDL dan menyediakan praktik terbaik untuk membangun ulang saat diperlukan.
Dampak DDL pada tabel sumber
Untuk informasi mengenai operasi DDL, lihat Panduan Operasi DDL untuk PolarDB for MySQL. Tabel berikut menjelaskan bagaimana operasi DDL umum pada tabel sumber memengaruhi tautan sinkronisasi.
|
Jenis perubahan |
Operasi |
Status sinkronisasi |
Deskripsi |
|
Perubahan kolom |
Drop a column |
Normal |
Data yang sudah ada tetap menyimpan nilai kolom yang di-drop. Pada data inkremental, nilai bidang tersebut adalah |
|
Add a column |
Normal |
Kolom baru tidak ditambahkan secara otomatis ke tautan sinkronisasi. Untuk menambahkan kolom ke tautan, lihat Praktik perubahan AutoETL. |
|
|
Modify a column type |
Depends on the type |
Tipe yang kompatibel (misalnya, Tipe yang tidak kompatibel: tautan menjadi tidak tersedia. Anda harus membangun ulang tautan tersebut. |
|
|
Rename a column |
Disrupted |
Tautan menggunakan nama kolom sejak waktu pembuatan. Setelah penggantian nama, tautan tidak dapat mengenali kolom tabel sumber yang telah diganti namanya. Anda harus membangun ulang tautan tersebut. |
|
|
Other (reorder columns, modify default values, modify comments, extend VARCHAR length, modify character sets, modify auto-increment properties, modify NULL constraints, etc.) |
Normal |
Operasi-operasi ini tidak memengaruhi sinkronisasi. |
|
|
Perubahan indeks |
Add, drop, or modify a secondary index |
Normal |
Perubahan indeks secondary tidak memengaruhi sinkronisasi. |
|
Drop or modify the primary key index |
Disrupted |
Tautan bergantung pada kunci primer tabel sumber untuk sinkronisasi data. Setelah Anda mengubah kunci primer, Anda harus membangun ulang tautan tersebut. |
|
|
Perubahan tabel |
|
Disrupted |
Tautan tidak dapat mendeteksi operasi |
|
|
Disrupted |
Tautan tidak mengenali nama tabel baru. Sinkronisasi data inkremental berhenti. |
|
|
Other ( |
Normal |
Operasi-operasi ini tidak memengaruhi sinkronisasi. |
|
|
Perubahan tabel partisi |
Convert to a partitioned table, add a partition, merge partitions, repartition, analyze a partition, check a partition, optimize a partition, rebuild a partition, convert to a non-partitioned table, use local indexes, etc. |
Normal |
Operasi-operasi ini tidak memengaruhi sinkronisasi. |
|
|
Disrupted |
Tautan tidak dapat mendeteksi operasi-operasi ini. Untuk menghapus data dan menyinkronkan perubahan ke PolarSearch, gunakan |
|
|
|
Disrupted |
Tautan tidak dapat mendeteksi penggantian atau perbaikan data langsung pada partisi tertentu. Partisi lain tidak terpengaruh. Kami menyarankan Anda membangun ulang tautan setelah operasi ini. |
Praktik perubahan AutoETL
Jika Anda perlu mengubah struktur sinkronisasi tampilan pencarian atau prosedur tersimpan ETL (misalnya, menambahkan bidang sinkronisasi), pertama-tama tentukan apakah perubahan tersebut dapat dilakukan secara langsung:
-
Jika perubahan in-place didukung, perbarui langsung definisi SQL tampilan pencarian atau prosedur tersimpan ETL tersebut. Sinkronisasi dilanjutkan dari offset asli tanpa memerlukan resinkronisasi penuh.
-
Jika perubahan in-place tidak didukung, bangun ulang dengan pendekatan "indeks baru + tautan baru". Setelah tampilan pencarian atau prosedur tersimpan ETL baru menyelesaikan sinkronisasi dan verifikasi data, alihkan traffic kueri aplikasi Anda ke indeks baru tersebut.
Apakah perubahan in-place didukung
Tabel berikut mencantumkan perubahan umum pada tampilan pencarian atau prosedur tersimpan ETL dan apakah perubahan tersebut mendukung perubahan in-place.
|
Jenis perubahan |
Skenario yang berlaku |
Perubahan in-place didukung |
Deskripsi |
|
Modify runtime parameters |
Single-table synchronization / Multi-table aggregation |
Yes |
Menyesuaikan parameter untuk sumber daya sinkronisasi dan konkurensi tidak mengubah semantik komputasi. Perubahan in-place didukung. |
|
Modify |
Single-table synchronization / Multi-table aggregation |
Yes |
Memodifikasi kondisi filter tidak memperbarui data yang sudah disinkronkan ke node PolarSearch. Untuk membersihkan data yang sudah ada, bangun ulang tautan tersebut. |
|
Add synchronization columns |
Single-table synchronization |
Yes |
Kolom baru hanya berlaku untuk data inkremental. Data historis tidak diisi ulang. Untuk mengisi ulang semua data, bangun ulang tautan tersebut. |
|
Remove synchronization columns |
Single-table synchronization |
Yes |
Kolom yang dihapus pada node PolarSearch berhenti diperbarui. |
|
Modify the primary key of PolarSearch node indexes |
Single-table synchronization / Multi-table aggregation |
No. Rebuild required. |
Kunci primer juga merupakan ID dokumen di PolarSearch. Perubahan ini tidak kompatibel. |
|
Add or remove |
Multi-table aggregation |
No. Rebuild required. |
Struktur sinkronisasi berubah. Diperlukan perhitungan ulang penuh. |
|
Add or remove |
Multi-table aggregation |
No. Rebuild required. |
Struktur agregasi berubah. Hasil agregasi historis tidak dapat digunakan kembali. |
|
Add or remove |
Multi-table aggregation |
No. Rebuild required. |
Struktur sinkronisasi berubah. Diperlukan perhitungan ulang penuh. |
|
Convert between single-table synchronization and multi-table aggregation |
Single-table synchronization / Multi-table aggregation |
No. Rebuild required. |
Logika sinkronisasi berubah sepenuhnya. |
|
Change the data type of primary key / |
Single-table synchronization / Multi-table aggregation |
No. Rebuild required. |
Setelah perubahan tipe kolom kunci, status sinkronisasi asli tidak dapat digunakan kembali. |
Perubahan in-place
Modifikasi logika SQL pada tautan yang ada dan mulai ulang tautan tersebut menggunakan status tautan yang sudah ada. Untuk informasi selengkapnya, lihat Tampilan Pencarian – Memodifikasi Tampilan Pencarian dan Prosedur Tersimpan ETL (sync_by_sql) – Memodifikasi Tautan Sinkronisasi.
-
Sintaks tampilan pencarian:
ALTER SEARCH VIEW view_name UPDATE [WITH (option_list)] [TO (column_list, PRIMARY KEY (pk_column_list))] AS new_select_statement; -
Sintaks prosedur tersimpan ETL:
SET esl_link_options = "<new_option_list>"; -- Jika new_sync_sql kosong, SQL sinkronisasi yang ada dipertahankan CALL dbms_etl.update_sync_link('<sync_id>', '<new_sync_sql>');
Perubahan dengan pendekatan "indeks baru + tautan baru"
Pendekatan "indeks baru + tautan baru" merupakan metode perubahan paling serbaguna. Tautan tersebut memindai ulang data dan menuliskannya ke node PolarSearch. Setelah tampilan pencarian atau prosedur tersimpan ETL baru menyelesaikan sinkronisasi dan verifikasi data, alihkan traffic kueri aplikasi Anda ke indeks baru tersebut.
Contoh:
Tambahkan bidang ke tabel shop.user dan bangun ulang tampilan pencarian. Asumsikan tampilan pencarian asli menyinkronkan tabel shop.user (dengan kolom id, name, phone, gmt_create) ke indeks user_v1. Anda perlu menambahkan kolom membership_level tanpa mengganggu kueri online.
-
Buat indeks baru: Buat indeks baru bernama
user_v2pada node PolarSearch, dan sertakan bidang barumembership_leveldalam pemetaannya.PUT user_v2 { "mappings": { "properties": { "id": { "type": "keyword" }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }, "phone": { "type": "keyword" }, "gmt_create": { "type": "date" }, "membership_level": { "type": "integer" } } } } -
Modifikasi tabel sumber: Tambahkan kolom baru ke tabel
userpada PolarDB for MySQL sumber.ALTER TABLE shop.user ADD COLUMN membership_level TINYINT NOT NULL DEFAULT 0 COMMENT 'Membership level'; -
Buat tampilan pencarian baru: Buat tampilan pencarian baru untuk menyinkronkan data dari tabel
shop.userke indeksuser_v2.CREATE SEARCH VIEW user_v2 AS SELECT id, name, phone, gmt_create, membership_level FROM shop.user; -
Verifikasi dan alihkan: Jalankan
SHOW SEARCH VIEW STATUSuntuk memeriksa status tampilan pencarian baru. Setelah latensi sinkronisasi turun menjadi sekitar 0 hingga 1 detik, verifikasi data pada indeks baru tersebut. Setelah verifikasi, alihkan traffic kueri aplikasi Anda ke indeksuser_v2yang baru. -
Bersihkan sumber daya lama:: Setelah tampilan pencarian baru berjalan stabil, hapus tampilan pencarian lama dan indeks
user_v1.DROP SEARCH VIEW user_v1;