在數據庫工程中放棄基於BASE的ACID

關係數據庫的核心設計具有可靠性和一致性。 開發他們的工程師專注於交易模型,以確保始終保留ACID模型的四個原則。 然而,一個新的非結構化數據庫模型的出現正在使ACID頭朝上。 NoSQL數據庫模型避開了高度結構化的關係模型,轉而採用靈活的鍵/值存儲方法。 這種非結構化的數據方法需要ACID模型的替代方案:BASE模型。

ACID模型的基本原理

ACID模型有四條基本原則:

事務的原子性確保每個數據庫事務都是一個採用“全部或全部”方法執行的單個單元。 如果事務中的任何語句失敗,則整個事務將回滾。

關係數據庫還確保每個事務與數據庫業務規則的一致性 。 如果原子事務的任何元素會破壞數據庫的一致性,則整個事務將失敗。

數據庫引擎強制在同一時間或幾乎同時發生的多個事務之間進行隔離 。 每筆交易發生在每一筆交易之前或之後,並且交易在開始時看到的數據庫視圖僅在交易結束之前由交易本身改變。 任何交易都不應該看到另一筆交易的中間產品。

最終的ACID原則( 持久性 )確保了一旦將事務提交給數據庫,它將通過使用備份和事務日誌而永久保留。 如果發生故障,這些機制可能會用於恢復已提交的交易。

BASE的核心原則

另一方面,NoSQL數據庫包含了ACID模型過度或者實際上會阻礙數據庫操作的情況。 相反,NoSQL依賴於已知的適當的軟模型作為BASE模型。 該模型適應NoSQL提供的靈活性以及類似的非結構化數據管理和管理方法。 BASE由三個原則組成:

基本可用性 。 NoSQL數據庫方法的重點在於即使在出現多個故障時數據的可用性。 它通過使用高度分佈式的數據庫管理方法來實現這一點。 NoSQL數據庫並不是維護一個大型數據存儲並關注該存儲的容錯,而是通過高度複製將數據傳播到多個存儲系統。 萬一發生故障會中斷對一段數據的訪問,這不一定會導致數據庫完全中斷。

軟狀態 。 BASE數據庫幾乎完全放棄了ACID模型的一致性要求。 BASE背後的基本概念之一是數據一致性是開發人員的問題,不應該由數據庫處理。

最終一致性 。 NoSQL數據庫關於一致性的唯一要求是要求在將來的某個時間點,數據將會收斂到一致的狀態。 但是,沒有保證,但是,這將發生什麼時候。 這完全背離了ACID的直接一致性要求,該要求禁止在事務完成之前執行事務並且數據庫已經趨​​於一致狀態。

BASE模型並不適合所有情況,但對於不需要嚴格遵守關係模型的數據庫而言,它肯定是ACID模型的靈活替代方案。