Đi đến nội dung chính
VI
Trang chủ / Bài viết / Thay đổi cơ sở dữ liệu không gián đoạn bằng 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 bằng 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

Ý chính: 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ữ trong bài: 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 thực tế

Đổ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.

Trong một đợt triển khai thực tế, phiên bản ứng dụng cũ và mới luôn có khoảng thời gian chạy song song. Mọi thay đổi lược đồ phải tương thích với cả hai phía trong khoảng giao nhau đó.

Expand–Contract biến một thay đổi phá vỡ thành nhiều bước nhỏ: thêm cấu trúc mới, ghi tương thích, bổ sung dữ liệu cũ, chuyển luồng đọc và chỉ xóa cấu trúc cũ khi không còn đường quay lại.

Thiết kế và triển khai

  1. Thêm cột cho phép rỗng hoặc bảng mới mà chưa thay đổi hành vi hiện tại.
  2. Triển khai mã tương thích, bổ sung dữ liệu cũ theo các lô có thể tiếp tục và đối soát kết quả.
  3. Chuyển luồng đọc bằng Feature Flag; chỉ xóa mã và lược đồ cũ trong một bản phát hành sau khi đường quay lui không còn cần thiết.

Mã minh họa: Bổ sung dữ liệu theo khóa chính và 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)

Sau mỗi lô, đo thời gian chờ khóa và độ trễ replica; tự tạm dừng trước khi độ trễ của người dùng bị ảnh hưởng.

Rủi ro cần tính trước

  • Worker phiên bản cũ chạy lại và chỉ ghi vào cột cũ sau khi hệ thống đã chuyển luồng.
  • Tác vụ bổ sung dữ liệu cũ ghi đè một thay đổi mới vừa được người dùng thực hiện.
  • Xóa cột cũ làm hỏng câu lệnh đã chuẩn bị hoặc một báo cáo ít dùng bị bỏ quên.

Nên theo dõi gì?

Tín hiệuĐiều tín hiệu cho biết
Số lượt đọc và ghi trên đường cũ lẫn đường mớiCho biết đường tương thích nào vẫn còn được sử dụng.
Tiến độ bổ sung dữ liệu và số bản ghi sai lệchĐo độ đầy đủ cùng tính đúng của quá trình chuyển đổi.
Thời gian chờ khóa và độ trễ replicaBảo vệ lưu lượng khách hàng trong khi chuyển đổi dữ liệu.

Đưa vào production từng bước

Tách từng bước expand, ứng dụng tương thích, bổ sung dữ liệu, chuyển luồng đọc và contract thành các bản phát hành độc lập. Chuyển một nhóm khách hàng nhỏ trước, giữ đường quay lui đủ lâu và chỉ xóa cấu trúc cũ sau khi số liệu cùng nhật ký kiểm toán đều xác nhận an toàn.

Điều cần nhớ

Chuyển đổi cơ sở dữ liệu không gián đoạn là một chuỗi thay đổi tương thích và có thể đảo ngược, không phải một câu SQL khéo léo.

HỢP TÁC CÙNG Z-SOFT

Mỗi quyết định công nghệ hôm nay đều ảnh hưởng đến nhiều năm sau.

Trao đổi với đội ngũ Z-SOFT để đánh giá hiện trạng, xác định mục tiêu và lựa chọn kiến trúc phù hợp với định hướng phát triển của doanh nghiệp.

Đặt lịch tư vấn