Đi đến nội dung chính
VI
Trang chủ / Thay đổi cơ sở dữ liệu không gián đoạn với Expand–Contract
04 thg 7, 2026 · Z-SOFT Admin · 10 phút đọc

Thay đổi cơ sở dữ liệu không gián đoạn với Expand–Contract

Thay đổi cấu trúc dữ liệu theo nhiều bước tương thích để phiên bản ứng dụng cũ và mới có thể cùng hoạt động.

Xem tất cả bài viết

Tóm tắt: Một thay đổi an toàn phải giả định phiên bản ứng dụng cũ và mới sẽ chạy song song trong một khoảng thời gian.

Thuật ngữ chính: Expand–Contract: thêm cấu trúc mới trước, chuyển dữ liệu, rồi mới bỏ cấu trúc cũ; backfill: bổ sung dữ liệu cũ vào cấu trúc mới; cutover: chuyển sang đường xử lý mới.

Bài toán

Đổi tên cột hoặc thêm ràng buộc chặt trong một lần triển khai có thể làm phiên bản cũ ngừng hoạt động. Cập nhật bảng lớn còn giữ khóa lâu và tranh tài nguyên với người dùng. Vì vậy, cần chia thay đổi thành các bước có thể quay lại.

Vì sao cách làm đơn giản chưa đủ

Rolling triển khai bảo đảm luôn có phiên bản overlap. Cơ sở dữ liệu phải tương thích ít nhất với application phiên bản cũ nhất còn chạy và job cũ có thể thử lại.

Data movement cũng là lưu lượng thực tế. Nó dùng I/O, cache và sao chép dữ liệu năng lực xử lý, nên phải xếp sau SLO của khách hàng.

Luồng xử lý

Expand
thêm schema tương thích
Migrate
dual đọc hoặc ghi
Verify
backfill và đối soát
Contract
bỏ đường cũ
Tính tương thích được thêm trước và chỉ gỡ sau khi usage cùng dữ liệu chứng minh đường cũ không còn cần.

Quyết định kiến trúc

Ưu tiên expand dạng bổ sung

Thêm field hoặc table mới trước. Rename được triển khai thành add, copy, cutover rồi remove.

Backfill phải resume được

Dùng khoảng primary key ổn định, commit nhỏ và mốc lưu an toàn. Chạy lại batch không được gây hại.

Validate constraint riêng

Tạo constraint theo cách ít blocking, sau đó validate dữ liệu cũ dưới tải được kiểm soát.

Phân tích chuyên sâu

Rollback là bài toán dữ liệu

Code rollback nhanh nhưng dữ liệu chỉ có dạng mới thì không. Giữ reverse-compatible path cho tới khi rollback window đóng.

Constraint tạo sự tin cậy

Sau đối soát, cơ sở dữ liệu constraint biến giả định thành enforcement. Thêm khi dữ liệu đã sạch, không phải trong lúc cutover khẩn cấp.

Các bước triển khai

  1. Thêm cấu trúc nullable hoặc bảng mới mà chưa đổi hành vi hiện tại.
  2. triển khai code tương thích, backfill theo batch resume được và đối soát.
  3. Chuyển đọc bằng feature flag, quan sát. Sau đó, bỏ code và schema cũ ở phát hành sau.

Ví dụ kỹ thuật: Backfill theo primary key có thể tiếp tục

lastId = checkpoint.load('account_region_v2')
rows = SELECT id FROM accounts WHERE id > :lastId ORDER BY id LIMIT 1000
UPDATE accounts SET region_v2 = derive(region) WHERE id IN (:rows)
checkpoint.save(MAX(rows.id))
sleep(rateLimit)

Đo sao chép dữ liệu lag và khóa wait sau mỗi batch. Tự dừng trước khi customer độ trễ bị ảnh hưởng.

Các tình huống lỗi cần tính trước

  • tiến trình xử lý cũ thử lại và chỉ ghi field legacy sau cutover.
  • Giá trị backfill ghi đè một online ghi mới hơn.
  • Drop cột cũ làm hỏng prepared statement hoặc report bị bỏ quên.

Tín hiệu cần giám sát

Tín hiệuÝ nghĩa
Số đọc/ghi đường cũ và mớiChứng minh compatibility path nào còn hoạt động.
Tiến độ backfill và mismatchCho biết độ đầy đủ và đúng của biến đổi.
khóa wait và replica lagBảo vệ lưu lượng khách hàng trong migration.

Cách kiểm chứng thiết kế

  • Chạy đồng thời application phiên bản cũ và mới xuyên suốt migration.
  • Pause rồi restart backfill tại mốc lưu an toàn ngẫu nhiên.
  • Tạo online update đồng thời và chứng minh backfill không ghi đè.

Kế hoạch triển khai an toàn

Tách expand, code tương thích, backfill, cutover và contract thành các phát hành riêng. Chuyển đọc cho cohort khách hàng nhỏ, giữ feature flag rollback nhanh và chỉ contract phá hủy sau rollback window cùng audit.

Checklist trước khi đưa vào vận hành

  • Hành vi khóa của DDL được thử trên dung lượng gần môi trường thật.
  • Backfill có rate limit, mốc lưu an toàn và nút pause.
  • Chỉ contract khi telemetry cho thấy đường cũ không còn usage.

Kết luận

Migration không downtime là chuỗi phát hành có thể đảo ngược, không phải một câu SQL thông minh.

Đối tác công nghệ chiến lược

Biến bài toán kinh doanh thành một lộ trình rõ ràng.

Trao đổi trực tiếp với đội ngũ Z-SOFT về mục tiêu, hiện trạng và bước đi phù hợp tiếp theo.

Đặt lịch tư vấn