Mối quan hệ giữa ACID và giao dịch cơ sở dữ liệu là gì?
ACID có giao dịch cơ sở dữ liệu hay nó là điều tương tự?
Ai đó có thể khai sáng chủ đề này.
Mối quan hệ giữa ACID và giao dịch cơ sở dữ liệu là gì?
ACID có giao dịch cơ sở dữ liệu hay nó là điều tương tự?
Ai đó có thể khai sáng chủ đề này.
Câu trả lời:
ACID là một tập hợp các thuộc tính mà bạn muốn áp dụng khi sửa đổi cơ sở dữ liệu.
Giao dịch là một tập hợp các thay đổi liên quan được sử dụng để đạt được một số thuộc tính ACID. Giao dịch là công cụ để đạt được các thuộc tính ACID.
Nguyên tử có nghĩa là bạn có thể đảm bảo rằng tất cả các giao dịch xảy ra, hoặc không có giao dịch nào xảy ra; bạn có thể thực hiện các thao tác phức tạp như một đơn vị, tất cả hoặc không có gì, và sự cố, mất điện, lỗi hoặc bất cứ điều gì khác sẽ không cho phép bạn ở trong trạng thái chỉ xảy ra một số thay đổi liên quan.
Tính nhất quán có nghĩa là bạn đảm bảo rằng dữ liệu của bạn sẽ nhất quán; không có ràng buộc nào bạn có trên dữ liệu liên quan sẽ bị vi phạm.
Cô lập có nghĩa là một giao dịch không thể đọc dữ liệu từ một giao dịch khác chưa hoàn thành. Nếu hai giao dịch được thực hiện đồng thời, mỗi giao dịch sẽ nhìn thế giới như thể chúng đang thực hiện tuần tự và nếu một giao dịch cần đọc dữ liệu được viết bởi người khác, nó sẽ phải đợi cho đến khi giao dịch kia kết thúc.
Độ bền có nghĩa là một khi giao dịch hoàn tất, đảm bảo rằng tất cả các thay đổi đã được ghi lại thành một phương tiện bền (như đĩa cứng) và thực tế là giao dịch đã được hoàn thành cũng được ghi lại.
Vì vậy, giao dịch là một cơ chế để đảm bảo các tài sản này; chúng là một cách để nhóm các hành động liên quan lại với nhau sao cho toàn bộ, một nhóm các hoạt động có thể là nguyên tử, tạo ra kết quả nhất quán, được cách ly khỏi các hoạt động khác và được ghi lại lâu dài.
ACID là thuộc tính mong muốn của bất kỳ công cụ xử lý giao dịch nào.
DBMS là (nếu nó tốt) là một loại công cụ xử lý giao dịch cụ thể lộ ra, thường ở một mức độ rất lớn nhưng không hoàn toàn là các thuộc tính đó.
Nhưng các động cơ khác tồn tại cũng có thể phơi bày những tính chất đó. Loại phần mềm từng được gọi là "màn hình TP" là một trường hợp điển hình (hiện nay tương đương với hầu hết là các máy chủ web).
Các màn hình TP như vậy có thể truy cập các tài nguyên khác ngoài DBMS (ví dụ: máy in) và vẫn đảm bảo ACID cho người dùng của họ. Như một ví dụ về ý nghĩa của ACID khi máy in tham gia vào giao dịch:
Tôi sửa đổi một chút ví dụ máy in để làm cho nó dễ giải thích hơn
1 tài liệu có 2 trang nội dung được gửi đến máy in
Giao dịch - tài liệu được gửi đến máy in
Hy vọng điều này sẽ giúp ai đó hiểu được khái niệm về ACID
Mối quan hệ giữa ACID và giao dịch cơ sở dữ liệu là gì?
Trong cơ sở dữ liệu quan hệ, mọi câu lệnh SQL phải thực thi trong phạm vi giao dịch.
Nếu không xác định rõ ràng ranh giới giao dịch, cơ sở dữ liệu sẽ sử dụng một giao dịch ngầm được bao bọc xung quanh mỗi câu lệnh riêng lẻ.
Giao dịch ngầm bắt đầu trước khi câu lệnh được thực thi và kết thúc (cam kết hoặc khôi phục) sau khi câu lệnh được thực thi. Chế độ giao dịch ngầm thường được gọi là autocommit.
Như đã giải thích trong bài viết này , một giao dịch là một tập hợp các hoạt động đọc / ghi thành công chỉ khi tất cả các hoạt động được chứa thành công.
Một giao dịch được đặc trưng bởi bốn thuộc tính (thường được gọi là ACID):
ACID có giao dịch cơ sở dữ liệu hay nó là điều tương tự?
Đối với hệ thống cơ sở dữ liệu quan hệ, điều này đúng vì Tiêu chuẩn SQL chỉ định rằng giao dịch sẽ cung cấp các đảm bảo ACID:
Nguyên tử có các hoạt động riêng lẻ và biến chúng thành một đơn vị công việc hoàn toàn hoặc không có gì, thành công nếu và chỉ khi tất cả các hoạt động được chứa thành công.
Một giao dịch có thể gói gọn một thay đổi trạng thái (trừ khi đó là một giao dịch chỉ đọc). Một giao dịch phải luôn luôn rời khỏi hệ thống ở trạng thái nhất quán, bất kể có bao nhiêu giao dịch đồng thời được xen kẽ tại bất kỳ thời điểm nào.
Tính nhất quán có nghĩa là các ràng buộc được thi hành cho mọi giao dịch đã cam kết. Điều đó ngụ ý rằng tất cả các Khóa, Kiểu dữ liệu, Kiểm tra và Kích hoạt đều thành công và không có vi phạm ràng buộc nào được kích hoạt.
Giao dịch yêu cầu cơ chế kiểm soát đồng thời và chúng đảm bảo tính chính xác ngay cả khi được xen kẽ. Cô lập mang lại cho chúng ta lợi ích của việc che giấu những thay đổi trạng thái không được cam kết từ thế giới bên ngoài, vì các giao dịch thất bại không bao giờ làm hỏng trạng thái của hệ thống. Cô lập được thực hiện thông qua kiểm soát đồng thời bằng cách sử dụng các cơ chế khóa bi quan hoặc lạc quan.
Một giao dịch thành công phải thay đổi vĩnh viễn trạng thái của một hệ thống và trước khi kết thúc nó, các thay đổi trạng thái được ghi lại trong nhật ký giao dịch bền vững. Nếu hệ thống của chúng tôi đột nhiên bị ảnh hưởng bởi sự cố hệ thống hoặc mất điện, thì tất cả các giao dịch đã cam kết chưa hoàn thành có thể được thực hiện lại.
Để biết thêm chi tiết về Độ bền và Nhật ký làm lại, hãy xem bài viết này .
Các thuộc tính ACID là khái niệm rất cũ và quan trọng của lý thuyết cơ sở dữ liệu. Tôi biết rằng bạn có thể tìm thấy rất nhiều bài viết về chủ đề này, nhưng tôi vẫn muốn bắt đầu chia sẻ câu trả lời về điều này bởi vì đây là chủ đề rất quan trọng của RDBMS.
Hệ thống cơ sở dữ liệu chơi với rất nhiều loại giao dịch khác nhau trong đó tất cả các giao dịch có đặc điểm nhất định. Đặc tính này được biết đến Thuộc tính ACID. Thuộc tính ACID nhận cấp cho tất cả các giao dịch cơ sở dữ liệu để hoàn thành tất cả các nhiệm vụ.
Nguyên tử: Hoặc là cam kết tất cả hoặc không có gì.
Tính nhất quán: Tạo hồ sơ nhất quán về mặt xác nhận tất cả các quy tắc và ràng buộc của giao dịch.
Cách ly: Đảm bảo rằng hai giao dịch không biết với nhau.
Độ bền: dữ liệu cam kết được lưu trữ mãi mãi. Tham khảo lấy từ bài viết này:
Để trích dẫn Wikipedia :
ACID (tính nguyên tử, tính nhất quán, sự cô lập, độ bền) là một tập hợp các thuộc tính đảm bảo các giao dịch cơ sở dữ liệu được xử lý một cách đáng tin cậy.
Một DBMS hỗ trợ các giao dịch sẽ cố gắng hỗ trợ tất cả các thuộc tính này - bất kỳ DBMS thương mại nào (cũng như một số DBMS nguồn mở) đều cung cấp 'hỗ trợ' ACID đầy đủ - mặc dù điều đó thường có thể (ví dụ, với các mức cách ly khác nhau trong MSSQL) làm giảm tính ACIDness - do đó làm mất sự đảm bảo của hành vi giao dịch đầy đủ.
[Gray] đã giới thiệu các thuộc tính ACD cho một giao dịch vào năm 1981. Năm 1983 [Haerder] đã thêm thuộc tính Cách ly. Theo tôi, các thuộc tính ACD sẽ có một tập các thuộc tính hữu ích hơn để thảo luận. Một cách giải thích về Nguyên tử (rằng giao dịch phải là nguyên tử như được thấy từ bất kỳ khách hàng nào vào bất kỳ lúc nào) sẽ thực sự ngụ ý thuộc tính cách ly. Thuộc tính "cô lập" hữu ích khi giao dịch không bị cô lập; khi tài sản cách ly được thư giãn. Trong ANSI SQL, nói: nếu mức cô lập yếu hơn thì SERIALIZABLE. Nhưng khi mức cô lập là SERIALIZABLE, thuộc tính cô lập không thực sự đáng quan tâm.
Tôi đã viết thêm về điều này trong một bài đăng trên blog: "ACID không có ý nghĩa".
http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html
[Xám] Khái niệm giao dịch, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/ con / theTransactionConcept.pdf
[Haerder] Nguyên tắc phục hồi cơ sở dữ liệu theo định hướng giao dịch, Haerder và Reuter, 1983. http://www.stanford.edu/ class / cs340v / con / record.pdf
Giao dịch có thể được định nghĩa là một tập hợp các nhiệm vụ được coi là đơn vị xử lý tối thiểu. Mỗi đơn vị xử lý tối thiểu không thể được chia thêm.
Tất cả giao dịch phải chứa bốn thuộc tính thường được gọi là thuộc tính ACID. tức là ACID là nhóm các thuộc tính của bất kỳ giao dịch nào.