事務t的時間戳:ts(t)。事務t將自己開始的訊息發給排程器的時刻
使用系統clock或維護乙個計數器,都可以對時間戳的生成進行實現
對於每乙個資料庫元素x,都有兩條相關的時間戳以及乙個額外的位:
1、rt(x):最近一次有事務對x進行讀取的時間戳
2、wt(x):最近一次有事務對x進行寫入的時間戳
3、c(x):x的提交位。當且僅當最近對x進行寫入的事務進行了commit之後,此位為真
排程器假定,事務時間戳的順序和它們執行的順序是一致的
兩種不允許出現的情況——過晚的讀取和過晚的寫入:
髒資料問題:在u寫入資料並被t讀取後,u撤銷了寫入。此時t讀取的就是髒資料
thomas寫入規則:當寫入時間較遲的寫入已經就緒時,可以跳過寫入。此寫入規則會在事務abort時存在乙個潛在的風險,但可以通過c(x)這個位來避免這個風險
對於讀的請求,應該檢視是否是過晚的讀取
對於寫的請求,應該檢視是否是過晚的寫入
對於commit請求,應該檢視commit位
對於abort或回滾請求,恢復(繼續)其他的事務
假定排程器接收到乙個請求rt(
x)
r_t(x)
rt(x)
1、如果ts(t)≥
\ge≥wt(x),則說明這個讀操作在物理上是可以實現的。此時再看c(x)的情況:
如果c(x)為真,則批准請求,如果ts(t)>rt(x),將rt(x)設為ts(t),否則不改變rt(x)的值
如果c(x)為假,則對事務t進行推遲,直到c(x)變為真或事務取消對x的寫入
2、如果ts(t)假定排程器接收到乙個請求wt(
x)
w_t(x)
wt(x)
1、如果ts(t)≥
\ge≥rt(x)並且ts(t)≥
\ge≥wt(x),則說明這個寫操作在物理上是可以實現的。隨即對x寫入新值,將wt(x)的值設定為ts(t),並且將c(x)設定為假
2、如果ts(t)≥
\ge≥rt(x)但ts(t)假定排程器接收到乙個對事務t進行commit的請求,則對所有被事務t寫入的資料庫元素x,置c(x)為真,隨後恢復所有正在等待事務t進行commit的事務
假定排程器接收到乙個abort事務t或回滾事務t的請求,則所有正在等待/被事務t寫入的資料庫元素x/的事務必須要重新嘗試讀取或寫入,隨後觀察在被abort的事務取消了寫入後,這些操作是否合法
在低衝突的情況下,時間戳表現更好;而在高衝突的情況下,鎖的表現更好
資料庫系統 學習記錄4
判斷關係所屬正規化時,需要先找到候選關鍵字 沒有在fd右邊出現的屬性必定是候選關鍵字的一部分,如果找不到,則進行列舉,尋找閉包 沒有非主屬性,一定是第三正規化 用於表達資料庫的設計的方式包括 e r圖 uml odl 相似抽象物件的集合為實體集 實體集與屬性相關聯,屬於實體的特性 兩個或多個實體集之...
資料庫系統 學習記錄10
在記錄排好序時,可以在記錄上建立稠密索引 鍵的順序與檔案中的排序順序一致,圖1為稠密索引的舉例 圖1 稠密索引 當索引檔案中指向記錄本身的指標長度遠小於記錄本身長度,以至於可以存入到記憶體時,優勢就會非常明顯 每次查詢只需要使用一次i o操作 使用稠密索引時,無需將索引放入記憶體即可知道檔案是否存在...
編譯原理 學習記錄16 課程完結
允許在過程內部又說明過程 函式和過程,可以統一稱作過程 子程式 以psacal語言為例,psacal語言的特點如下 1 最近巢狀作用域原則 乙個名字的作用域是那個包含了這個名字的說明的最小過程或函式 2 過程 函式允許巢狀 允許在乙個過程或函式的內部又說明過程或函式,內層可以引用外層過程中說明的名字...