我正在審閱有關交易的ACID屬性,並在不同的站點上遇到以下聲明 ACID是由交易保證的四個屬性的縮寫:原子性,一致性,隔離性和持久性。責任在哪裏確保交易的ACID屬性?
**我的問題具體是關於這個短語。
通過交易
保證**。根據我的經驗,這些屬性不被 交易自動處理。但作爲一名Java開發人員,我們需要確保滿足這些屬性標準。
讓我們通過爲每個屬性: -
原子性: - 當我們創建的賬戶應創建過,因爲它是強制性的客戶假定。因此,現在在交易 期間,客戶在賬戶創建期間被創建一些例外。因此,開發人員現在可以採用兩種方法:或者回滾完成交易(在這種情況下滿足原子性),或者他提交交易,以便創建客戶,但不是 帳戶(違反原子性)。所以開發人員應負責任嗎?
一致性: - 相同的原因一致性持有有效的太
隔離: - 按定義隔離,使得不從另一個進程或交易干預交易執行。
但是,當我們將隔離級別設置爲Serializable時,就可以實現這一點。在另一種情況下,其他情況如讀取已提交或未讀取 更改對其他交易可見。那麼開發人員的責任在於使它與Serializable真正隔離?持久性: - 如果我們提交事務,那麼即使應用程序崩潰,也應該在應用程序重新啓動時提交。不確定是否需要開發人員或數據庫供應商/交易處理?
因此根據我的理解,這些ACID屬性不能自動保證;而是我們作爲開發者應該實現它們。如果以上關於每一點的理解是正確的,請讓我知道 ?希望如果你們這些人可以爲每個點回復(是/否也會做。
按我的理解提交讀應該是大多數應用最合乎邏輯的隔離級別,但是其依賴於需求了。
或多或少的所有答案都假定交易完全由數據庫實現。這是不正確的。事務是一個通用的概念,可以由許多不同的軟件基礎架構組件實現:中級應用程序服務器,事務監視器,消息傳遞系統,對象請求代理等等。 – steve
隔離級別是非常特定於數據庫的。例如,Oracle不提供讀未提交隔離級別。無論如何,讀提交是oracle的默認隔離級別。 – steve
這個問題值得讚賞 – vigamage