Skip to content

ADR-0003. Phát hiện schema lệch nhưng không bao giờ tự dựng lại collection

FieldValue
StatusAccepted
Date2026-03-01
DecidersPhat Nguyen
Supersedes-

Bối cảnh

  • Khi khởi động, TypesenseSearchEngineComponent so sánh cấu hình của từng collection đã đăng ký với collection Typesense đang chạy.
  • Typesense không thể thay đổi tại chỗ phần lớn các định nghĩa trường; áp dụng một schema đã đổi thường đồng nghĩa với việc phải xoá rồi tạo lại collection.
  • Tạo lại một collection sẽ xoá toàn bộ document của nó, tức là âm thầm xoá sạch search index trong một lần deploy thông thường.
  • Reindex lại từ CDC/nguồn sau khi xoá có thể mất rất lâu và để lại một khoảng thời gian kết quả rỗng hoặc thiếu.

Quyết định

Chúng tôi sẽ tạo collection nếu nó chưa tồn tại, nhưng khi phát hiện lệch nhau thì chỉ ghi log một error ("manual migration required") và để nguyên collection đang chạy. Các thay đổi trường mang tính bổ sung được triển khai qua script migrate:apply tường minh (PATCH schema chỉ-thêm lên collection đang chạy); các thay đổi phá vỡ đi qua luồng dựng lại blue-green migrate:rebuild - một thao tác cố ý, do con người thực hiện.

Hệ quả

ƯuNhược
Một lần deploy không bao giờ âm thầm xoá sạch indexThay đổi schema cần một bước thủ công + sự lưu ý của operator
Operator tự chọn khoảng thời gian reindex an toànCấu hình và schema đang chạy có thể lệch nhau cho tới khi được xử lý
Script backfill xử lý trường hợp bổ sung thường gặpCác thay đổi phá huỷ mới cần một bước runbook được ghi lại

Các phương án đã cân nhắc

Phương ánƯuNhượcLý do loại bỏ
Tự xoá + tạo lại khi lệch nhauHoàn toàn tự độngXoá sạch document mỗi lần deploy có đổi schemaRủi ro mất dữ liệu không thể chấp nhận
Chặn khởi động khi lệch nhauBuộc phải xử lýHạ cả service chủ chỉ vì một khác biệt schema của searchQuá thô bạo; search không nằm trên đường tới hạn
Đổi alias theo version (collection blue/green)Reindex không gián đoạnNhiều thành phần biến động hơn, phải quản lý aliasHoãn lại - quá mức cần thiết cho quy mô hiện tại

Tham chiếu

  • packages/search/src/components/typesense-search-engine.component.ts - ensureCollectionsWithMigration
  • packages/search/src/helpers/schema-migration.helper.ts
  • Operations

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.