<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # DBMS 查看可串行化 > 原文: [https://beginnersbook.com/2018/12/dbms-view-serializability/](https://beginnersbook.com/2018/12/dbms-view-serializability/) 在上一個教程中,我們學習了[沖突可串行化](https://beginnersbook.com/2018/12/dbms-conflict-serializability/)。在本文中,我們將討論另一種可串行化,即 **查看可串行化** 。 ## 什么是查看可串行化? 查看可串行化是一個查找給定[調度](https://beginnersbook.com/2018/12/dbms-schedules/)視圖是否可串行化的過程。 要檢查給定的調度是否可視化串行化,我們需要檢查給定的調度是否對其序列調度 **查看等價**。讓我們舉個例子來理解我的意思。 **給定調度:** ``` T1 T2 ----- ------ R(X) W(X) R(X) W(X) R(Y) W(Y) R(Y) W(Y) ``` **以上給定調度的串行調度:** 我們知道在[串行調度](https://beginnersbook.com/2018/12/dbms-schedules/)中,只有在當前運行的事務完成時才會啟動事務。所以上面給出的調度的連續調度如下所示: ``` T1 T2 ----- ------ R(X) W(X) R(Y) W(Y) R(X) W(X) R(Y) W(Y) ``` 如果我們能夠證明給定的調度對其連續調度 **查看等價**,那么給定的調度稱為**視圖可串行**。 ## 為什么我們需要查看可串行化? 我們知道,串行調度永遠不會使數據庫處于不一致狀態,因為沒有并發事務執行。但是,非串行調度可能會使數據庫處于不一致狀態,因為有多個事務同時運行。通過檢查給定的非串行調度是否可視化串行化,我們確保它是一致的調度。 您可能想知道不是檢查非串行調度是否可串行化,我們不能一直有串行調度嗎?答案是否定的,因為事務的并發執行充分利用了系統資源,并且與串行調度相比要快得多。 ## 查看等效 讓我們學習如何檢查兩個調度是否相同。 如果它們滿足以下所有條件,則稱兩個調度`T1`和`T2`是等效視圖: 1. **初始讀取:**事務中每個數據項的初始讀取必須在兩個調度中都匹配。例如,如果事務`T1`在調度`S1`中的事務`T2`之前讀取數據項`X`,則在調度`S2`中,`T1`應該在`T2`之前讀取`X`。 **讀取與初始讀取:**您可能會對術語初始讀取感到困惑。這里初始讀取意味著對數據項的第一次讀取操作,例如,數據項`X`可以在調度中多次讀取,但是對`X`的第一次讀取操作稱為初始讀取。一旦我們在同一篇文章的下一部分中得到示例,這將更加清晰。 2. **最終寫入:**每個數據項的最終寫操作必須在兩個調度中都匹配。例如,數據項`X`最后由事務`T1`在調度`S1`中寫入,然后在`S2`中,對`X`的最后一次寫操作應該由事務`T1`執行。 3. **更新讀取:**如果在調度`S1`中,事務`T1`正在讀取由`T2`更新的數據項,則在調度`S2`中,`T1`應該在相同數據項上的`T2`寫操作之后讀取該值。例如,在調度`S1`中,`T1`在`X`上執行寫入操作后對`X`執行讀取操作,然后在 `S2`中,`T1`在`T2`執行寫入操作后讀取`X`。 ## 查看可串行 如果調度視圖等同于其序列調度,那么給定的調度稱為查看可串行。讓我們舉個例子。 ### 查看可串行化示例 ![DBMS View Serializability](https://img.kancloud.cn/79/c0/79c0b5647fccafaae65fcb9e76a6ec78_600x300.jpg) 讓我們檢查一下可串行化的三個條件: #### 初始讀取 在調度`S1`中,事務`T1`首先讀取數據項`X`.在`S2`中,事務`T1`首先讀取數據項`X`. 讓我們檢查`Y`.在調度`S1`中,事務`T1`首先讀取數據項`Y`.在`S2`中,`Y`上的第一次讀操作由`T1`執行。 我們檢查了數據項`X`和在`S1`和`S1`中滿足`Y`和**初始讀取**條件。 #### 最終寫入 在調度`S1`中,`X`上的最終寫操作由事務`T2`完成。在`S2`中,事務`T2`也在`X`上執行最終寫入。 讓我們檢查`Y`.在調度`S1`中,`Y`上的最終寫操作由事務`T2`完成。在調度`S2`中,`Y`上的最終寫入由`T2`完成。 我們檢查了數據項`X`和`Y`,在`S1`和`S2`中,**最終寫入**條件得到滿足。 #### 更新讀取 在`S1`中,事務 T2 讀取由 T1 寫入的 X 的值。在 S2 中,相同的事務 T2 在 T1 寫入之后讀取 X. 在`S1`中,事務`T2`讀取由`T1`寫入的`Y`的值。在`S2`中,相同的事務`T2`在`T1`更新之后讀取`Y`的值。 兩個調度也滿足更新讀取條件。 **結果:**由于在該示例中滿足檢查兩個調度是否是視圖等效的所有三個條件,這意味著`S1`和`S2`是視圖等效的。而且,正如我們所知,調度`S2`是`S1`的連續調度,因此我們可以說調度`S1`是視圖可串行化調度。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看