Migration an toàn khi AI sinh schema
Bài trước bạn đã biết bọc nhiều thao tác ghi vào một transaction để không có trạng thái nửa vời. Migration cũng là ghi, nhưng là ghi vào cấu trúc bảng. Trên bảng vài chục triệu dòng, một câu ALTER TABLE do AI sinh ra có thể khóa bảng vài phút, làm app đứng hình, hoặc tệ hơn là làm mất dữ liệu mà không ai báo lỗi. Bài này dạy bạn mở file migration ra, đọc chậm từng dòng, rồi sắp lại thứ tự thay đổi.
Sau bài này, bạn sẽ:
- Rà được một file migration do AI tạo và chỉ ra dòng nào nguy hiểm.
- Biết thao tác nào khóa bảng, thao tác nào rewrite cả bảng.
- Sắp thứ tự thay đổi theo mẫu expand rồi contract để app cũ vẫn chạy trong lúc deploy.
- Biết cách backfill dữ liệu theo lô thay vì một câu
UPDATEtoàn bảng.
Mở file migration ra và đọc theo từng dòng
AI viết migration rất tự tin, câu nào cũng đúng cú pháp SQL. Vấn đề không phải cú pháp, mà là thời gian khóa và dữ liệu đang có. Bạn đọc theo ba câu hỏi, theo đúng thứ tự này:
- Câu lệnh này có khóa bảng không, và khóa bao lâu?
- Nó có làm mất dữ liệu hay làm mất khả năng đọc của app phiên bản cũ không?
- Nếu sai, lùi lại bằng cách nào?
Ví dụ một migration AI sinh cho bạn, nghe rất hợp lý:
-- migration AI sinh: thêm trạng thái đơn hàng và đổi tên cột
ALTER TABLE orders ADD COLUMN status VARCHAR(20) NOT NULL DEFAULT 'pending';
UPDATE orders SET status = 'pending' WHERE status IS NULL;
CREATE INDEX idx_orders_status ON orders(status);
ALTER TABLE orders RENAME COLUMN customer_id TO buyer_id;
Đọc chậm lại:
ADD COLUMN ... NOT NULL DEFAULTcó thể rewrite toàn bộ bảng. PostgreSQL 11+ thì nhẹ hơn, nhưng MySQL hoặc bản cũ vẫn copy bảng.UPDATE orderskhông cóWHEREtheo khóa chính là một câu ghi vào mọi dòng, giữ khóa lâu và làm phình WAL.CREATE INDEXthường chặn ghi trên bảng trong suốt thời gian build.RENAME COLUMNlàm app phiên bản cũ đang chạy (vẫn ghicustomer_id) chết ngay giữa lúc deploy.
In this lesson
- Bảng rủi ro: thao tác nào cần cẩn thận
- Expand rồi contract: chia một thay đổi thành nhiều bước
- Backfill theo lô, đừng một câu UPDATE
- Tập dượt trên bản sao trước khi chạm production
- Mang gì vào bài checkpoint
About this course
Part of Database cho vibe coder: index, N+1 và backup — Biết đủ về database để nhận ra truy vấn chậm, thêm index đúng chỗ và có phương án backup trước khi dữ liệu người dùng gặp sự cố.
- Level
- Beginner
- Goal
- Fundamentals
- Language
- Vietnamese
- Focus
- index và query plan N+1 query transaction và migration backup và khôi phục
- Prior knowledge
- Biết một chút SQL, Đã dùng app có database
- Practice
- Worked examples
- Time
- ~2.8h
- Voice
- một DBA kiên nhẫn chuyên đọc EXPLAIN, dạy bằng cách mở chậm một truy vấn rồi sửa tại chỗ và nhắc 'đo trước khi đoán'
- Not covered
- tuning database chuyên sâu, sharding, replication nâng cao
This lesson is premium content. Sign in and purchase the course to view the full content. Sign in