操作資料庫時,在資料處理的環節正確使用交易可以節省我們很多心力,但為了達到 ACID 同樣需要付出成本。NoSQL Database 選擇有策略的犧牲部分一致性以滿足高可用性和高可擴展性的需求,相較於 ACID,NoSQL Database 則具有 BASE 的特性。
技術持續發展至今,部分 NoSQL Database 已經提供交易的功能了,不過建議使用前確認一下該資料庫使用交易的成本和效果是否符合你的預期。
如果你以為 BASE 跟 ACID 一樣是四個特性的縮寫,那你就錯了,BASE 其實是 Basically Availible、Soft State 和 Eventually Consistent,感覺有點為了對應酸 (ACID) 所以想辦法兜出鹼 (BASE) 方便記憶。
意思就是不保證「完整的」可用性,但基本上可以維持可用。由於 NoSQL Database 可以水平擴展,因此當其中一個節點有狀況無法回應請求時,其餘的節點仍可正常運行。例如今天有5個節點,若其中2號節點網路有問題無法連線,至少另外4個節點仍然可以正常處理請求。
相較於馬上同步且一定維持一致性的硬狀態,軟狀態表示資料庫會有暫時性的不一致,也就是目前取到的狀態有可能會因為時間而產生變化。
不保證現在立刻馬上維持一致,但保證資料庫最終會達到一致。像是在臉書動態牆上可能看到沒那麼即時的按讚數,但一段時間後重新查看就可以拿到正確的數字。