NoSQL 簡介

NoSQL 簡介

NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"。

在現代的計算系統上每天網路上都會產生龐大的資料量。

這些資料有很大一部分是由關係資料庫管理系統(RDBMS)來處理。 1970年 E.F.Codd's提出的關係模型的論文 "A relational model of data for large shared data banks",這使得資料建模和應用程式程式設計更加簡單。

通過應用實踐證明,關係模型是非常適合於客戶伺服器程式設計,遠遠超出預期的利益,今天它是結構化資料儲存在網路和商務應用的主導技術。

NoSQL 是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關係型的資料儲存,相對於鋪天蓋地的關係型資料庫運用,這一概念無疑是一種全新的思維的注入。

關係型資料庫遵循ACID規則

事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:

1、A (Atomicity) 原子性

原子性很容易理解,也就是說事務裡的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裡的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。

比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要麼一起完成,要麼一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。

2、C (Consistency) 一致性

一致性也比較容易理解,也就是說資料庫要一直處於一致的狀態,事務的執行不會改變資料庫原本的一致性約束。

例如現有完整性約束a+b=10,如果一個事務改變了a,那麼必須得改變b,使得事務結束後依然滿足a+b=10,否則事務失敗。

3、I (Isolation) 獨立性

所謂的獨立性是指併發的事務之間不會互相影響,如果一個事務要訪問的資料正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的資料就不受未提交事務的影響。

比如現在有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。

4、D (Durability) 永續性

永續性是指一旦事務提交後,它所做的修改將會永久的儲存在資料庫上,即使出現宕機也不會丟失。


分散式系統

分散式系統(distributed system)由多臺計算機和通訊的軟體元件通過計算機網路連線(本地網路或廣域網)組成。

分散式系統是建立在網路之上的軟體系統。正是因為軟體的特性,所以分散式系統具有高度的內聚性和透明性。

因此,網路和分散式系統之間的區別更多的在於高層軟體(特別是作業系統),而不是硬體。

分散式系統可以應用在不同的平臺上如:Pc、工作站、區域網和廣域網上等。


分散式計算的優點

可靠性(容錯) :

分散式計算系統中的一個重要的優點是可靠性。一臺伺服器的系統崩潰並不影響到其餘的伺服器。

可擴充套件性:

在分散式計算系統可以根據需要增加更多的機器。

資源共享:

共享資料是必不可少的應用,如銀行,預訂系統。

靈活性:

由於該系統是非常靈活的,它很容易安裝,實施和除錯新的服務。

更快的速度:

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

開放系統:

由於它是開放的系統,本地或者遠端都可以訪問到該服務。

更高的效能:

相較於集中式計算機網路叢集可以提供更高的效能(及更好的價效比)。


分散式計算的缺點

故障排除:

故障排除和診斷問題。

軟體:

更少的軟體支援是分散式計算系統的主要缺點。

網路:

網路基礎設施的問題,包括:傳輸問題,高負載,資訊丟失等。

安全性:

開放系統的特性讓分散式計算系統存在著資料的安全性和共享的風險等問題。


什麼是NoSQL?

NoSQL,指的是非關係型的資料庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型資料庫的資料庫管理系統的統稱。

NoSQL用於超大規模資料的儲存。(例如谷歌或Facebook每天為他們的使用者收集萬億位元的資料)。這些型別的資料儲存不需要固定的模式,無需多餘操作就可以橫向擴充套件。

為什麼使用NoSQL ?

今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取資料。使用者的個人資訊,社交網路,地理位置,使用者生成的資料和使用者操作日誌已經成倍的增加。我們如果要對這些使用者資料進行挖掘,那SQL資料庫已經不適合這些應用了, NoSQL 資料庫的發展卻能很好的處理這些大的資料。


例項

社會化關係網:

Each record: UserID1, UserID2
Separate records: UserID, first_name,last_name, age, gender,...
Task: Find all friends of friends of friends of ... friends of a given user.

Wikipedia 頁面 :

Large collection of documents
Combination of structured and unstructured data
Task: Retrieve all pages regarding athletics of Summer Olympic before 1950.

RDBMS vs NoSQL

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

NoSQL
- 代表著不僅僅是SQL
- 沒有宣告性查詢語言
- 沒有預定義的模式
-鍵 - 值對儲存,列儲存,文件儲存,圖形資料庫
- 最終一致性,而非ACID屬性
- 非結構化和不可預知的資料
- CAP定理
- 高效能,高可用性和可伸縮性


NoSQL 簡史

NoSQL一詞最早出現於1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關係資料庫。

2009年,Last.fm的Johan Oskarsson發起了一次關於分散式開源資料庫的討論[2],來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時的NoSQL主要指非關係型、分散式、不提供ACID的資料庫設計模式。

2009年在亞特蘭大舉行的"no:sql(east)"討論會是一個里程碑,其口號是"select fun, profit from real_world where relational=false;"。因此,對NoSQL最普遍的解釋是"非關聯型的",強調Key-Value Stores和文件資料庫的優點,而不是單純的反對RDBMS。


CAP定理(CAP theorem)

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

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

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

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

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


NoSQL的優點/缺點

優點:

  • - 高可擴充套件性
  • - 分散式計算
  • - 低成本
  • - 架構的靈活性,半結構化資料
  • - 沒有複雜的關係

缺點:

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

BASE

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定義。

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

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

  • Basically Available --基本可用
  • Soft-state --軟狀態/柔性事務。 "Soft state" 可以理解為"無連線"的, 而 "Hard state" 是"面向連線"的
  • Eventually Consistency -- 最終一致性, 也是 ACID 的最終目的。

ACID vs BASE

ACID BASE
原子性(Atomicity) 基本可用(Basically Available)
一致性(Consistency) 軟狀態/柔性事務(Soft state)
隔離性(Isolation) 最終一致性 (Eventual consistency)
永續性 (Durable)  

NoSQL 資料庫分類

型別 部分代表

特點
列儲存

Hbase

Cassandra

Hypertable

顧名思義,是按列儲存資料的。最大的特點是方便儲存結構化和半結構化資料,方便做資料壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。

文件儲存

MongoDB

CouchDB

文件儲存一般用類似json的格式儲存,儲存的內容是文件型的。這樣也就有機會對某些欄位建立索引,實現關係資料庫的某些功能。

key-value儲存

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通過key快速查詢到其value。一般來說,儲存不管value的格式,照單全收。(Redis包含了其他功能)

圖儲存

Neo4J

FlockDB

圖形關係的最佳儲存。使用傳統關係資料庫來解決的話效能低下,而且設計使用不方便。

物件儲存

db4o

Versant

通過類似面嚮物件語言的語法操作資料庫,通過物件的方式存取資料。

xml資料庫

Berkeley DB XML

BaseX

高效的儲存XML資料,並支援XML的內部查詢語法,比如XQuery,Xpath。


誰在使用

現在已經有很多公司使用了 NoSQL:
  • Google
  • Facebook
  • Mozilla
  • Adobe
  • Foursquare
  • LinkedIn
  • Digg
  • McGraw-Hill Education
  • Vermont Public Radio