DDBMS - Hệ thống xử lý giao dịch
Chương này thảo luận về các khía cạnh khác nhau của quá trình xử lý giao dịch. Chúng tôi cũng sẽ nghiên cứu các nhiệm vụ cấp thấp được bao gồm trong một giao dịch, các trạng thái giao dịch và thuộc tính của một giao dịch. Trong phần cuối cùng, chúng ta sẽ xem xét lịch trình và khả năng tuần tự của lịch trình.
Giao dịch
Giao dịch là một chương trình bao gồm một tập hợp các hoạt động cơ sở dữ liệu, được thực hiện như một đơn vị logic của quá trình xử lý dữ liệu. Các hoạt động được thực hiện trong một giao dịch bao gồm một hoặc nhiều hoạt động cơ sở dữ liệu như chèn, xóa, cập nhật hoặc truy xuất dữ liệu. Nó là một quá trình nguyên tử được thực hiện hoàn toàn hoặc hoàn toàn không được thực hiện. Một giao dịch chỉ liên quan đến việc truy xuất dữ liệu mà không có bất kỳ cập nhật dữ liệu nào được gọi là giao dịch chỉ đọc.
Mỗi hoạt động cấp cao có thể được chia thành một số nhiệm vụ hoặc hoạt động cấp thấp. Ví dụ: thao tác cập nhật dữ liệu có thể được chia thành ba tác vụ:
read_item() - đọc mục dữ liệu từ bộ nhớ lưu trữ đến bộ nhớ chính.
modify_item() - thay đổi giá trị của mục trong bộ nhớ chính.
write_item() - ghi giá trị đã sửa đổi từ bộ nhớ chính vào bộ nhớ.
Quyền truy cập cơ sở dữ liệu bị hạn chế đối với các hoạt động read_item () và write_item (). Tương tự như vậy, đối với tất cả các giao dịch, đọc và ghi tạo thành các hoạt động cơ sở dữ liệu cơ bản.
Hoạt động giao dịch
Các hoạt động cấp thấp được thực hiện trong một giao dịch là:
begin_transaction - Một điểm đánh dấu chỉ định thời điểm bắt đầu thực hiện giao dịch.
read_item or write_item - Các hoạt động cơ sở dữ liệu có thể được xen kẽ với các hoạt động bộ nhớ chính như một phần của giao dịch.
end_transaction - Một điểm đánh dấu chỉ định kết thúc giao dịch.
commit - Một tín hiệu để xác định rằng giao dịch đã được hoàn tất thành công toàn bộ và sẽ không được hoàn tác.
rollback- Một tín hiệu để chỉ định rằng giao dịch đã không thành công và do đó tất cả các thay đổi tạm thời trong cơ sở dữ liệu sẽ được hoàn tác. Không thể hoàn nguyên giao dịch đã cam kết.
Bang giao dịch
Một giao dịch có thể trải qua một tập hợp con gồm năm trạng thái, hoạt động, cam kết một phần, cam kết, thất bại và hủy bỏ.
Active- Trạng thái ban đầu mà giao dịch đi vào là trạng thái đang hoạt động. Giao dịch vẫn ở trạng thái này trong khi nó đang thực hiện đọc, ghi hoặc các thao tác khác.
Partially Committed - Giao dịch chuyển sang trạng thái này sau khi câu lệnh cuối cùng của giao dịch đã được thực hiện.
Committed - Giao dịch chuyển sang trạng thái này sau khi hoàn thành giao dịch thành công và hệ thống kiểm tra có tín hiệu cam kết.
Failed - Giao dịch chuyển từ trạng thái đã cam kết một phần hoặc trạng thái hoạt động sang trạng thái không thành công khi phát hiện ra rằng việc thực hiện bình thường không thể tiếp tục được nữa hoặc kiểm tra hệ thống không thành công.
Aborted - Đây là trạng thái sau khi giao dịch đã được khôi phục sau khi bị lỗi và cơ sở dữ liệu đã được khôi phục về trạng thái trước khi giao dịch bắt đầu.
Biểu đồ chuyển đổi trạng thái sau đây mô tả các trạng thái trong giao dịch và các hoạt động giao dịch cấp thấp gây ra thay đổi trạng thái.
Thuộc tính mong muốn của giao dịch
Bất kỳ giao dịch nào cũng phải duy trì thuộc tính ACID, viz. Tính nguyên tử, tính nhất quán, tính cô lập và độ bền.
Atomicity- Thuộc tính này nói rằng một giao dịch là một đơn vị xử lý nguyên tử, nghĩa là nó được thực hiện toàn bộ hoặc không được thực hiện ở tất cả. Không có bản cập nhật nào sẽ tồn tại.
Consistency- Một giao dịch nên đưa cơ sở dữ liệu từ trạng thái nhất quán này sang trạng thái nhất quán khác. Nó sẽ không ảnh hưởng xấu đến bất kỳ mục dữ liệu nào trong cơ sở dữ liệu.
Isolation- Một giao dịch phải được thực hiện như thể nó là giao dịch duy nhất trong hệ thống. Không được có bất kỳ sự can thiệp nào từ các giao dịch đồng thời khác đang chạy đồng thời.
Durability - Nếu một giao dịch đã cam kết dẫn đến một sự thay đổi, thì sự thay đổi đó phải tồn tại lâu dài trong cơ sở dữ liệu và không bị mất trong trường hợp có bất kỳ sự cố nào.
Lịch trình và xung đột
Trong một hệ thống có một số giao dịch đồng thời, schedulelà tổng thứ tự thực hiện các phép toán. Cho một lịch biểu S bao gồm n giao dịch, giả sử T1, T2, T3 ……… ..Tn; đối với bất kỳ giao dịch Ti nào, các hoạt động trong Ti phải thực hiện như đã trình bày trong lịch trình S.
Các loại lịch trình
Có hai loại lịch trình -
Serial Schedules- Trong một lịch trình nối tiếp, tại bất kỳ thời điểm nào, chỉ có một giao dịch đang hoạt động, tức là không có sự chồng chéo của các giao dịch. Điều này được mô tả trong biểu đồ sau:
Parallel Schedules- Trong các lịch trình song song, nhiều hơn một giao dịch đang hoạt động đồng thời, tức là các giao dịch chứa các hoạt động trùng lặp tại thời điểm. Điều này được mô tả trong biểu đồ sau:
Xung đột trong lịch biểu
Trong một lịch trình bao gồm nhiều giao dịch, conflictxảy ra khi hai giao dịch đang hoạt động thực hiện các hoạt động không tương thích. Hai hoạt động được cho là xung đột, khi tất cả ba điều kiện sau đây tồn tại đồng thời -
Hai hoạt động này là một phần của các giao dịch khác nhau.
Cả hai hoạt động đều truy cập vào cùng một mục dữ liệu.
Ít nhất một trong các hoạt động là hoạt động write_item (), tức là nó cố gắng sửa đổi mục dữ liệu.
Khả năng nối tiếp
A serializable schedulecủa giao dịch 'n' là một lịch trình song song tương đương với một lịch trình nối tiếp bao gồm các giao dịch 'n' giống nhau. Lịch trình có thể tuần tự hóa chứa tính chính xác của lịch trình nối tiếp trong khi xác định việc sử dụng CPU tốt hơn của lịch trình song song.
Tương đương của các lịch trình
Sự tương đương của hai lịch trình có thể thuộc các loại sau:
Result equivalence - Hai lịch trình tạo ra kết quả giống hệt nhau được cho là kết quả tương đương.
View equivalence - Hai lịch trình thực hiện hành động tương tự theo cách tương tự được cho là chế độ xem tương đương.
Conflict equivalence - Hai lịch biểu được cho là tương đương xung đột nếu cả hai đều chứa cùng một tập hợp các giao dịch và có cùng thứ tự các cặp thao tác xung đột.