All Products
Search
Document Center

PolarDB:Aturan dan praktik terbaik perubahan DDL

Last Updated:Mar 26, 2026

Operasi Data Definition Language (DDL) pada tabel sumber yang memiliki Search View dapat memengaruhi tautan sinkronisasi. Topik ini menjelaskan dampak berbagai operasi DDL dan menyediakan praktik terbaik untuk membangun ulang tampilan tersebut bila diperlukan.

Dampak perubahan DDL pada tabel sumber

Tabel berikut menjelaskan dampak berbagai operasi DDL terhadap tautan sinkronisasi Search View.

Jenis perubahan

Operasi spesifik

Status sinkronisasi

Deskripsi

Perubahan kolom

Drop a column

Normal

Nilai kolom yang di-drop tetap dipertahankan dalam dokumen yang sudah ada. Untuk data inkremental, nilai field yang bersangkutan adalah null.

Add a column

Normal

Kolom baru tidak disinkronkan secara otomatis. Untuk menambahkannya ke Search View, lihat Praktik terbaik untuk mengubah Search View.

Modify a column type

Depends on the type

Untuk perubahan yang kompatibel tipe, seperti mengubah INT menjadi TINYINT, sinkronisasi data inkremental berjalan normal.

Untuk perubahan yang tidak kompatibel tipe, Search View menjadi tidak tersedia dan Anda harus membangun ulang tampilan tersebut.

Rename a column

Disrupted

Search View menggunakan nama kolom pada saat tampilan tersebut dibuat. Setelah Anda mengganti nama kolom, Search View tidak dapat menemukan kolom tabel sumber yang telah diganti namanya. Anda harus membangun ulang Search View.

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 Search View.

Perubahan indeks

Add, drop, or modify a secondary index

Normal

Perubahan pada secondary index tidak memengaruhi sinkronisasi.

Drop or modify the primary key index

Disrupted

Search View bergantung pada primary key tabel sumber untuk sinkronisasi data. Jika Anda mengubah primary key, Anda harus membangun ulang Search View.

Perubahan tabel

TRUNCATE TABLE

Disrupted

Search View tidak dapat mendeteksi operasi TRUNCATE. Untuk menghapus data tabel dan menyinkronkan perubahan tersebut, gunakan DELETE FROM sebagai gantinya.

Other (OPTIMIZE TABLE, modify ROW_FORMAT, modify KEY_BLOCK_SIZE, update statistics, modify table character set, modify table comments, etc.)

Normal

Operasi-operasi ini tidak memengaruhi sinkronisasi Search View.

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 a local index, etc.

Normal

Operasi-operasi ini tidak memengaruhi sinkronisasi Search View.

DROP PARTITION, DROP TABLESPACE, TRUNCATE PARTITION

Disrupted

Search View tidak dapat mendeteksi operasi-operasi ini. Untuk menghapus data dan menyinkronkan perubahan tersebut, gunakan DELETE FROM sebagai gantinya.

EXCHANGE PARTITION, REPAIR PARTITION, IMPORT TABLESPACE

Disrupted

Search View tidak dapat mendeteksi penggantian atau perbaikan data langsung dalam suatu partisi. Data di partisi lain tidak terpengaruh. Bangun ulang Search View setelah melakukan operasi-operasi ini.

Praktik terbaik untuk mengubah Search View

Untuk memodifikasi struktur sinkronisasi Search View, misalnya dengan menambahkan field baru, bangun ulang tampilan tersebut dengan membuat indeks dan Search View baru. Setelah Search View baru sepenuhnya tersinkronisasi dan diverifikasi, alihkan traffic kueri aplikasi Anda ke indeks baru tersebut.

Catatan

Saat ini, perubahan online pada Search View yang sudah ada tanpa membangun ulang tidak didukung.

Contoh: Tambahkan kolom baru ke tabel shop.user dan bangun ulang Search View-nya. Misalkan Search View yang sudah ada menyinkronkan tabel shop.user (termasuk kolom id, name, phone, gmt_create) ke indeks bernama user_v1. Untuk menambahkan kolom membership_level tanpa mengganggu kueri online:

  1. Create a new index: Di node PolarSearch, buat indeks baru bernama user_v2 yang mencakup field membership_level baru dalam 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" }
        }
      }
    }
  2. Modify the source table: Di instans PolarDB for MySQL sumber, tambahkan kolom baru ke tabel user.

    ALTER TABLE shop.user ADD COLUMN membership_level TINYINT NOT NULL DEFAULT 0 COMMENT 'Membership level';
  3. Create a new Search View: Buat Search View baru untuk menyinkronkan data dari tabel shop.user ke indeks user_v2.

    CREATE SEARCH VIEW user_v2 AS SELECT id, name, phone, gmt_create, membership_level FROM shop.user;
  4. Verify and switch over: Gunakan SHOW SEARCH VIEW STATUS untuk memeriksa status Search View baru. Saat latensi sinkronisasi turun menjadi 0–1 detik, verifikasi data dalam indeks baru. Setelah dikonfirmasi, alihkan traffic kueri aplikasi Anda ke indeks user_v2 yang baru.

  5. Clean up old resources: Setelah memastikan Search View baru stabil, hapus Search View lama dan indeks user_v1.

    DROP SEARCH VIEW user_v1;