2013-10-14 49 views
2

我對事務的ACID屬性感到困惑。
根據我的理解:
交易必須必須符合ACID。 ACID確保一系列陳述確實是一項交易。到目前爲止確定。
現在有各種隔離級別(我忽略了READ-UNCOMMITED,因爲它是一個非事務性模式):READ-COMMITED,READ-REPEATABLE和SERIALIZABLE
每個級別都提供不同程度的隔離,在我理解也一致。
所以我不明白以下內容:
如果各種隔離級別提供不同級別的必備ACID屬性,它們如何可以是有效/可接受的隔離級別?
或者是什麼是一個事務的SQL定義,如此寬鬆/非正式/非嚴格的這些差異出現?我找不到任何SQL標準文檔來讀取並查看實際定義是什麼如果ACID屬性定義得很好,爲什麼我們有/接受不同的交易級別?

回答

0

ACID很好,ACID是可取的,ACID很棒。

但ACID是標準的。一個標準的存在並不會自動使所有的實現者都參與其中。

如果以任何方式提供ACID行爲,RDBMS就符合ACID標準。並非每個DMBS都符合ACID標準(直到最近,MySQL纔是)。

ACID是理想的世界。隔離級別是現實世界。

+0

如果它是一個標準的實施如何不同程度是可以接受的?它是一個鬆散的標準在哪裏?是這些定義? – Jim

+0

@Jim暫時忘記背景。如果說我的軟件支持標準ABC,是否意味着它只能按照標準ABC流程和定義運行? –

+0

但它應該堅持使用**定義的任何東西**必須至少正確嗎?與RFC相同我想 – Jim

0

爲什麼我們接受不同的交易等級?

理論上每個事務都應該孤立地執行(爲了實現I的ACID屬性),但實際上這並沒有多大意義。這關乎性能問題。高併發應用程序的數據庫無法以這種方式正確執行。

這個想法是實現隔離和性能之間的平衡。當隔離級別降低時(例如COMMITTED READ,通常是默認隔離級別),會出現一些問題:丟失更新,不可重複讀取,幻像讀取。通常這種風險是可以接受的,只有在某些交易中,它也可以被控制提高隔離水平。

0

我還發現ACID屬性令人困惑。在我看來,這些物業並沒有明確的定義。隔離屬性似乎已被添加爲描述從原子性屬性放鬆。對於「真實」事務(隔離級別SERIALIZABLE),只有ACD屬性​​值得關注。這三個屬性最初由Grey提出。

在我的博客上查看更多關於「ACID沒有意義」的信息。

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

+2

Atomicity與交易的所有*寫入*變成原子狀態可見或根本不可見。隔離與一個事務的*讀*無關,看不到*其他*事務的寫入,*即使那些其他事務已經提交了*。可序列化的事務必須表現出與一次一次執行一致的行爲。交易很可能以原子方式提交併且仍然違反該交易。在嚴格的兩相鎖定(S2PL)的狹義情況下,您可能是正確的,ACID中的隔離是多餘的,但是如果您查看其他技術,則可能不正確。 – kgrittn

相關問題