Khi làm việc với cơ sở dữ liệu, kiến thức về khái niệm ACID là điều bạn cần phải nắm vững. Transaction và ACID là hai thuộc tính có mối liên hệ vô cùng mật thiết. Vậy, cụ thể ACID là gì? ACID bao gồm những thuộc tính nào và những phiên bản đang được sử dụng? Cùng tìm hiểu các thông tin liên quan đến ACID thông qua bài viết ngay dưới đây nhé!
ACID là gì?
ACID là viết tắt của bốn từ Atomicity, Consistency, Isolation và Durability, đó là bốn thuộc tính quan trọng cần đảm bảo khi thực hiện bất kỳ thao tác giao dịch nào với cơ sở dữ liệu. Cụ thể, đó là các yêu cầu về tính an toàn, tính bền vững và tính trọn vẹn cho dữ liệu. Nếu một tiến trình không đảm bảo được các thuộc tính trên thì sẽ không thể thực hiện được các thao tác với data và sẽ bị hủy ngay lập tức.
Khái niệm về ACID được mô tả trong phần 4 của tiêu chuẩn ISO/IEC 10026-1:1992. Mỗi thuộc tính của ACID đều có một phương pháp đo lường riêng. Thông thường sẽ có một module quản lý các giao dịch, các tiến trình được vận hành để đảm bảo đáp ứng đủ các yêu cầu ACID.
Trong hệ thống phân tán, để đáp ứng đủ các thuộc tính ACID này, người ta thường áp dụng phương pháp xác nhận 2 pha (2PC). Phương pháp này bắt buộc tất cả các thành phần tham gia phải bảo đảm xác nhận hoàn tất các giao dịch, nếu không đạt được yêu cầu đó sẽ bị hủy và trở về trạng thái trước đó.
Các thuộc tính của ACID trong cơ sở dữ liệu
Mỗi tiến trình đòi hỏi phải đáp ứng đủ 4 thuộc tính ACID để tham gia các giao dịch, cụ thể là các thuộc tính: Atomicity (nguyên tử), Consistency (nhất quán), Isolation (cô lập), và Durability (lâu bền), cụ thể như sau.
1. Atomicity
Atomicity có thể hiểu là tính nguyên tử. Điều này có nghĩa là mọi thay đổi về dữ liệu phải đảm bảo trọn vẹn, nếu các tiến trình thực hiện thành công hoặc là sẽ không có bất kỳ sự thay đổi nào về dữ liệu nếu có sự cố tiến trình xảy ra.
Khi chuỗi các tiến trình thao tác với cơ sở dữ liệu, nếu có lỗi xảy ra thì tất cả các tiến trình này phải bị hủy bỏ, data trong cơ sở dữ liệu vẫn giữ nguyên không có gì thay đổi. Trường hợp không có bất kỳ lỗi nào xảy ra bất thường trong quá trình xử lý tiến trình, thì dữ liệu sẽ được cập nhật mới lại theo ý muốn của người dùng.
Gọi là thuộc tính nguyên tử bởi vì mỗi thao tác riêng lẻ cũng được coi giống như các electron chuyển động quanh hạt nhân và hạt nhân ấy di chuyển thì các electron này cũng di chuyển theo. Sẽ không có bất cứ hạt electron nào đi lệch khỏi quỹ đạo ban đầu.
2. Consistency
Thuộc tính Consistency yêu cầu tính nhất quán dữ liệu cho database. Khi có một Transaction được hoàn thành, tất cả dữ liệu phải được bảo toàn các mối liên kết dù cho tiến trình thao tác thành công hay thất bại.
Data trong cơ sở dữ liệu phải luôn được đặt trong trạng thái hợp lệ ở bất kỳ thời điểm nào, trước và sau khi thực hiện mỗi hành động Transaction. Điều này có nghĩa là nếu hành động đầu tiên của tiến trình gặp lỗi thì hoặc là rollback lại, hoặc là tiến trình tiếp theo sẽ không được thực hiện.
3. Isolation
Isolation là thuộc tính nói về tính độc lập của các Transaction khi thực thi đồng thời trên hệ thống. Nếu cùng một lúc, có nhiều tiến trình cùng diễn ra thì cần một cơ chế đưa ra để bảo đảm rằng các tiến trình này có thể hoạt động song song mà không ảnh hưởng đến nhau.
Ví dụ, trong trường hợp một khách hàng chuyển tiền vào ngân hàng và một nhân viên kế toán rút tiền ra từ ngân hàng cùng diễn ra một lúc. Lúc này, cơ sở dữ liệu sẽ thực hiện đồng thời hai hành động là cộng thêm vào số dư của khách hàng, đồng thời trừ đi số tiền kế toán rút ra. Sẽ có cơ chế để cả hai hành động này được diễn ra thành công song song mà không ảnh hưởng đến việc xử lý database.
4. Durability
Thuộc tính này đưa ra để đảm bảo rằng khi các Transaction diễn ra thành công thì tác dụng nó tạo ra với cơ sở dữ liệu phải bền vững. Dù hệ thống có xảy ra bất kỳ lỗi gì thì dữ liệu luôn được khôi phục lại nguyên trạng.
Ví dụ, đối với các tiến trình giao dịch tiền qua ngân hàng. Khi các Transaction hoàn tất, dữ liệu sẽ được ghi lại dưới dạng đĩa cứng, các giao dịch cũng được ghi chép lại. Nếu có bất kỳ sự cố nào xảy ra đều có thể dễ dàng backup lại data.
Các phiên bản của ACID
ACID thường được sử dụng để kiểm tra các trình duyệt web về việc đảm bảo các tiêu chuẩn web do W3C (World Wide Web Consortium) phát triển. Có một số trình duyệt web không tuân thủ các tiêu chuẩn như hiển thị HTML, CSS khác với các tiêu chuẩn đề ra. Điều này thường gây ra các lỗi khi hiển thị, gây khó khăn khi truy cập cũng như không tương thích với trình duyệt được cài sẵn.
Có bốn phiên bản của ACID được đưa ra để kiểm tra khả năng tương thích trình duyệt với tiêu chuẩn web được đưa ra đó là:
- ACID 1 về tuân thủ HTML 4 và CSS 1: Ban đầu nó được gọi là Box Acid Test, là cách kiểm tra khả năng tương tác giữa các trình duyệt web, nhất là với Cascading Style Sheets 1.0. Đến năm 2008, hầu hết các trình duyệt đều đạt được tiêu chuẩn ACID1 này. Đây là cơ sở để phát triển các phiên bản ACID 2, ACID 3.
- ACID 2 về tuân thủ CSS 1, CSS 2: Dùng để kiểm tra các vấn đề về đánh dấu HTML, kiểu dáng CSS 1, CSS 2, tiêu chuẩn hình ảnh PNG và URI. Có nhiều trình duyệt vượt qua được ACID 2 như Safari, Opera, FireFox,…
- ACID 3 về tuân thủ CSS 2.1, DOM: Được dùng để kiểm tra các trình duyệt web đã tuân thủ các tiêu chuẩn web hay chưa, nhất là yếu tố DOM và JavaScript. ACID 3 tập trung vào các công nghệ sử dụng trên website tương tác cao như ECMAScript và DOM 2.
- ACID 4 về tuân thủ CSS 3: Tiêu chuẩn này dùng để đánh giá các trình duyệt có tuân thủ các yếu tố về thiết lập CSS 3 cho website hay chưa.
Mối liên hệ giữa ACID và Transaction
Thực chất, Transaction và ACID là hai khái niệm có mối liên hệ mật thiết với nhau khi thao tác trên database.
Transaction là một tiến trình xử lý có điểm đầu và điểm cuối được thao tác trên database, nó được cấu thành từ các phép thực thi nhỏ khác (operation). Các operation sẽ thực thi tuần tự và độc lập, nếu tất cả các operation thực thi thành công thì Transaction được thực hiện. Nếu có bất kỳ operation nào bị lỗi thì đồng nghĩa với Transaction bị hủy và phải rollback lại dữ liệu.
Mỗi Transaction thực thi đòi hỏi phải đảm bảo các thuộc tính ACID. Có nghĩa là ACID sẽ bảo đảm cho Transaction được thực hiện hợp lệ. Chúng có mối tương quan vô cùng mật thiết khi thực thi các tiến trình trong một hệ thống.
Ví dụ, Công ty A mở một tài khoản ngân hàng MBbank và nạp vào 500 triệu đồng. Cuối tháng, nhân viên kế toán rút 30 triệu đồng để thưởng cho anh B vì thành tích xuất sắc. Anh B cũng mở một tài khoản MBbank và chị nhân viên kế toán chuyển 30 triệu đồng này vào tài khoản MBbank cho anh B.
Phân tích hành vi, từ góc nhìn dữ liệu ta sẽ thấy có hai hành động được thực hiện:
- Trừ 30 triệu đồng từ tài khoản công ty A.
- Cộng 30 triệu đồng vào tài khoản anh B.
Hai hành động này hoạt động riêng lẻ nhưng nó sẽ cấu thành nên một Transaction, việc cộng và trừ tiền từ tài khoản là các operation. Cả hai hành động đều thực hiện độc lập, nhưng nếu một trong hai cái không thực hiện thành công thì cả tiến trình chuyển và nhận tiền này này coi như không được xác lập. Đồng thời, quá trình thực hiện chuyển – nhận tiền trong ngân hàng MBbank này đều phải đảm bảo các thuộc tính ACID trên cơ sở dữ liệu.
Câu hỏi thường gặp
Tại sao ACID lại quan trọng trong cơ sở dữ liệu?
ACID là từ viết tắt của Atomicity, Consistency, Isolation và Durability. Mỗi thuộc tính trong bốn thuộc tính này đều góp phần vào khả năng của một giao dịch để đảm bảo tính an toàn, tính bền vững và tính trọn vẹn của dữ liệu.
DBMS có hỗ trợ thuộc tính ACID không?
Thuộc tính ACID của DBMS đóng vai trò quan trọng trong việc duy trì tính nhất quán và tính sẵn có của dữ liệu trong cơ sở dữ liệu. Vì vậy, đó là một giới thiệu chính xác về các thuộc tính ACID trong DBMS.
Lời kết
Khái niệm về ACID SQL là kiến thức cần nắm khi thao tác trên cơ sở dữ liệu. Nó có một mối quan hệ ràng buộc với các Transaction. Những kiến thức được tổng hợp trên đây, hy vọng sẽ giúp bạn hiểu hơn về các thuộc tính ACID là gì?. Đừng bỏ lỡ những bài viết tiếp theo của Vietnix nhé!