ACID (Atomicity, Consistency, Isolation, Durability)
ACID giúp đảm bảo tính toàn vẹn dữ liệu, đặc biệt quan trọng trong hệ thống tài chính, ngân hàng, và các ứng dụng yêu cầu dữ liệu chính xác.
ACID là viết tắt của Atomicity (Tính nguyên tử), Consistency (Tính nhất quán), Isolation (Tính cô lập) và Durability (Tính bền vững). Đây là 4 thuộc tính quan trọng đảm bảo tính toàn vẹn của dữ liệu trong hệ quản trị cơ sở dữ liệu (DBMS), đặc biệt là trong giao dịch (transaction).
1. Atomicity (Tính nguyên tử)
- Một giao dịch (transaction) phải được thực thi toàn bộ hoặc không có gì.
- Nếu một phần của giao dịch thất bại, toàn bộ giao dịch phải bị hủy bỏ (rollback), và dữ liệu trở về trạng thái ban đầu.
Ví dụ:
Giả sử bạn chuyển $100 từ tài khoản A sang tài khoản B. Một giao dịch sẽ gồm hai bước:
- Trừ $100 từ tài khoản A.
- Cộng $100 vào tài khoản B.
Nếu bước 1 thành công nhưng bước 2 thất bại (do lỗi mạng hoặc hệ thống sập), bước 1 cũng phải bị hủy bỏ để đảm bảo không bị mất tiền.
2. Consistency (Tính nhất quán)
- Giao dịch phải biến đổi dữ liệu từ trạng thái hợp lệ này sang trạng thái hợp lệ khác, tuân theo tất cả ràng buộc (constraints), triggers, foreign keys, rules trong CSDL.
- Dữ liệu không bao giờ bị lỗi hoặc trở nên không hợp lệ do một giao dịch không đúng cách.
Ví dụ:
- Nếu tổng số tiền trong hệ thống ngân hàng trước khi giao dịch là $10,000, thì sau giao dịch tổng số tiền cũng phải bằng $10,000 (không được biến mất hay tạo ra tiền mới do lỗi giao dịch).
3. Isolation (Tính cô lập)
- Các giao dịch được thực hiện độc lập với nhau để tránh lỗi xung đột dữ liệu khi nhiều giao dịch chạy cùng lúc.
- Mỗi giao dịch đang thực thi không thể thấy kết quả tạm thời của các giao dịch khác.
Ví dụ:
- Hai người cùng rút tiền từ tài khoản A (có $500) cùng lúc:
- Giao dịch 1 đọc số dư = $500.
- Giao dịch 2 cũng đọc số dư = $500.
- Cả hai giao dịch đều trừ $300 → Có thể gây ra tình trạng số dư âm.
Giải pháp:
- Cơ sở dữ liệu sử dụng cấp độ cách ly giao dịch như READ COMMITTED, REPEATABLE READ, SERIALIZABLE để tránh lỗi trên.
4. Durability (Tính bền vững)
- Sau khi giao dịch được commit, dữ liệu sẽ được lưu vĩnh viễn trong hệ thống, ngay cả khi hệ thống bị crash hoặc mất điện.
- Đảm bảo rằng khi hệ thống khởi động lại, dữ liệu vẫn không bị mất.
Ví dụ:
- Bạn mua hàng online, sau khi thanh toán thành công, đơn hàng của bạn được lưu lại ngay cả khi hệ thống bị sập ngay sau đó.
Giải pháp:
- WAL (Write-Ahead Logging): PostgreSQL, MySQL, SQL Server sử dụng WAL để ghi log trước khi cập nhật dữ liệu thực tế.
- Sao lưu & phục hồi (Backup & Recovery): CSDL sao lưu dữ liệu để khôi phục khi có lỗi.