對已建立搜尋視圖(Search View)的源表進行DDL操作時,不同類型的變更對同步鏈路的影響不同。本文介紹各類DDL操作對搜尋視圖的影響規則,以及需要重建搜尋視圖時的最佳實務。
源表DDL變更影響
下表列出了各類DDL操作對搜尋視圖同步鏈路的具體影響。
變更類別 | 具體操作 | 同步是否正常 | 說明 |
列變更 | 刪除列 | 是 | 存量資料中仍會保留被刪除欄位的值,增量資料中該欄位的值將為 |
增加列 | 是 | 新增欄位不會被自動同步至搜尋視圖。如需同步新增欄位,請參見搜尋視圖變更實踐。 | |
修改列類型 | 視類型而定 | 類型相容(如 類型不相容:會導致搜尋視圖不可用,需重建搜尋視圖。 | |
重新命名列 | 否 | 搜尋視圖使用建立時的列名。重新命名列後搜尋視圖不識別修改後的源表欄位,需重建搜尋視圖。 | |
其他(調整列順序、修改預設值、修改注釋、擴充VARCHAR長度、修改字元集、修改自增屬性、修改NULL約束等) | 是 | 這些操作不影響搜尋視圖的同步。 | |
索引變更 | 增加、刪除或修改二級索引 | 是 | 二級索引的變更不影響搜尋視圖的同步。 |
刪除或修改主鍵索引 | 否 | 搜尋視圖依賴源表的主鍵進行資料同步。變更主鍵後需重建搜尋視圖。 | |
表變更 |
| 否 | 搜尋視圖無法感知 |
其他( | 是 | 這些操作不影響搜尋視圖的同步。 | |
分區表變更 | 轉換為分區表、增加分區、合并分區、重新分配分區、分析分區、檢查分區、最佳化分區、重建分區、轉換為非分區表、局部索引等 | 是 | 這些操作不影響搜尋視圖的同步。 |
刪除分區( | 否 | 搜尋視圖無法感知這些操作。如需刪除資料並同步至PolarSearch,請使用 | |
交換分區( | 否 | 搜尋視圖無法感知指定分區資料的直接替換或修複,其他分區資料不受影響。建議執行後需重建搜尋視圖。 |
搜尋視圖變更實踐
當需要變更搜尋視圖的同步結構(如新增同步欄位),建議採用“新索引 + 新搜尋視圖”的方式進行重建。待新搜尋視圖資料同步完成並驗證無誤後,再將業務查詢流量切換至新的索引。
暫不支援非重建的線上視圖變更。
樣本:為shop.user表新增欄位並重建搜尋視圖。假設原搜尋視圖將shop.user表(含id, name, phone, gmt_create欄位)同步至user_v1索引。現需新增membership_level欄位,並確保線上查詢不受影響。
建立新索引:在PolarSearch節點中建立一個名為
user_v2的新索引,並在其映射關係中包含新欄位membership_level。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" } } } }修改源表:在源端PolarDB MySQL版的
user表中增加新列。ALTER TABLE shop.user ADD COLUMN membership_level TINYINT NOT NULL DEFAULT 0 COMMENT '會員等級';建立搜尋視圖:建立一個新的搜尋視圖,將
shop.user表的資料同步到user_v2索引。CREATE SEARCH VIEW user_v2 AS SELECT id, name, phone, gmt_create, membership_level FROM shop.user;驗證與切換:通過
SHOW SEARCH VIEW STATUS查看新搜尋視圖的狀態,待同步時延降至約0~1秒後,驗證新索引中的資料是否正確。確認無誤後,將業務查詢流量切換到新的user_v2索引。清理舊資源:觀察新搜尋視圖運行穩定後,刪除舊的搜尋視圖和PolarSearch中的
user_v1索引。DROP SEARCH VIEW user_v1;