2.4 Các kỹ thuật điều khiển đồng thời dựa trên tính hợp lệ
Trong các kỹ thuật điều khiển đồng thời trước, kiểm tra độ chính xác phải được thực hiện hoàn thành trước khi cơ sở dữ liệu có thể được thực thi. Ví dụ, trong lược đồ khóa, kiểm tra độ chính xác phải được thực hiện xong để xác định bất cứ khi nào mục dữ liệu đang được truy cập là đã được khóa. Trong lược đồ thứ tự tem thời gian, tem thời gian của giao tác được kiểm tra dựa vào tem thời gian đọc và ghi của mục dữ liệu. Ảnh hưởng của sự kiểm tra trong khi giao tác đang thực thi là làm cho tốc độ thực thi giao tác chậm lại.
Trong các kỹ thuật điều khiển đồng thời dựa trên tính hợp lệ, không có kiểm tra nào được hoàn thành trong khi giao tác đang thực thi. Trong lược đồ này, giao tác cập nhật dữ liệu không được tác động trực tiếp tới các mục cơ sở dữ liệu cho đến khi giao tác đi đến kết thúc. Trong quá trình giao tác thực thi, mọi cập nhật được tác động tới biến cục bộ của mục dữ liệu mà nó được để dành cho giao tác. Khi kết thúc thực thi giao tác, kỳ hợp lệ kiểm tra xem bất
kỳ cập nhật nào của giao tác có vi phạm tính khả tuần tự hay không. Thông tin chính xác cần thiết cho kỳ hợp lệ phải được lưu giữ bởi hệ thống. Nếu tính khả tuần tự không bị vi phạm, giao tác được xác nhận hoàn thành và cơ sở dữ liệu được cập nhật từ biến cục bộ; ngược lại, giao tác bị hủy bỏ và sau đó được bắt đầu lại [1].
Trong trường hợp đa số các giao tác trong hệ thống là các giao tác chỉ đọc (read-only), tỷ suất xung đột giữa các giao tác là thấp. Như vậy nhiều giao tác trong chúng thực hiện thiếu sự giám sát của lược đồ điều khiển đồng thời cũng vẫn giữ cho hệ thống ở trạng thái nhất quán. Hơn nữa, một lược đồ điều khiển đồng thời đưa vào một tổng phí đáng kể (cho thực hiện mã lệnh, thời gian chờ của giao tác ...). Việc tìm một lược đổ với tổng phí nhỏ là một mục tiêu. Nhưng khó khăn là ta phải biết trước những giao tác sẽ bị dính líu vào một xung đột. Để có được các hiểu biết đó, ta cần một lược đồ để giám sát hệ thống.
Giao thức điều khiển đồng thời này có ba kỳ. Ta giả thiết rằng, mỗi giao tác Ti thực hiện trong hai hoặc ba kỳ khác nhau, phụ thuộc vào nó là một giao tác chỉ đọc hay là một giao tác cập nhật. Các kỳ này theo thứ tự như sau [1]:
(1) Kỳ đọc (Read phase). Trong kỳ này, các giá trị của các mục dữ liệu khác nhau được đọc vào các biến cục bộ của Ti. Tất cả các hoạt động Write được thực hiện trên các biến cục bộ tạm (phiên bản) của các mục dữ liệu, không cập nhật CSDL hiện hành.
(2) Kỳ hợp lệ (Validation phase). Giao dịch Ti thực hiện một phép kiểm thử sự hợp lệ để xác định xem nó có thể sao chép đến CSDL các biến cục bộ tạm chứa các kết quả của các hoạt Write
(3) Kỳ ghi (Write phase). Nếu Ti thành công trong kỳ hợp lệ, các cập nhật được áp dụng vào CSDL; ngược lại, các cập nhật bị loại bỏ và giao tác Ti bị cuộn lại.
Ý tưởng của điều khiển đồng thời dựa trên tính hợp lệ là làm tất cả các kiểm tra một lần, do đó, sự thực thi giao tác bắt đầu với chi phí ít nhất cho đến khi kỳ hợp lệ được hoàn thành. Nếu có ít sự đan xen giữa các giao tác, thực thi giao tác sẽ được công nhận thành công. Tuy nhiên, nếu có nhiều sự đan xen, nhiều giao tác có thực thi xong thì các kết quả của cũng sẽ bị loại bỏ và giao tác được bắt đầu lại. Trong trường hợp này, kỹ thuật dựa trên tính hợp lệ làm việc không tốt. Kỹ thuật được gọi là “lạc quan” do thừa nhận có ít sự đan xen xuất hiện và do đó không cần kiểm tra trong suốt quá trình giao tác thực thi.
Giao thức dựa trên tính hợp lệ sử dụng giao tác tem thời gian cũng yêu cầu các tập write_sets và read_sets của giao tác được giữ bởi hệ thống, thời điểm bắt đầu và kết thúc với mỗi kỳ cần được giữ lại đối với mỗi giao tác. Trong kỳ hợp lệ với giao tác Ti, giao thức kiểm tra Ti không đan xen với bất kỳ giao tác được xác nhận hoàn thành nào hoặc với bất kỳ giao tác hiện tại khác trong kỳ hợp lệ của nó. Kỳ hợp lệ Ti kiểm tra, mỗi giao tác Tj hoặc là được xác nhận hoàn thành hoặc là trong kỳ hợp lệ của nó và có một trong các điều kiện sau [1]:
(1) Giao tác Tj hoàn thành kỳ ghi trước khi Ti bắt đầu kỳ đọc
(2). Ti bắt đầu kỳ ghi sau khi Tj hoàn thành kỳ ghi và tập read_set của Ti không còn mục dữ liệu nào giống như tập write_set của Tj. (3) Cả hai tập read_set và write_set của Ti không có mục dữ liệu nào
giống như write_set của Tj và Tj hoàn thành kỳ đọc trước khi Ti hoàn thành kỳ đọc.
Khi giao tác Ti hợp lệ, điều kiện (1) được kiểm tra đầu tiên với mỗi giao tác Tj, do đó (1) là điều kiện đơn giản nhất để kiểm tra. Chỉ khi điều kiện (1) sai thì điều kiện (2) mới được kiểm tra và chỉ khi điều kiện (2) sai mới đến điều kiện (3) được kiểm tra. Nếu có bất kỳ một trong ba điều kiện này, không có sự đan xen và Ti được xác nhận hợp lệ thành công. Nếu không có điều kiện nào, xác nhận hợp lệ của giao tác Ti lỗi và nó bị hủy bỏ và sau đó được khởi động lại do có thể có sự đan xen xuất hiện.
2.5 Đa hạt (Multiple Granularity)
Trong các lược đồ điều khiển đồng thời được mô tả trước đây, ta đã sử dụng mục dữ liệu như đơn vị trên nó sự đồng bộ hoá được thực hiện. Tuy nhiên, có các hoàn cảnh trong đó việc nhóm một vài mục dữ liệu và xử lý chúng như một đơn vị đồng bộ hoá mang lại nhiều lợi ích. Nếu một giao tác Ti phải truy cập toàn bộ CSDL và giao thức khóa được sử dụng, khi đó Ti phải khóa mỗi mục dữ liệu trong CSDL. Như vậy việc thực hiện các khóa này sẽ tiêu tốn một thời gian đáng kể. Sẽ hiệu quả hơn nếu Ti chỉ cần một yêu cầu khóa để khóa toàn bộ CSDL. Mặt khác, nếu Ti cần truy cập chỉ một vài mục dữ liệu, nó không cần thiết phải khóa toàn bộ CSDL vì như vậy sẽ giảm tính đồng thời. Như vậy, cái mà ta cần là một cơ chế cho phép hệ thống xác định nhiều mức hạt. Một cơ chế như vậy là cho phép các mục dữ liệu có kích cỡ khác nhau và xác định một sự phân cấp các hạt dữ liệu, trong đó các hạt nhỏ được ẩn náu bên trong các hạt lớn. Sự phân cấp như vậy có thể được biểu diễn đồ thị như một cây. Một nút không là lá của cây đa hạt biểu diễn dữ liệu được kết hợp với con cháu của nó. Như một ví dụ minh hoạ, ta xét cây sau:
Nó gồm bốn mức nút. Mức cao nhất là toàn bộ CSDL. Thấp hơn là các nút kiểu vùng: CSDL bao gồm các vùng này. Mỗi vùng lại có các nút kiểu file như các con của nó, mỗi vùng chứa đúng các file này và không file nào nằm trong nhiều hơn một vùng. Cuối cùng, mỗi file có các nút con kiểu mẩu tin, không mẩu tin nào hiện diện trong hơn một file.[1]
Mỗi nút trong cây có thể được khóa một cách riêng lẻ. Như đã làm trong giao thức khóa hai kỳ, ta sẽ sử dụng các phương thức chốt shared và
exclusive . Khi một giao tác khóa một nút, trong phương thức shared hoặc
exclusive, giao tác cũng khóa tất cả các nút con cháu của nút này ở cùng phương thức. Ví dụ Ti chốt tường minh file Fb ở phương thức exclusive, nó đã khóa ẩn tất cả các mẩu tin của Fb cũng trong phương thức exclusive.
Giả sử giao tác Tj muốn khóa mẩu tin Rb6của file Fb. Vì giao tác Ti đã khóa tường minh file Fb, mẩu tin Rb6 cũng bị khóa ẩn. Song làm thế nào để hệ thống biết được Tj có thể chốt Rb6 hay không: Tj phải duyệt cây từ gốc đến mẩu tin Rb6, nếu có một nút bất kỳ trên đường dẫn bị khóa ở phương thức không tương thích, Tj phải chờ. Bây giờ, nếu Tk muốn khóa toàn bộ CSDL, nó phải khóa nút gốc. Tuy nhiên, do Ti hiện đang giữ một khóa trên Fb, một bộ phận của cây, nên Tk sẽ không thành công. Vậy làm thế nào để hệ có thể khóa được nút gốc: Một khả năng là tìm kiếm trên toàn bộ cây, giải pháp này phá huỷ hoàn toàn lược đồ mục đích của lược đồ chốt đa hạt. Một giải pháp hiệu quả hơn là đưa vào một lớp mới các phương thức khóa, được gọi là phương thức khóa tăng cường (intension lock mode). Nếu một nút bị khóa ở phương thức tăng cường, khóa tường minh được tiến hành ở mức thấp hơn của cây (hạt nhỏ hơn). Khóa tăng cường được được đặt trên tất cả các cha của một nút trước khi nút đó được khóa tường minh. Như vậy một giao tác không cần thiết phải tìm kiếm toàn bộ cây để xác định nó có thể khóa một nút thành công hay
dẫn từ gốc đến N, trong khi duyệt cây, giao tác khóa các nút trên đường đi ở phương thức tăng cường.
Có một phương thức tăng cường kết hợp với phương thức shared và một với phương thức exclusive. Nếu một nút bị khóa ở phương thức tăng cường shared (IS), khóa tường minh được tiến hành ở mức thấp hơn trong cây, nhưng chỉ là một trong các khóa phương thức shared. Tương tự, nếu một nút bị khóa ở phương thức tăng cường exclusive (IX), khóa tường minh được tiến hành ở mức thấp hơn với các khóa exclusive hoặc shared. Nếu một nút bị khóa ở phương thức shared và phương thức tăng cường exclusive (SIX), cây con có gốc là nút này bị khóa tường minh ở phương thức shared và chốt tường minh được tiến hành ở mức thấp hơn với các khóa exclusive. Hàm tính tương thích đối với các phương thức khóa này được cho bởi ma trận [1]:
IS IX S SIX X
IS Yes Yes Yes Yes No
IX Yes Yes No No No
S Yes No Yes No No
SIX Yes No No No No
X No No No No No