Trả lời câu hỏi ACID và Transaction là gì trong DBMS?

Transaction là gì?

Transaction là một chủ đề được đề cập đến rất nhiều trong các ứng dụng doanh nghiệp, để đảm bảo tính toàn vẹn của dữ liệu ngay cả trong các hệ thống lớn phát sinh một lớn các thay đổi lên database và đồng thời. Transaction là một tập hợp các hoạt động đọc/ghi xuống database hoặc là chúng đều thực thi thành công hết hoặc không có hoạt động nào được thực thi xuống database.

transaction-workflow1

Từ hình trên có thể thấy transaction đầu tiên thành công khi tất cả các hoạt động đọc/ghi đều thành công, trong khi transaction thứ 2 bị rollback vì hoạt đông thứ 2 không thành công.

Vốn dĩ một transaction được đặc trưng bởi 4 yếu tố (thường được gọi là ACID):

  1. Atomicity
  2. Consistency
  3. Isolation
  4. Durability

Trong một cơ sở dữ liệu, mọi câu lệnh SQL được phải thực thi trong phạm vi của một transaction. Nếu không có định nghĩa phạm vi của transaction, database sẽ ngầm định rằng mỗi câu SQL sẽ được bao bên ngoài một transaction. 

Atomicity

Atomicity quy định rằng tất cả các hoạt động của transaction hoặc là thực thi thành công hết hoặc là không có bất cứ hành động nào được thực khi có bất kỳ một hoạt động thực thi không thành công.

Vì vậy một transaction chỉ có 2 trạng thái:

  • Abort: Tất cả các thay đổi của transaction sẽ không được đồng bộ xuống database.
  • Commit: Tất cả các thay đổi của transaction được đồng bộ xuống database.

Ví dụ chúng ta có một giai dịch của ngân hàng chuyển 100 đồng từ tài khoảng X sang tài khoản Y

Nếu tại bước transaction thực thi thành công tại bước T1 nhưng khi đến bước T2 thì hệ thống bị lỗi. Lúc này nếu những thay đổi này được đồng bộ xuống database thì vô tình tài khoản X bị mất 100 đồng mà tài khoản Y lại không nhận được đồng nào. Đây là ví dụ kinh điển mà Atomicity có thể đảm bảo các hệ thống sẽ không xảy ra sai xót như trên.

Consistency

Consistency nghĩa là tất cả các ràng buộc toàn vẹn dữ liệu(constraints, key, data types, Trigger, Check) phải được thực thi thành công cho mọi transaction phát sinh xuống database, nhầm đảm bảo tính đúng đắn của dữ liệu.

Isolation

Isolation đảm bảo các transaction xảy ra xen kẽ sẽ không làm ảnh hưởng đến tính nhất quán của dữ liệu. Các thay đổi dữ liệu bên trong mỗi transaction sẽ được cô lập, các transaction khác sẽ không thể nhìn thấy cho đến khi nó được đồng bộ xuống database. 

Cho X = 50, Y = 50.

Giả sử transaction T thực thi trước cho đến bước Read(Y) thì transaction T” bắt đầu thực thi, lúc này sẽ diễn ra tình trạng 2 transaction chạy xen kẽ nhau. Khi T” đọc giá trị của X thì có được giá trị tương ứng với trong T là (X * 100 = 500), nhưng Y là 50 so với T khi thực thi xong thì Y là 0.

Durability

Durability đảm bảo một transaction thực thi thành công thì tất cả những thay đổi trong transaction phải được đồng bộ xuống database bất kể cả khi hệ thống xảy ra lỗi hoặc bị mất điện. Các transaction thành công nhưng chưa được đồng bộ xuống database phải được đồng bộ lại khi hệ thống hoạt động trở lại.

Tóm lược

Các thuộc tính ACID về cơ bản nó đảm bảo tính đúng đắn và nhất quán của dữ liệu khi trải qua các transaction khác nhau. Tuy nhiên các thuộc tính này có thể sẽ không thể áp dụng với các hệ thống phân tán đang phát triển rất nhanh trong những năm gần đây, chúng ta sẽ tìm hiểu ở các phần sau.

Nguồn tham khảo 

https://vladmihalcea.com/a-beginners-guide-to-acid-and-database-transactions/

https://www.geeksforgeeks.org/acid-properties-in-dbms/

5 3 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x