10分鐘瞭解NoSQL

一、簡介

NoSQL全稱爲Not Only SQL,譯爲“不僅僅是SQL”。是對不同於傳統的關係型數據庫的數據庫管理系統的統稱。

NoSQL主要用於龐大的數據存儲,一般情況下這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。

優點

  • 高可擴展性
  • 分佈式計算
  • 低成本
  • 架構的靈活性,半結構化數據
  • 沒有複雜的關係

缺點

  • 沒有標準化
  • 有限的查詢功能(到目前爲止)
  • 最終一致是不直觀的程序

二、RDBMS對比NoSQL

RDBMS全稱爲Relational Database Management System,譯爲“關係數據庫管理系統”。關係型數據庫遵循的是ACID的原則,關於事務的ACID的特性,就不多於介紹。

RDBMS

  • 高度組織化結構化數據
  • 結構化查詢語言(SQL) (SQL)
  • 數據和關係都存儲在單獨的表中。
  • 數據操縱語言,數據定義語言
  • 嚴格的一致性
  • 基礎事務

NoSQL

  • 代表着不僅僅是SQL
  • 沒有聲明性查詢語言
  • 沒有預定義的模式
  • 鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
  • 最終一致性,而非ACID屬性
  • 非結構化和不可預知的數據
  • CAP定理
  • 高性能,高可用性和可伸縮性

三、分佈式

分佈式系統(distributed system)由多臺計算機和通信的軟件組件通過計算機網絡連接(本地網絡或廣域網)組成,是建立在網絡之上的軟件系統。具有高度的內聚性和透明性。

優點

  • 可靠性(容錯):一臺服務器的系統崩潰並不影響到其餘的服務器。

  • 可擴展性:可以根據需要增加更多的機器。

  • 資源共享:共享數據是必不可少的應用,如銀行,預訂系統。

  • 靈活性:它很容易安裝,實施和調試新的服務。

  • 更快的速度:可以有多臺計算機的計算能力,使得它比其他系統有更快的處理速度。

  • 開放系統:本地或者遠程都可以訪問到該服務。

  • 更高的性能:相較於集中式計算機網絡集羣可以提供更高的性能(及更好的性價比)。

缺點

  • 故障排除:故障排除和診斷問題。

  • 軟件:更少的軟件支持是分佈式計算系統的主要缺點。

  • 網絡:網絡基礎設施的問題,包括:傳輸問題,高負載,信息丟失等。

  • 安全性:開放系統的特性讓分佈式計算系統存在着數據的安全性和共享的風險等問題。

四、CAP定理和BASE

CAP定理, 又被稱作“布魯爾定理”, 它指出對於一個分佈式計算系統來說,不可能同時滿足以下三點:

  • 一致性(Consistency) (所有節點在同一時間具有相同的數據)
  • 可用性(Availability) (保證每個請求不管成功或者失敗都有響應)
  • 分隔容忍(Partition tolerance) (系統中任意信息的丟失或失敗不會影響系統的繼續運作)

CAP理論的核心是:一個分佈式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的滿足兩個。

因此,根據 CAP 原理將 NoSQL 數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:

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

BASE:Basically Available, Soft-state, Eventually Consistent。
指的是NoSQL數據庫通常對可用性及一致性的弱要求原則:

  • Basically Availble --基本可用
  • Soft-state --軟狀態/柔性事務。 “Soft state” 可以理解爲"無連接"的, 而 “Hard state” 是"面向連接"的
  • Eventual Consistency – 最終一致性, 也是是 ACID 的最終目的。

五、NoSQL數據庫分類

  1. 列存儲 (Hbase、Cassandra、Hypertable)
    顧名思義,是按列存儲數據的。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。

  2. 文檔存儲(MongoDB、CouchDB)
    文檔存儲一般用類似json的格式存儲,存儲的內容是文檔型的。這樣也就有機會對某些字段建立索引,實現關係數據庫的某些功能。

  3. key-value存儲(Redis、Tokyo Cabinet / Tyrant
    、Berkeley DB、MemcacheDB)
    可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能)

  4. 圖存儲(Neo4J、FlockDB)
    圖形關係的最佳存儲。使用傳統關係數據庫來解決的話性能低下,而且設計使用不方便。

  5. 對象存儲(db4o、Versant)
    通過類似面嚮對象語言的語法操作數據庫,通過對象的方式存取數據。

  6. xml數據庫(Berkeley DB XML、BaseX)
    高效的存儲XML數據,並支持XML的內部查詢語法,比如XQuery,Xpath。

參照連接: https://www.runoob.com/mongodb/nosql.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章