我對事務的ACID屬性感到困惑。
根據我的理解:
交易必須必須符合ACID。 ACID確保一系列陳述確實是一項交易。到目前爲止確定。
現在有各種隔離級別(我忽略了READ-UNCOMMITED,因爲它是一個非事務性模式):READ-COMMITED,READ-REPEATABLE和SERIALIZABLE
每個級別都提供不同程度的隔離,在我理解也一致。
所以我不明白以下內容:
如果各種隔離級別提供不同級別的必備ACID屬性,它們如何可以是有效/可接受的隔離級別?
或者是什麼是一個事務的SQL定義,如此寬鬆/非正式/非嚴格的這些差異出現?我找不到任何SQL標準文檔來讀取並查看實際定義是什麼如果ACID屬性定義得很好,爲什麼我們有/接受不同的交易級別?
回答
ACID很好,ACID是可取的,ACID很棒。
但ACID是標準的。一個標準的存在並不會自動使所有的實現者都參與其中。
如果以任何方式提供ACID行爲,RDBMS就符合ACID標準。並非每個DMBS都符合ACID標準(直到最近,MySQL纔是)。
ACID是理想的世界。隔離級別是現實世界。
爲什麼我們接受不同的交易等級?
理論上每個事務都應該孤立地執行(爲了實現I的ACID屬性),但實際上這並沒有多大意義。這關乎性能問題。高併發應用程序的數據庫無法以這種方式正確執行。
這個想法是實現隔離和性能之間的平衡。當隔離級別降低時(例如COMMITTED READ,通常是默認隔離級別),會出現一些問題:丟失更新,不可重複讀取,幻像讀取。通常這種風險是可以接受的,只有在某些交易中,它也可以被控制提高隔離水平。
我還發現ACID屬性令人困惑。在我看來,這些物業並沒有明確的定義。隔離屬性似乎已被添加爲描述從原子性屬性放鬆。對於「真實」事務(隔離級別SERIALIZABLE),只有ACD屬性值得關注。這三個屬性最初由Grey提出。
在我的博客上查看更多關於「ACID沒有意義」的信息。
http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html
Atomicity與交易的所有*寫入*變成原子狀態可見或根本不可見。隔離與一個事務的*讀*無關,看不到*其他*事務的寫入,*即使那些其他事務已經提交了*。可序列化的事務必須表現出與一次一次執行一致的行爲。交易很可能以原子方式提交併且仍然違反該交易。在嚴格的兩相鎖定(S2PL)的狹義情況下,您可能是正確的,ACID中的隔離是多餘的,但是如果您查看其他技術,則可能不正確。 – kgrittn
- 1. ACID和非ACID SQL有什麼不同?
- 2. 我很好奇,爲什麼這些結果是不同的
- 3. 如果有屬性,爲什麼我們需要字段?
- 4. 在django交易中如何提供ACID屬性?
- 5. 如果我們在web api中指定Frombody和FromUri屬性,我們會得到什麼好處?
- 6. 爲什麼我的ListView不接受我的自定義OnItemSelectedListener?
- 7. 責任在哪裏確保交易的ACID屬性?
- 8. 爲什麼我的交易不會升級到DTC?
- 9. jqgrid:爲什麼我會接受「eData」而不是id屬性值?
- 10. 學習ACID兼容交易
- 11. 我的班級和我們班級的perl6有什麼區別?
- 12. 爲什麼我的程序不接受自定義異常?
- 13. 在爲不同API級別定義的相同主題之間共享屬性
- 14. 如果客戶死亡,我們應該預期什麼樣的交易行爲?
- 15. 如果接口中的屬性不受支持,爲什麼要編譯?
- 16. 什麼是「輕量級交易」,爲什麼他們這麼稱呼?
- 17. 如果siftDown比siftUp更好,爲什麼我們擁有它?
- 18. 爲什麼JIT如果我們有NGEN
- 19. 定義什麼Sortable接受?
- 20. 交易中部分受委託和受委託國之間有什麼區別?
- 21. 爲什麼我們設置屬性Hibernate.Dialect?
- 22. 保持說結果屬性沒有定義。爲什麼?
- 23. 我在ideone中獲得了很好的結果,但是SPOJ不接受我的解決方案。鏈接如下
- 24. 使用不受支持的WebKit屬性有什麼含義?
- 25. 爲什麼INT64_MIN有不同的定義?爲什麼他們的行爲有所不同?
- 26. 爲什麼貸款未定義時,類型(自我)工作得很好?
- 27. 爲什麼我的班級不可接受
- 28. 如何識別交易中相同或不同的PetaPoco連接?
- 29. 爲什麼XAML中的TextBlock.Foreground屬性不接受Color?
- 30. 如何設置我所有鐵路交易的隔離級別
如果它是一個標準的實施如何不同程度是可以接受的?它是一個鬆散的標準在哪裏?是這些定義? – Jim
@Jim暫時忘記背景。如果說我的軟件支持標準ABC,是否意味着它只能按照標準ABC流程和定義運行? –
但它應該堅持使用**定義的任何東西**必須至少正確嗎?與RFC相同我想 – Jim