Các kỹ thuật điều khiển đồng thời đa phiên bản

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Quản lý giao tác trong CSDL quan hệ và phân tán (Trang 75 - 79)

CHƢƠNG 2 : CÁC KỸ THUẬT ĐIỀU KHIỂN ĐỒNG THỜI

2.3 Các kỹ thuật điều khiển đồng thời đa phiên bản

Phương thức khác đối với điều khiển đồng thời là lưu giữ các giá trị cũ của một mục dữ liệu khi mục dữ liệu đó được cập nhật giá trị mới. Các giao thức điều khiển này được gọi chung là điều khiển đồng thời đa phiên bản. Do các phiên bản (các giá trị) của mục dữ liệu được giữ để không bị thay đổi. Khi một giao tác yêu cầu truy cập tới mục dữ liệu, nếu có thể, một phiên bản (giá trị) thích hợp được chọn để duy trì tính khả tuần tự của lịch biểu thực thi đồng thời. Ý tưởng là một số thao tác đọc mà đã bị loại bỏ thì theo kỹ thuật này vẫn có thể được chấp nhận bằng cách đọc một phiên bản cũ hơn của mục dữ liệu để duy trì khả năng tuần tự. Khi một giao tác ghi mục dữ liệu, nó ghi giá trị mới và giá trị cũ của mục dữ liệu được giữ lại. Một số thuật toán điều khiển đồng thời đa phiên bản thích sử dụng khái niệm tổng quan khả tuần tự hơn là khả tuần tự xung đột.

Rõ ràng trở ngại của kỹ thuật đa phiên bản là cần lưu nhiều hơn để duy trì các phiên bản của các mục cơ sở dữ liệu. Tuy vậy, các phiên bản cũ dù thế nào đi nữa cũng vẫn phải được duy trì. Ví dụ, với mục đích khôi phục, một số

ứng dụng cơ sở dữ liệu yêu cầu các phiên bản cũ hơn phải được giữ để duy trì một lược sử tiến triển của các giá trị mục dữ liệu.

Có vài lược đồ điều khiển đồng thời đa phiên bản đã được đề xuất. Ở đây, chỉ nghiên cứu các lược đồ dựa trên thứ tự tem thời gian và khóa 2 kỳ.

2.3.1 Kỹ thuật đa phiên bản dựa trên Timestamp Ordering

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.

2.3.2 Khóa 2 kỳ sử dụng khóa chứng thực

Trong lược đồ khóa đa chế độ này, có 3 chế độ khóa đối với mục dữ liệu: read, write và certify, thay vì chỉ có 2 (read và write) như đã biết. Do đó trạng thái của LOCK(X) đối với mục dữ liệu X có thể là một trong read_locked, write_locked, certify_locked hoặc unlocked. Trong lược đồ khóa chuẩn chỉ với khóa read và write (mục 2.1.1), khóa write là một khóa exclusive. Diễn tả mối quan hệ giữa khóa read và write trong lược đồ chuẩn bằng bảng tương

thích khóa được chỉ ra trong hình 2.6(a). Đầu ra là Yes có nghĩa, nếu một giao tác T giữ loại khóa được chỉ rõ ở đầu cột trên mục dữ liệu X và nếu giao tác T’ yêu cầu loại khóa được chỉ rõ ở đầu hàng trên cùng mục dữ liệu X thì T’ có thể thu được khóa do chế độ khóa là tương thích. Một trường hợp khác, đầu ra là No trong bảng cho biết rằng khóa là không tương thích. Bởi vậy T’ phải đợi cho đến khi T giải phóng khóa.

Trong lược đồ khóa chuẩn, một giao tác nhận được khóa write trên mục dữ liệu, các giao tác khác không thể truy cập vào mục dữ liệu đó. Ý tưởng đằng sau của 2PL đa phiên bản là để cho phép giao tác khác đọc mục dữ liệu X trong khi có một giao tác giữ khóa write trên X. Điều này được hoàn thành bằng cách cho phép 2 phiên bản của mỗi mục dữ liệu X; phiên bản thứ nhất phải luôn luôn được ghi bởi giao tác được xác nhận hoàn thành. Phiên bản thứ hai X’ được tạo ra khi giao tác T yêu cầu khóa write trên mục dữ liệu. Các giao tác khác có thể tiếp tục đọc phiên bản được xác nhận hoàn thành của X trong khi T giữ khóa write. Giao tác T có thể ghi giá trị của X’ nếu cần thiết mà không ảnh hưởng giá trị của phiên bản X được xác nhận hoàn thành. Tuy nhiên, khi T sẵn sàng xác nhận hoàn thành, nó phải giành được khóa chứng nhận trên tất cả các mục dữ liệu mà hiện tại nó giữ khóa write trước khi nó có thể xác nhận hoàn thành. Khóa chứng nhận không tương thích với khóa read, do vậy giao tác phải làm trễ xác nhận hoàn thành cho đến khi tất cả các write_locked được giải phóng bởi bất kỳ giao tác đọc theo trật tự nào giành được khóa chứng nhận. Một khóa chứng nhận là các khóa exclusive được yêu cầu, phiên bản X được xác nhận hoàn thành của mục dữ liệu bắt đầu là giá trị của phiên bản X’, phiên bản X’ bị loại bỏ và khóa chứng nhận được giải phóng.[1]

(a) Read Write

Read yes no

Write no no

(b) Read Write Certify

Read yes yes no

Write yes no no

Certify no no no

Hình 2.6 Các bảng khóa tương thích

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Quản lý giao tác trong CSDL quan hệ và phân tán (Trang 75 - 79)

Tải bản đầy đủ (PDF)

(96 trang)