Thuật toán Timestamp Ordering

Một phần của tài liệu Quản lý giao tác trong CSDL quan hệ và phân tán (Trang 72)

Ý tưởng của lược đồ này là thứ tự giao tác dựa trên tem thời gian. Một lịch biểu với các giao tác tham gia vào là có thể tuần tự, và lịch biểu tuần tự tương đương có các giao tác theo thứ tự giá trị tem thời gian, được gọi là TO - Timestamp Ordering. Thuật toán phải đảm bảo là đối với mỗi mục dữ liệu được truy cập bởi các thao tác xung đột trong lịch biểu, thứ tự mục dữ liệu đươc truy cập không vi phạm thứ tự tuần tự. Để làm được điều này, thuật toán kết hợp với mỗi mục dữ liệu X hai giá trị tem thời gian (TS):

(1) Read_TS(X): Biểu thị tem thời gian lớn nhất của giao tác bất kỳ đã đọc thành công mục dữ liệu X, có nghĩa là, Read_TS(X) = TS(T) khi T là giao tác trẻ nhất đã đọc X thành công [1,10].

(2) Write_TS(X): Biểu thị tem thời gian lớn nhất của giao tác bất kỳ đã ghi thành công mục dữ liệu X, có nghĩa là, Write_TS(X) = TS(T) khi T là giao tác trẻ nhất đã ghi X thành công [1,10].

Các tem thời gian này được cập nhật mỗi khi một Write hoặc một Read

mới được thực hiện.

Thứ tự tem thời gian cơ sở (basic TO).

Khi giao tác T cố gắng đưa ra thao tác read_item(X) hoặc write_item(X), thuật toán basic TO so sánh tem thời gian của giao tác T với tem thời gian của read_TS(X) và write_TS(X) để đảm bảo thứ tự tem thời gian thực thi giao tác không bị vi phạm. Nếu thứ tự này bị vi phạm, giao tác T bị hủy bỏ và sau đó được đưa vào hệ thống xem xét như một giao tác mới với một tem thời gian mới. Nếu giao tác T bị huy bỏ và được cuộn lại, bất kỳ giao tác T1 nào đã dùng giá trị đã được ghi bởi T cũng phải được cuộn lại, tương tự, bất kỳ giao tác T2 nào đã sử dụng giá trị đã được ghi bởi T1 cũng phải được cuộn lại và cứ như vậy. Hiệu ứng này được biết đến như cuộn trồng và là một trong các vấn đề liên quan tới basic TO, từ đó các lịch biểu được đưa ra là không thể khôi phục. Giao thức thêm vào phải được tuân theo trình tự tem thời gian để chắc chắn lịch biểu là có thể khôi phục, ít cuộn trồng và chặt chẽ. Thuật toán điều khiển đồng thời phải kiểm tra xem các thao tác xung đột có vi phạm trật tự tem thời gian hay không trong 2 trường hợp sau:

(1) Giao tác T đưa ra một thao tác write_item(X):

a. Nếu Read_TS(X) > TS(T) hoặc nếu Write_TS(X) > TS(T) thì giao tác T hủy bỏ và cuộn lại và thao tác bị loại bỏ. Điều này làm được là do một số giao tác trẻ hơn với tem thời gian lớn hơn TS(X) đã đọc hoặc ghi giá trị của mục dữ liệu X trước khi T có cơ hội ghi X, do đó vi phạm trật tự tem thời gian [1,10].

b. Nếu không xuất hiện điều kiện trong phần (a) thì thực thi thao tác write_item(X) của T và thiết lập write_TS(X) = TS(T) [1,10].

(2) Giao tác T đưa ra thao tác read_item(X):

a. Nếu write_TS(X) > TS(T) thì hủy bỏ và cuộn lại giao tác T và loại bỏ thao tác. Điều này làm được là do một số giao tác trẻ hơn với tem thời gian lớn hơn TS(X) đã ghi giá trị của mục dữ liệu X trước khi T có cơ hội đọc X [1,10].

b. Nếu write_TS(X) <= TS(T), thực thi thao tác read_item(X) của giao tác T và thiết lập read_TS(X) >= TS(T) [1,10].

Do đó, mỗi khi thuật toán basic TO phát hiện 2 thao tác xung đột xuất hiện không theo đúng thứ tự, thuật toán loại bỏ 2 thao tác sau khi hủy bỏ giao tác mà đã tạo ra nó.

Thứ tự tem thời gian chặt chẽ (Strict Timestamp Ordering)

Strict TO đảm bảo cho lịch biểu là cả tuần tự (xung đột) và chặt chẽ (dễ khôi phục). Giao tác T đưa ra một thao tác read_item(X) hoặc write_item(X) mà TS(T) > write_TS(X) thao tác đọc và ghi bị chậm lại cho đến khi T’ ghi giá trị của X (do TS(T’) = write_TS(X)) được xác nhận hoàn thành hoặc xác nhận hủy bỏ. Để thực hiện thuật toán này, điều cần thiết là giả vờ khóa mục dữ liệu đã được ghi bởi giao tác T’ cho đến khi T’ hoặc là được xác nhận hoàn thành hoặc là hủy bỏ. Thuật toán này không gây ra khóa chết, do T đợi T’ chỉ nếu TS(T) > TS(T’) [1].

Quy tắc viết của Thomas (Thomas’s Write Rule)

Quy tắc viết của Thomas là một sự biến đổi của thuật toán TO cơ sở, không bắt buộc là tuần tự xung đột nhưng nó loại bỏ các thao tác ghi ít hơn bằng cách sửa đổi các hạn chế của thao tác write_item(X) như sau [1]:

(1) Nếu read_TS(X) > TS(T) thì hủy bỏ và cuộn lại T rồi loại bỏ thao tác.

(2) Nếu write_TS(X) > TS(T) thì không thực thi thao tác ghi nhưng vẫn duy trì xử lý. Điều này do một số giao tác với tem thời gian lớn hơn TS(T) đã ghi giá trị của X. Do đó phải bỏ qua thao tác write_item(X) của T do nó đã quá hạn. Chú ý là bất kỳ xung đột nào phát sinh do việc làm này đều bị phát hiện bởi trường hợp (1). (3) Nếu điều kiện phần (1) và (2) không xuất hiện thì thực thi thao tác

write_item(X) của giao tác T và thiết lập write_TS(X) = TS(T).

Một phần của tài liệu Quản lý giao tác trong CSDL quan hệ và phân tán (Trang 72)