Kỹ thuật đa phiên bản dựa trê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 76)

Với phương thức này, các phiên bản X1, X2, ..., Xk của mỗi mục dữ liệu X được duy trì. Với mỗi phiên bản, giá trị của phiên bản Xi và kéo theo hai tem thời gian được giữ:

(1) read_TS(Xi): là tem thời gian lớn nhất của giao tác đã đọc thành công phiên bản Xi.

(2) write_TS(Xi): là tem thời gian của giao tác đã ghi giá trị của phiên bản Xi.

Mỗi lần giao tác T được phép thực thi thao tác write_item(X), một phiên bản mới Xk+1 của mục dữ liệu X được tạo ra, với cả hai write_TS(Xk+1) và read_TS(Xk+1) được bắt đầu là TS(T). Do đó,, khi giao tác T được phép đọc giá trị của phiên bản Xi, giá trị của read_TS(Xi) được bắt đầu lớn hơn giá trị hiện tại của read_TS(Xi) và TS(T).

Để đảm bảo tính khả tuần tự, hai quy tắc sau được sử dụng:

(1) Nếu giao tác T đưa ra thao tác write_item(X), và phiên bản i của X có write_TS(Xi) cao nhất của mọi phiên bản cũng nhỏ hơn hoặc bằng TS(T) và read_TS(Xi) > TS(T) thì hủy bỏ và cuộn lại giao tác T; ngược lại, tạo ra một phiên bản Xj mới của X với read_TS(Xj) = write_TS(Xj) = TS(T). [1,10]

(2) Nếu giao tác T đưa ra thao tác read_item(X), tìm phiên bản i của X có write_TS(Xi) cao nhất của mọi phiên bản cũng nhỏ hơn hoặc

bằng TS(T) thì trả lại giá trị của Xi vào giao tác T, và thiết lập giá trị của read_TS(Xi) > TS(T) và lớn hơn giá trị hiện tại của read_TS(Xi). [1,10]

Nhận thấy là trong quy tắc thứ 2, một thao tác read_item(X) là luôn luôn thành công, bởi nó tìm phiên bản Xi thích hợp để đọc dựa vào write_TS của các phiên bản tồn tại khác nhau của X. Trong quy tắc 1, Giao tác T có thể bị hủy bỏ và được cuộn lại. Điều này xảy ra nếu T cố gắng ghi một phiên bản của X mà nó được đọc bởi giao tác T’ khác mà tem thời gian là read_TS(Xi); mà T’ đọc phiên bản Xi đã được ghi bởi giao tác với tem thời gian là write_TS(Xi). Nếu xung đột này xuất hiện, T được cuộn lại; ngược lại, một phiên bản mới của X được ghi bởi giao tác T được tạo ra. Chú ý, nếu T được cuộn lại thì cuộn trồng có thể xuất hiện. Do đó, để đảm bảo khả năng khôi phục, giao tác T không được phép xác nhận hoàn thành cho đến khi mọi giao tác ghi phiên bản mà T đã đọc được xác nhận hoàn thành.

Các phiên bản không còn được dùng đến nữa sẽ bị xoá đi dựa trên quy tắc sau: Giả sử có hai phiên bản Xivà Xj của một mục dữ liệu và cả hai phiên bản này cùng có write_TS nhỏ hơn tem thời gian của giao tác già nhất trong hệ thống, khi đó phiên bản già hơn trong hai phiên bản Xivà Xj sẽ không còn được dùng nữa và bị xoá đi.

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 76)