ACID và giao dịch cơ sở dữ liệu hoạt động như thế nào?


161

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:


320

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.

  • Nguyên tử
  • Tính nhất quán
  • Sự cách ly
  • Độ bền

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.


6
Bạn nói "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ó bất kỳ ràng buộc nào bạn có đối với dữ liệu liên quan sẽ bị vi phạm." Nếu theo các ràng buộc, bạn có nghĩa là những ràng buộc được xác định trong cơ sở dữ liệu (ví dụ: kiểm tra các ràng buộc), quản lý giao dịch phải làm gì để ngăn chặn chúng bị vi phạm? Không phải họ luôn luôn có hiệu lực sao? Dường như với tôi rằng chữ C trong ACID phải có nghĩa khác.
Marc Rochkind

20
@MarcRochkind Một giao dịch cho phép bạn áp dụng kiểm tra tính nhất quán ngay cả khi các hoạt động riêng lẻ trong giao dịch sẽ vi phạm các ràng buộc về tính nhất quán. Ví dụ: nếu bạn đang cập nhật hệ thống sổ sách kế toán kép, bạn có thể cần ghi nợ từ một số tài khoản và ghi có vào một số tài khoản cùng một lúc. Nếu không có giao dịch, bạn sẽ kiểm tra các ràng buộc sau mỗi câu lệnh và sẽ thất bại vì các câu lệnh riêng lẻ không giữ được tính nhất quán. Với các giao dịch, mặc dù các tuyên bố riêng lẻ không giữ được tính nhất quán, nhưng toàn bộ giao dịch thực hiện.
Brian Campbell

1
" Và nếu một người cần đọc dữ liệu được viết bởi người khác, họ sẽ phải đợi cho đến khi dữ liệu kia kết thúc " - không hoàn toàn đúng. Giao dịch đầu tiên có thể (và sẽ) đọc dữ liệu đó và sẽ thấy trạng thái như trước khi giao dịch thứ hai bắt đầu.
a_horse_with_no_name

1
@BrianCampbell 1) Tính nhất quán là cả "ràng buộc kiểm tra" như UNIQUE, FOREIGN KEY cũng như trạng thái hợp lệ (theo logic kinh doanh / yêu cầu của ứng dụng) khi kết thúc giao dịch? 2) Không nguyên tử và cô lập một mình đảm bảo tính nhất quán? Chúng ta có nên đề cập đến tính nhất quán một cách rõ ràng như một tài sản bắt buộc không?
dùng104309

1
@a_horse_with_no_name bạn đang nói về OCC (Kiểm soát đồng thời lạc quan) v / s PCC (Pessimistic). Cả hai có thể được triển khai trong một hệ thống cơ sở dữ liệu tuân thủ ACID, tùy thuộc vào việc bạn sẽ có tính nhất quán hay tính sẵn sàng cao.
Siddhartha

37

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:

  • Nguyên tử: toàn bộ tài liệu được in hoặc không có gì cả
  • Tính nhất quán: vào cuối giao dịch, nguồn cấp giấy được đặt ở đầu trang
  • Cách ly: không có hai tài liệu bị lẫn lộn trong khi in
  • Độ bền: máy in có thể đảm bảo rằng nó không "in" với hộp mực trống.

3
ví dụ máy in súc tích tuyệt vời.
lakeare

2
Ví dụ tốt. Tôi không hiểu phần "Tính nhất quán". Trong tâm trí tôi, một ví dụ tốt hơn là "Máy in không chấp nhận giấy lớn hơn 10 inch".
skeller88

EDIT - "giấy rộng hơn 10 inch."
skeller88

1
Tôi thừa nhận rằng một trong những là một chút căng. Nhưng thật khó để tìm thấy các ví dụ tốt hơn vì "tính nhất quán" là về dữ liệu và máy in không chính xác là một thiết bị dữ liệu.
Erwin Smout

1
Vậy thì máy in có một phương tiện giúp nó không bắt đầu in nếu số trang của tài liệu cao hơn số trang hiện được biết là có trong giấy cung cấp. Bạn thấy đó là rắc rối với nhiều người bình luận ở đây. Bạn đề cập đến "máy in" và họ chỉ thấy thiết bị phát trực tiếp nối tiếp câm mà họ có trên bàn làm việc ở nhà, chứ không phải thiết bị chuyên nghiệp cao cấp sẽ lấp đầy toàn bộ phòng khách của họ (và thường có loại tính năng mà tôi đã đề cập).
Erwin Smout

21

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

  • nguyên tử - máy in in 2 trang tài liệu hoặc không
  • tính nhất quán - máy in in một nửa trang và trang bị kẹt. Máy in tự khởi động lại và in 2 trang với tất cả nội dung
  • cách ly - trong khi có quá nhiều bản in đang diễn ra - máy in in đúng nội dung của tài liệu
  • độ bền - trong khi in, có một lần cắt điện - máy in lại in tài liệu mà không có bất kỳ lỗi nào

Hy vọng điều này sẽ giúp ai đó hiểu được khái niệm về ACID


Tôi không chắc chắn "trong khi có quá nhiều bản in đang diễn ra" nghĩa là gì - nó chỉ là "nhiều" chứ không phải là "quá nhiều"?
icc97

17

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.

Nguyên tử

Một giao dịch được đặc trưng bởi bốn thuộc tính (thường được gọi là ACID):

  • Nguyên tử
  • Tính nhất quán
  • Sự cách ly
  • Độ bền

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ử

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

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.

Sự cách ly

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.

Độ bền

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.

nhập mô tả hình ảnh ở đây

Để 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 .


Đối với "tính nhất quán" - Tôi thấy "tính chính xác logic cụ thể của ứng dụng" là lời giải thích ở nhiều nơi. Giả sử nếu đó là trường hợp, DB không thể biết logic ứng dụng. Vì vậy, "tính nhất quán" không thể là một thuộc tính vốn có của DB. Vì vậy, để ứng dụng thực hiện tính chính xác của nó (hoặc "tính nhất quán") không đủ Nguyên tử và Cách ly?
dùng104309

1
Tính nhất quán trong ACID có nghĩa là các ràng buộc toàn vẹn cơ sở dữ liệu: các ràng buộc PK, FK, UNIQUE. ACID rất quan trọng, nhưng ứng dụng của bạn có thể cần nhiều hơn thế, như ngăn chặn các cập nhật bị mất trong các cuộc hội thoại dài đòi hỏi phải khóa tối ưu ở cấp ứng dụng.
Vlad Mihalcea

Để tôi xem. Nhưng trước đó tôi cần một sự làm rõ cơ bản. Nhận xét của Brain Campbell trong câu trả lời được chấp nhận "Với các giao dịch, mặc dù các tuyên bố riêng lẻ không giữ được tính nhất quán, nhưng toàn bộ giao dịch". Làm thế nào là nó có thể ? Và làm thế nào để nhiều khoản ghi nợ và tín dụng liên quan đến tính nhất quán?
dùng104309

Hãy xem chương Giao dịch trong cuốn sách Kiên trì Java hiệu suất cao của tôi để có câu trả lời chi tiết cho tất cả những câu hỏi đó.
Vlad Mihalcea

12

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:


5

Để 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 đủ.


3

[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


1

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.

  • Nguyên tử:
  • Tính nhất quán
  • Sự cách ly
  • Độ bền
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.