• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Shuffy

            不斷的學(xué)習(xí),不斷的思考,才能不斷的進(jìn)步.Let's do better together!
            posts - 102, comments - 43, trackbacks - 0, articles - 19

            作者 James Leigh 譯者 曹如進(jìn) 發(fā)布于 2009年11月11日 上午2時(shí)18分

             

            ACID性質(zhì)是數(shù)據(jù)庫理論中的奠基石,它定義了一個(gè)理論上可靠數(shù)據(jù)庫所必須具備的四個(gè)性質(zhì):原子性,一致性,隔離性和持久性。雖然這四個(gè)性質(zhì)都很重要,但是隔離性最為靈活。大部分?jǐn)?shù)據(jù)庫都提供了一些可供選擇的隔離級(jí)別,且現(xiàn)在許多庫都增加了附加層來創(chuàng)建顆粒度更細(xì)的隔離。隔離級(jí)別應(yīng)用范圍如此之廣主要是因?yàn)榉艑捀綦x約束往往會(huì)使得可擴(kuò)展性和性能提高幾個(gè)數(shù)量級(jí)。

            串行一致性是可用的最古老最高的隔離級(jí)別之一,它之所以倍受青睞是因?yàn)槠涮峁┑暮唵尉幊棠P停疵看蝺H能有一個(gè)事務(wù)對(duì)給定的資源進(jìn)行操作,這就避免了很多潛在的資源問題。盡管如此,大部分應(yīng)用程序(尤其是Web應(yīng)用程序)都不采用這種級(jí)別非常高的隔離,因?yàn)閺慕K端用戶的角度來看這是不切實(shí)際的-任何一個(gè)擁有大量用戶群的應(yīng)用程序在訪問共享資源時(shí)都將會(huì)有幾分鐘的延遲,而這會(huì)使得用戶量迅速減少。弱一致性和最終一致性在大規(guī)模分布式數(shù)據(jù)源中,例如Web中,隨處可見。好幾個(gè)成功的大型Web應(yīng)用(例如,eBay和Amazon)都顯示出樂觀的(optimistic)弱一致性要比傳統(tǒng)悲觀的(pessimistic)機(jī)制在擴(kuò)展性方面好得多。本文將一窺八種不同的隔離級(jí)別。學(xué)會(huì)適當(dāng)?shù)姆艑挃?shù)據(jù)一致性的約束,你可以在自己的應(yīng)用程序中使用這八種隔離級(jí)別來獲得更好的性能和可擴(kuò)展性。

            并發(fā)控制的主要目標(biāo)是為了確保事務(wù)被隔離且不會(huì)影響到其他事務(wù)。要達(dá)到高級(jí)別的隔離需以犧牲性能為代價(jià)。并發(fā)控制可以用悲觀或者樂觀的機(jī)制來實(shí)現(xiàn)。大部分關(guān)系型數(shù)據(jù)庫都使用了悲觀機(jī)制來實(shí)現(xiàn)寫入優(yōu)化。悲觀機(jī)制采用了鎖,通過使用鎖它可以阻塞一些操作或者進(jìn)行某些形式的沖突檢測(cè)。當(dāng)一個(gè)表格,頁面或是行被修改后,悲觀機(jī)制中的鎖可以用來阻塞其他潛在的訪問修改資源的事務(wù)。然而,樂觀機(jī)制并不采用任何鎖,它僅僅依賴于沖突檢測(cè)來維護(hù)事務(wù)隔離。樂觀機(jī)制采用的沖突檢測(cè)可以允許所有的讀操作,并在事務(wù)結(jié)束時(shí)檢驗(yàn)其一致性。如果檢測(cè)到?jīng)_突,那么事務(wù)會(huì)進(jìn)行回滾或重做。大部分web服務(wù)器都是讀入優(yōu)化,因此使用了樂觀機(jī)制。通過允許所有的讀入操作,樂觀機(jī)制既可以保證很高的讀寫吞吐量,也可以在資源不是一直改變的情況下保證數(shù)據(jù)的一致性。

            下面列出的隔離級(jí)別是用來幫助Web開發(fā)人員更好的理解他們編程模型中放置的約束,幫助系統(tǒng)架構(gòu)師和開發(fā)人員共同討論如何在保持必要的數(shù)據(jù)完整性的同時(shí)選擇最有效的隔離級(jí)別。它們按照最少隔離(未提交讀)到最多隔離(串行化)的順序列出。

            1、未提交讀(Read Uncommitted)

            未提交讀隔離級(jí)別需要事務(wù)間很少的隔離。每一個(gè)讀操作都能看到事務(wù)中等待的寫操作(臟讀)。然而已經(jīng)提交的寫操作必須要有一個(gè)串行順序來防止臟寫。悲觀機(jī)制會(huì)阻塞有沖突的寫操作直到其他寫操作已經(jīng)被提交或已經(jīng)回滾。樂觀機(jī)制不會(huì)鎖住這些操作,它會(huì)允許所有的操作都通過。如果一個(gè)連接進(jìn)行了回滾,那么接下來修改同一塊數(shù)據(jù)的其他操作也會(huì)被回滾。在這種級(jí)別中,共享緩沖可以不加驗(yàn)證的進(jìn)行使用。這種隔離級(jí)別最好在不需要事務(wù)(比如只讀的數(shù)據(jù)集),或者事務(wù)只在獨(dú)占數(shù)據(jù)庫時(shí)才修改的情況下使用。

            例子:一個(gè)只在離線情況下更新的檔案數(shù)據(jù)庫,或者不在事務(wù)中使用的審核/登陸(audit/logging)表。

            2、已提交讀(Read Committed)

            已提交讀可以讀取系統(tǒng)中任何已經(jīng)提交的狀態(tài),并且可以不加驗(yàn)證(混合狀態(tài))的進(jìn)行緩沖,只需當(dāng)前連接中發(fā)生的改變能夠反映到結(jié)果中即可。悲觀機(jī)制將其實(shí)現(xiàn)為單調(diào)視圖。樂觀事務(wù)則隔離存儲(chǔ)所有的改動(dòng),使得它們直到提交后才可用。讀已提交使用一個(gè)非常樂觀的機(jī)制,它推遲寫入所有的變化直到事務(wù)被提交為止。這種形式的樂觀隔離可以在不阻塞讀操作的情況下實(shí)現(xiàn)復(fù)雜的寫入操作,并且它沒有驗(yàn)證模式。共享緩沖只能在已提交的狀態(tài)中使用。這種隔離級(jí)別最好在結(jié)果可以使用舊值,且事務(wù)只能用于寫入操作的情況下使用。

            例子:一個(gè)不必顯示當(dāng)前最新帖子的在線論壇,且它的帖子間數(shù)據(jù)不相沖突。

            3、單調(diào)視圖(Monotonic View )

            單調(diào)視圖是對(duì)讀已提交的一個(gè)擴(kuò)展,它其中的事務(wù)在執(zhí)行時(shí)會(huì)觀察數(shù)據(jù)庫中一個(gè)單調(diào)上升的狀態(tài)。在這種級(jí)別中,如果有明顯的寫入事務(wù),那么悲觀事務(wù)會(huì)在讀入操作中被阻塞。樂觀事務(wù)會(huì)像在讀已提交中一樣操作,隔離保存所有的改動(dòng),并且會(huì)驗(yàn)證它們的緩沖以確保其仍然合法。這種級(jí)別可以定期地同步數(shù)據(jù)庫副本,且最好在不需要事務(wù)或者僅存在寫操作事務(wù)的情況下使用。

            例子:一個(gè)僅能由一個(gè)人來修改的用戶偏好表。

            4、快照讀取(Snapshot Reads)

            快照讀取擴(kuò)展了單調(diào)視圖,它可以保證查詢結(jié)果都能反映到數(shù)據(jù)庫一致的快照中。悲觀機(jī)制會(huì)在讀操作時(shí)阻礙其他影響結(jié)果的寫入操作。樂觀機(jī)制則允許其他的寫入操作,并通知讀取事務(wù)某部分已經(jīng)發(fā)生改變并進(jìn)行回滾。想要實(shí)現(xiàn)一個(gè)樂觀機(jī)制,必須在讀操作結(jié)束之前驗(yàn)證是否有什么并行的寫入操作修改了結(jié)果,如果有的話,那么結(jié)果可能會(huì)重做或回滾。這個(gè)檢驗(yàn)過程可能只是簡單的檢查同一張表中是否出現(xiàn)了寫入操作,或者只是檢查改動(dòng)的查詢結(jié)果。樂觀隔離級(jí)別可以很輕松地檢測(cè)出沖突,并且在允許并發(fā)讀入操作的過程中,支持寫入操作。這種級(jí)別只要能夠讀取到快照,便可以定期地同步數(shù)據(jù)庫副本。最好在寫入操作很少,不想與讀入操作沖突,且查詢結(jié)果需要一致性的時(shí)候使用這種隔離級(jí)別。

            例子::一個(gè)查詢比修改頻繁,且只保留最新值的貨幣換位表或者查詢表。

            5、游標(biāo)穩(wěn)定性(Cursor Stability)

            游標(biāo)穩(wěn)定性隔離擴(kuò)展了讀已提交,并且是許多關(guān)系型數(shù)據(jù)默認(rèn)的隔離級(jí)別。在這種隔離級(jí)別中,悲觀事務(wù)如果在一個(gè)單獨(dú)的語句中執(zhí)行的話,必須得指定它將修改的記錄。這通常可以在"SELECT"查詢后附加“FOR UPDATE”關(guān)鍵字來實(shí)現(xiàn)。在這種情況下,其他沖突的讀寫悲觀事務(wù)都將被阻塞直到該事務(wù)結(jié)束為止。樂觀事務(wù)會(huì)跟蹤提交時(shí)被驗(yàn)證的所有修改記錄/實(shí)體的版本號(hào)。這是一種很流行的樂觀隔離級(jí)別,因此被所有的主流對(duì)象關(guān)系映射庫支持。在Java持久性API中,可以使用FLUSH_ON_COMMIT(盡管查詢可能不影響本地改動(dòng))來接近達(dá)到這種級(jí)別,且如果檢測(cè)到?jīng)_突的話,可以拋出OptimisticLockException 異常。這種隔離也同樣可以用在HTTP頭域的If-Match或者 If-Unmodified-Since中,它可以用來在更新前對(duì)比上一個(gè)資源的版本或者時(shí)間戳。這種級(jí)別最好在實(shí)體由外部信息(不從數(shù)據(jù)庫中讀取)更改,或者改動(dòng)不會(huì)彼此覆蓋的情況下使用。

            例子:一個(gè)共享的公司目錄或者一個(gè)wiki。

            6、可重復(fù)讀取(Repeatable Read)

            可重復(fù)讀取級(jí)別擴(kuò)展了游標(biāo)穩(wěn)定性,它保證事務(wù)內(nèi)的任何數(shù)據(jù)在事務(wù)過程中都不會(huì)被修改或者移除。悲觀事務(wù)需要讀取所有記錄上的鎖,并阻塞其他服務(wù)來修改這些記錄。樂觀事務(wù)則會(huì)跟蹤所有的記錄或者實(shí)體,并檢查它們是否在提交時(shí)被修改過。這種級(jí)別最好在實(shí)體狀態(tài)能夠影響其他實(shí)體,或者事務(wù)由讀寫操作構(gòu)成的情況下使用。

            例子:一個(gè)訂單跟蹤數(shù)據(jù)庫,它從一個(gè)實(shí)體中讀取值并用它來計(jì)算其他的實(shí)體值。

            7、快照隔離(Snapshot Isolation)

            快照隔離擴(kuò)展了快照讀取和可重復(fù)讀取,它保證事務(wù)中所有進(jìn)行的讀操作都能看到數(shù)據(jù)庫中一致的快照。事務(wù)執(zhí)行的的任何讀操作都會(huì)有相同的結(jié)果,而不管它們?cè)谑聞?wù)中執(zhí)行的早晚。這和可重復(fù)讀取不同,因?yàn)榭煺崭綦x能夠防止幻讀(查詢結(jié)果不斷變化)。許多關(guān)系型數(shù)據(jù)庫采用多版本并發(fā)控制(也可以叫做 SERIALIZABLE)來支持這種級(jí)別,實(shí)現(xiàn)方法是通過鎖和沖突檢測(cè)的組合。在這種級(jí)別中,考慮到它可能與悲觀機(jī)制或者樂觀機(jī)制相沖突,因此事務(wù)一定要做好回滾的準(zhǔn)備。悲觀機(jī)制會(huì)通過鎖住資源來嘗試減少?zèng)_突的機(jī)會(huì),但是必須在事務(wù)提交后將這些改動(dòng)合并。樂觀機(jī)制也會(huì)使用多版本并發(fā)控制,但是它不會(huì)阻塞其他可能產(chǎn)生潛在沖突操作的事務(wù),反而是將沖突的事務(wù)進(jìn)行回滾。這種級(jí)別的隔離最好在事務(wù)可以讀取和修改多個(gè)記錄的情況下使用。

            例子:一個(gè)基于系統(tǒng)狀態(tài)規(guī)則的工作流系統(tǒng)。

            8、可串行性(Serializability)

            串行性是快照隔離的擴(kuò)展,它要求所有的事務(wù)都必須一個(gè)接著一個(gè)的出現(xiàn),就好比它們被串行化過一樣。悲觀機(jī)制需要鎖住所有評(píng)估過的查詢,以防止寫入操作影響這些結(jié)果。而樂觀機(jī)制則跟蹤所有評(píng)估過的查詢,并在事務(wù)結(jié)束時(shí)使用一個(gè)后向驗(yàn)證或前向驗(yàn)證的模式來檢查是否有并行寫入操作影響了并行讀入操作,如果有的話,它會(huì)將沖突事務(wù)外的所有事務(wù)進(jìn)行回滾。在這種隔離級(jí)別中,任何提交事務(wù)都不會(huì)改變系統(tǒng)的表征狀態(tài)。最好在需要完整數(shù)據(jù)一致性的情況下使用這個(gè)級(jí)別的隔離。

            例子:一個(gè)進(jìn)行范圍查詢來計(jì)算新值的賬目系統(tǒng)。

            總結(jié)

            下面是本文提到的隔離級(jí)別的匯總表,它可以幫助你找到最適合你應(yīng)用程序的級(jí)別。

            事務(wù)在不同隔離級(jí)別中可能的沖突類型:

              臟寫 臟讀 混合狀態(tài) 不一致讀 覆寫 不可重復(fù) 幻讀 不一致性
            未提交讀 不可以 可以 可以 可以 可以 可以 可以 可以
            已提交讀 不可以 不可以 可以 可以 可以 可以 可以 可以
            單調(diào)視圖 不可以 不可以 不可以 可以 可以 可以 可以 可以
            快照讀取 不可以 不可以 不可以 不可以d 可以 可以 可以 可以
            游標(biāo)穩(wěn)定性 不可以 不可以 可以 可以 不可以 可以 可以 可以
            可重復(fù)讀取 不可以 不可以 可以 可以 不可以 不可以 可以 可以
            快照隔離 不可以 不可以 不可以 不可以 不可以 不可以 不可以 可以
            可串行性 不可以 不可以 不可以 不可以 不可以 不可以 不可以 不可以

            不同隔離級(jí)別的最佳前提:

              緩沖 數(shù)據(jù)同步 樂觀沖突模式 建議操作 例子
            未提交讀 允許緩沖 間歇的 檢測(cè)臟寫 不能并發(fā)讀寫 檔案
            已提交讀 允許緩沖 間歇的 沒有沖突檢測(cè) 單調(diào)的讀/寫 Web論壇
            單調(diào)視圖 必須被驗(yàn)證 周期的 沒有沖突檢測(cè) 組合讀入 用戶偏好
            快照讀取 必須被驗(yàn)證 周期的 對(duì)比讀入與修改內(nèi)容 一致性讀入 查詢表
            游標(biāo)穩(wěn)定性 允許緩沖 間歇的 對(duì)比修改的實(shí)體版本 CRUD服務(wù) 目錄
            可重復(fù)讀取 允許緩沖 間歇的 對(duì)比讀入的實(shí)體版本 讀/寫實(shí)體 訂單跟蹤
            快照隔離 必須被驗(yàn)證 周期的 對(duì)比讀入的實(shí)體版本 同步實(shí)體 工作流
            可串行性 必須被驗(yàn)證 完整同步 對(duì)比查詢與修改內(nèi)容 完善數(shù)據(jù)一致性 賬目

            數(shù)據(jù)一致性在數(shù)據(jù)庫應(yīng)用程序中至關(guān)重要-它允許開發(fā)者在分布式環(huán)境下使用數(shù)據(jù)。盡管強(qiáng)一致性級(jí)別如可串行性提供了一個(gè)簡單的編程模型,但是它們會(huì)導(dǎo)致開銷 過大,操作阻塞或者事務(wù)回滾,這對(duì)于很多應(yīng)用程序來說都是不必要的。如果有其他問題的話,可以使用更加適當(dāng)?shù)母綦x級(jí)別來幫助開發(fā)人員和系統(tǒng)架構(gòu)師,讓他們 在保持性能和開銷平衡的前提下更好的理解數(shù)據(jù)一致性的需求。

            查看英文原文:Eight Isolation Levels Every Web Developer Should Know

            狠狠色丁香婷综合久久| 国产成人无码精品久久久性色 | 青青青青久久精品国产h| 国产成人久久AV免费| 99久久伊人精品综合观看| 性高湖久久久久久久久AAAAA| 亚洲综合久久久| 日本一区精品久久久久影院| 国内精品伊人久久久久妇| 精品久久久久久久久午夜福利| 办公室久久精品| 精品久久久久久国产潘金莲| 亚洲美日韩Av中文字幕无码久久久妻妇 | 亚洲午夜福利精品久久| 久久精品亚洲日本波多野结衣| 久久九九久精品国产| 国产精品久久久久jk制服| 久久99热这里只频精品6| 国产高潮国产高潮久久久91 | 色综合久久最新中文字幕| 久久精品国产亚洲AV久| 久久国产精品一区| 精品国产91久久久久久久| 亚洲欧美日韩中文久久| 思思久久99热只有频精品66| 很黄很污的网站久久mimi色| 久久久中文字幕| 久久99亚洲网美利坚合众国| 国产69精品久久久久APP下载| 久久久久成人精品无码| 欧美777精品久久久久网| 久久99国产精品二区不卡| 久久99精品久久久久久动态图| 伊人久久综合无码成人网| 久久精品久久久久观看99水蜜桃| 婷婷久久综合九色综合绿巨人 | 日本欧美国产精品第一页久久| 中文字幕成人精品久久不卡| 国产精品成人久久久久三级午夜电影 | 久久国产成人| 久久精品国产第一区二区|