關係型數據庫vs非關係型數據庫

關係型數據庫

關係型數據庫(Relational database),是指採用了關係模型來組織數據的數據庫,其以行和列的形式存儲數據,以便於用戶理解,關係型數據庫這一系列的行和列被稱爲表,一組表組成了數據庫。用戶通過查詢來檢索數據庫中的數據,而查詢是一個用於限定數據庫中某些區域的執行代碼。關係模型可以簡單理解爲二維表格模型,而一個關係型數據庫就是由二維表及其之間的關係組成的一個數據組織。

非關係型數據庫

非關係型數據庫(NoSQL),有時也被稱爲Not Only SQL的縮寫,是對不同於傳統的關係型數據庫的數據庫管理系統的統稱。NoSQL用於超大規模數據的存儲。這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。

NoSQL的優缺點

優點 缺點
高可拓展性 沒有標準化
分佈式計算 有限的查詢功能(到目前爲止)
低成本 最終一致是不直觀的程序
架構的靈活性,半結構化數據
沒有複雜的關係

常見NoSQL數據庫

類型 代表 特點
列存儲 Hbase、Cassandra、Hypertable 按列存儲數據。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。
文檔存儲 MongoDB、CouchDB 文檔存儲一般用類似json的格式存儲,存儲的內容是文檔型的。這樣也就有機會對某些字段建立索引,實現關係數據庫的某些功能。
鍵值對存儲 Tokyo Cabinet/Tyrant、Berkeley DB、MemcacheDB、Redis 可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能)
圖存儲 Neo4J、FlockDB 圖形關係的最佳存儲。使用傳統關係數據庫來解決的話性能低下,而且設計使用不方便。
對象存儲 db4o、Versant 通過類似面嚮對象語言的語法操作數據庫,通過對象的方式存取數據。
xml數據庫 Berkeley DB XML、BaseX 高效的存儲XML數據,並支持XML的內部查詢語法,比如XQuery,Xpath。

ACID原則

事務(Transaction)是由一系列對系統中數據進行訪問與更新的操作所組成的一個程序執行邏輯單元,狹義上的事務特指數據庫事務。一方面,事務爲多個應用程序併發訪問數據庫提供一個隔離方法,防止彼此的操作互相干擾。另一方面,事務爲數據庫操作序列提供了一個從失敗中恢復到正常狀態的方法,同時提供了數據庫即使在異常狀態下仍能保持數據一致性的辦法關係型數據庫遵循ACID原則,它有如下四個特性:

  • A (Atomicity) 原子性
    原子性很容易理解,也就是說事務裏的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裏的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。
    比如銀行轉賬,從A賬戶轉100元至B賬戶,分爲兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要麼一起完成,要麼一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。

  • C (Consistency) 一致性
    一致性也比較容易理解,也就是說數據庫要一直處於一致的狀態,事務的運行不會改變數據庫原本的一致性約束。
    例如現有完整性約束a+b=10,如果一個事務改變了a,那麼必須得改變b,使得事務結束後依然滿足a+b=10,否則事務失敗。

  • I (Isolation) 獨立性
    所謂的獨立性是指併發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。
    比如現在有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。

  • D (Durability) 持久性
    持久性是指一旦事務提交後,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。

在標準的SQL規範中,定義了4個事務隔離級別:

  • 讀未提交(Read Uncommited):允許讀取到其他事務未提交的數據,其事務隔離級別最低。
  • 讀已提交(Read Commited):允許讀取到其他事務已提交的數據。
  • 可重複讀(Repeatable Read):事務處理過程中,多次讀取同一個數據,其值都和事務開始時刻是一致的。
  • 串行化(Serializable):最嚴格的事務隔離級別,要求所有事務被串行執行,即事務只能按順序一個接一個地處理,不能併發執行。

CAP定理

在計算機科學中, CAP定理(CAP theorem), 又被稱作布魯爾定理(Brewer’s theorem), 它指出對於一個分佈式計算系統來說,不可能同時滿足以下三點:

  • 一致性(Consistency) :所有節點在同一時間具有相同的數據。
  • 可用性(Availability) :指系統提供的服務必須一直處於可用的狀態,每一個操作請求總是能夠在指定時間(即響應時間)內返回結果,不管成功或者失敗。
  • 分區容錯(Partition tolerance) :分佈式系統在遇到任何網絡分區故障的時候,仍然需要能夠保證繼續運作,除非是整個網絡環境都發送了故障。

CAP理論的核心是:一個分佈式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的滿足兩個。因此,根據 CAP 原理將 NoSQL 數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:

  • CA - 單點集羣,滿足一致性,可用性的系統,通常在可擴展性上不太強大。
  • CP - 滿足一致性,分區容忍性的系統,通常性能不是特別高。
  • AP - 滿足可用性,分區容忍性的系統,通常可能對一致性要求低一些。

BASE三要素

BASE是NoSQL數據庫通常對可用性及一致性的弱要求原則:

  • 基本可用(Basically Availble) :指分佈式系統在出現不可預知故障時,允許損失部分可用性。不等價於系統不可用。
  • 軟狀態/弱狀態(Soft-state) :指允許系統中數據存在中間狀態,並認爲該中間狀態的存在不影響系統的整體可用性。即允許系統在不同節點的數據副本之間進行數據同步的過程中存在延時。
  • 最終一致性(Eventual Consistency):強調系統中所有數據副本,在經過一段時間的同步後,最終能夠達到一個一致的狀態。並不需要實時保證系統數據的強一致性。

強一致性:各節點數據保持實時的一致性,和全局時鐘下的順序一致。
順序一致性:各節點數據保持實時的一致性,不需要和全局時鐘下的順序一致,錯的話一起錯,對的話一起對。
最終一致性:允許各節點數據有一段時間延遲,最終保持一致。
弱一致性:即使過了一段時間延遲,也不保證一致。

RDBMS vs NoSQL

RDBMS NoSQL
高度組織結構化數據 非結構化和不可預知的數據
結構化查詢語言SQL 沒有聲明性查詢語言,不僅僅是SQL
數據和關係都存儲在單獨的表 鍵值對存儲,列存儲,文檔存儲,圖形數據庫
數據操作語言,數據定義語言 沒有預定義的模式
強一致性 最終一致性
ACID原則 CAP定理
- 高性能,高可用性和可伸縮性

參考地址:https://www.runoob.com/mongodb/nosql.html

發佈了59 篇原創文章 · 獲贊 41 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章