Nosql

關係數據庫中的不一致

  • May 1, 2021

當使用術語一致性時,我通常會感到困惑。NoSQL 教程總是指讀取,而關係教程指的是一致狀態(確保引用完整性約束)

當數據分佈在多個伺服器上時(例如 1 主 - n 從配置)

  1. 關係數據庫是否確保讀取的一致性?我的意思是送出的寫入可以立即被其他事務讀取?我懷疑沒有給定網路,使關係數據庫成為最終一致的數據庫。
  2. 關係數據庫是否能很好地確保參照完整性約束?

直接回答您的問題:

  1. 關係數據庫是否確保讀取的一致性?

A:簡而言之,當定義ACID 主體,特別是一致性部分時,早在分佈式數據成為關係數據庫的概念之前。所以從這個角度來看,一致性是自動的,因為只有一個伺服器在執行。一旦送出了事務,伺服器立即與自身保持一致,關於該事務和與之相關的所有約束,沒有其他伺服器可以同步和送出。(請注意,這僅集中在ACID 主體中的****一致性含義的一部分,以與 OP 關於分佈式數據的問題的相關性。)

現在有許多符合 ACID 的關係數據庫系統,旨在處理跨多個伺服器的分佈式數據。但是,讓我們暫時以 Microsoft SQL Server 及其AlwaysOn 可用性組功能為例。此功能旨在通過將數據從主伺服器同步到其他輔助伺服器來實現高可用性/災難恢復功能。它也符合 ACID,因為它可以配置為確保跨伺服器的一致性(當設置為****同步時模式)。關於它如何工作的一個非常基本的解釋是,只有在事務從主伺服器同步到所有輔助伺服器後,它才會完全送出事務。這保證了所有伺服器在任何時候的一致性,並允許它在分佈式伺服器環境中保持ACID 兼容。

  1. 關係型數據庫能很好地保證參照完整性約束嗎?

答:實際上並沒有一種方法可以量化地回答這個問題,但一般來說,是的。參照完整性是使用****關係數據庫的要點之一。當有一個關係定義良好的模式,並定義了適當的約束(例如外鍵)時,關係數據庫可以保證始終強制執行這些約束的規則,以確保它始終強制執行適當的引用完整性。這與一致性的定義以及****關係數據庫如何與ACID兼容有關。

引用自:https://dba.stackexchange.com/questions/290803