ACID
Nguyên tắc ACID trong cơ sở dữ liệu¶
ACID là tập hợp các thuộc tính đảm bảo rằng giao dịch trong cơ sở dữ liệu được thực hiện một cách đáng tin cậy, ngay cả khi có sự cố. Các nguyên tắc này giúp duy trì tính toàn vẹn của dữ liệu, đặc biệt quan trọng trong các hệ thống như OLTP.
Chi tiết về từng nguyên tắc ACID¶
1. Atomicity (Tính nguyên tử)¶
- Định nghĩa:
Một giao dịch là một đơn vị công việc không thể chia nhỏ. Nó sẽ hoàn thành toàn bộ hoặc không có gì xảy ra. - Hoàn thành toàn bộ: Ghi tất cả thay đổi vào cơ sở dữ liệu.
- Không có gì xảy ra: Hủy bỏ giao dịch, không ghi bất kỳ thay đổi nào.
- Ví dụ:
- Chuyển tiền giữa hai tài khoản:
- Rút tiền từ tài khoản A.
- Cộng tiền vào tài khoản B.
- Nếu một trong hai thao tác thất bại, cả giao dịch sẽ bị hủy.
2. Consistency (Tính nhất quán)¶
- Định nghĩa:
Consistency (tính nhất quán) đảm bảo rằng dữ liệu trong cơ sở dữ liệu luôn hợp lệ trước và sau khi một giao dịch diễn ra. Một trạng thái hợp lệ là trạng thái mà tất cả các ràng buộc hoặc quy tắc (constraints) được áp dụng trên cơ sở dữ liệu đều được tuân thủ. Ví dụ 1: Chuyển tiền giữa hai tài khoản ngân hàng Giả sử cơ sở dữ liệu ngân hàng có quy tắc:Tổng số dư của các tài khoản trong ngân hàng luôn không thay đổi. Trạng thái trước giao dịch (hợp lệ): Tài khoản A: 10 triệu VND. Tài khoản B: 5 triệu VND. Tổng: 15 triệu VND. Giao dịch chuyển tiền: Rút 2 triệu VND từ tài khoản A. Cộng 2 triệu VND vào tài khoản B. Trạng thái sau giao dịch (hợp lệ): Tài khoản A: 8 triệu VND. Tài khoản B: 7 triệu VND. Tổng: 15 triệu VND. Tình huống lỗi gây mất tính nhất quán: Nếu hệ thống thực hiện rút tiền từ tài khoản A nhưng không cộng vào tài khoản B do lỗi, tổng số dư sẽ chỉ còn 13 triệu VND. Điều này vi phạm quy tắc và cơ sở dữ liệu rơi vào trạng thái không nhất quán. Ví dụ 2: Mua hàng trực tuyến Giả sử quy tắc trong cơ sở dữ liệu là: Số lượng hàng tồn kho không được âm. Trạng thái trước giao dịch: Sản phẩm X: còn 5 cái. Giao dịch mua 3 sản phẩm X: Hệ thống giảm số lượng sản phẩm từ 5 xuống còn 2. Trạng thái sau giao dịch: Sản phẩm X: còn 2 cái. (hợp lệ). Tình huống lỗi gây mất tính nhất quán: Nếu hai người dùng đồng thời mua sản phẩm X (5 cái): Người A mua 3 cái. Người B mua 3 cái. Nếu không có cơ chế đảm bảo tính nhất quán, hệ thống có thể xử lý cả hai giao dịch và số lượng sản phẩm sẽ âm (-1), vi phạm quy tắc.
3. Isolation (Tính cô lập)¶
- Định nghĩa:
Các giao dịch diễn ra đồng thời sẽ không làm ảnh hưởng đến nhau. - Kết quả cuối cùng của các giao dịch sẽ giống như khi chúng được thực hiện lần lượt.
- Ví dụ:
- Hai người dùng đồng thời đặt mua sản phẩm cuối cùng:
- Người đặt trước sẽ được chấp nhận.
- Người đặt sau sẽ nhận thông báo "Hết hàng".
- Tính cô lập đảm bảo không có sự lẫn lộn hoặc ghi sai dữ liệu.
4. Durability (Tính bền vững)¶
- Định nghĩa:
Khi một giao dịch đã được xác nhận, mọi thay đổi của nó sẽ được lưu trữ vĩnh viễn ngay cả khi hệ thống gặp sự cố (như mất điện hoặc lỗi phần cứng). - Ví dụ:
- Một giao dịch rút tiền từ ATM:
- Sau khi giao dịch hoàn thành, dù ATM bị mất điện, dữ liệu rút tiền vẫn được lưu vào hệ thống ngân hàng.
Tại sao ACID quan trọng?¶
- Đảm bảo tính toàn vẹn dữ liệu: Đặc biệt trong các ứng dụng yêu cầu độ tin cậy cao như ngân hàng, thương mại điện tử.
- Xử lý lỗi hiệu quả: ACID giúp khôi phục trạng thái hợp lệ khi có lỗi.
- Tính nhất quán và chính xác: Giúp dữ liệu luôn phản ánh trạng thái thực tế.
Minh họa thực tế¶
Ví dụ: Giao dịch chuyển tiền¶
- Atomicity:
- Toàn bộ giao dịch rút tiền từ tài khoản A và gửi vào tài khoản B phải hoàn tất, hoặc không có thay đổi nào cả.
- Consistency:
- Số tiền tổng cộng trong hệ thống không thay đổi.
- Isolation:
- Nếu một giao dịch khác đang xử lý tài khoản A, giao dịch của bạn sẽ phải chờ hoặc không bị ảnh hưởng.
- Durability:
- Sau khi giao dịch được xác nhận, số dư sẽ cập nhật vĩnh viễn, ngay cả khi hệ thống gặp lỗi.
Bạn cần giải thích thêm về cách các hệ quản trị cơ sở dữ liệu thực hiện ACID hay có ví dụ cụ thể khác không? 😊