Concurrency

在某些情況下,遵循 thomas 寫入規則的時間戳協議是否允許非視圖序列化計劃?

  • August 21, 2020

我在教科書(Avi Silberschatz、Henry F. Korth 和 S. Sudarshan 的數據庫系統概念教科書)中遇到了以下內容 $ 6e $ ) 頁碼 686:

Thomas 的寫規則允許不衝突序列化但仍然正確的調度。允許的那些非衝突可序列化調度滿足視圖可序列化調度的定義(參見範例框)。

從以上幾行我了解到,時間戳協議遵循 Thomas 的寫入規則生成的每個調度都是視圖可序列化的。

現在讓我們來看看下面的小時間表: $ S: R_1(X), W_2(X), W_1(X) $ .

這個時間表 $ S $ 在遵循 Thomas 寫入規則的時間戳協議下是允許的。

序列化順序是 $ R_1(X), W_1(X). $

但我無法證明它是可序列化的視圖。

實際上我認為它是非視圖可序列化的,因為,

  1. 將串列順序視為 $ T_1, T_2 $

現在的最終值為 $ X $ 正在寫 $ T_2 $ . 所以不等價。 2. 下一個替代序列順序是 $ T_2, T_1 $

這裡, $ R_1(X) $ 將讀取的值 $ X $ 寫的 $ T_1 $ 不是兩個交易開始之前的原始價值。所以這也不是視圖等效的。

這裡出了什麼問題?請幫我解決這個問題。

給定的時間表 S 是:

T1    T2
----  -----
R(X)
     W(X)
W(X)

要成為可序列化的視圖,W2(X) 必須在 R1(X) 之前或 W1(X) 之後移動。但是,第一個會違反“初始讀取”規則,而第二個會違反“最後寫入”規則。

T2 在 T1 之後開始,因此具有更高的時間戳。當 T1 來寫 X 時,它會看到 T2 的時間戳。根據 Thomas 的寫規則,T1 的寫是無效的並且可以被刪除。然後給定的時間表變成

T1    T2
----  -----
R(X)
     W(X)

現在 T2 的所有動作都發生在 T1 的所有動作之後 - 計劃是序列化的。

(你的問題是相反的,刪除 W2(X)。我認為這是一個錯誤。)

為了證明一個調度是可序列化的,只需要證明至少有一個等價的調度是串列的。沒有必要證明每一個可能的串列調度都是可以實現的。我同意 T2,T1 由於讀/寫依賴性,在原始時間表上不能查看可序列化。但是,T1,T2 在 Thomas 寫入規則下是可序列化的。

引用自:https://dba.stackexchange.com/questions/252771