NoSQL ( NoSQL = Not Only SQL ),意即”不僅僅是SQL”
在現代的計算系統上每天網絡上都會産生龐大的資料量
這些資料有很大一部分是由關系資料庫管理系統(RDMBSs)來處理
1970年 E.F.Codd’s提出的關系模型的論文 “A relational model of data for large shared data banks”,這使得資料模組化和應用程式程式設計更加簡單
通過應用實踐證明,關系模型是非常适合于客戶伺服器程式設計,遠遠超出預期的利益,今天它是結構化資料存儲在網絡和商務應用的主導技術。
NoSQL 是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關系型的資料存儲,相對于鋪天蓋地的關系型資料庫運用,這一概念無疑是一種全新的思維的注入。
關系型資料庫遵循 ACID 規則
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、工作站、區域網路和廣域網上等
分布式計算的優點
可靠性(容錯) :
分布式計算系統中的一個重要的優點是可靠性
一台伺服器的系統崩潰并不影響到其餘的伺服器
可擴充性:
在分布式計算系統可以根據需要增加更多的機器
資源共享:
共享資料是必不可少的應用,如銀行,預訂系統
靈活性:
由于該系統是非常靈活的,它很容易安裝,實施和調試新的服務
更快的速度:
分布式計算系統可以有多台計算機的計算能力,比其它系統有更快的處理速度
開放系統:
由于它是開放的系統,本地或者遠端都可以通路到該服務。
更高的性能:
相較于集中式計算機網絡叢集可以提供更高的性能,以及更好的成本效益
分布式計算的缺點
1、 故障排除 :故障排除和診斷問題
2、 軟體:更少的軟體支援是分布式計算系統的主要缺點
3、 網絡 :網絡基礎設施的問題,包括:傳輸問題,高負載,資訊丢失等。
4、 安全性 :開放的系統使得分布式計算存在着資料的安全性和共享的風險等問題
什麼是 NoSQL?
NoSQL 指的是 非關系型的資料庫
NoSQL 是 Not Only SQL 的縮寫,是對不同于傳統的關系型資料庫的資料庫管理系統的統稱
NoSQL 用于超大規模資料的存儲,谷歌和 Facebook 就使用 NoSQL 存儲它們收集的上萬億比特的使用者收集的資料,這些類型的資料存儲不需要固定的模式,無需多餘操作就可以橫向擴充
為什麼使用 NoSQL ?
随着使用者的個人資訊,社交網絡,地理位置,使用者生成的資料和使用者記錄檔已經成倍的增加
如果要對這些使用者資料進行挖掘,那 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 documentsCombination of structured and unstructured dataTask: Retrieve all pages regarding athletics of Summer Olympic before 1950.
RDBMS vs NoSQL
RDBMS
1、 高度組織化結構化資料
2、 結構化查詢語言 ( SQL )
3、 資料和關系都存儲在單獨的表中
4、 資料操縱語言,資料定義語言
5、 嚴格的一緻性
6、 基礎事務
NoSQL
1、 代表着不僅僅是 SQL
2、 沒有聲明性查詢語言
3、 沒有預定義的模式 : 鍵/值對存儲,列存儲,文檔存儲,圖形資料庫
4、 最終一緻性,而非 ACID 屬性
5、 非結構化和不可預知的資料
6、 CAP定理
7、 高性能,高可用性和可伸縮性
NoSQL 簡史
NoSQL 一詞最早出現于 Carlo Strozzi 開發的一個輕量、開源、不提供 SQL 功能的關系資料庫
2009 年,Last.fm 的 Johan Oskarsson 發起了一次關于分布式開源資料庫的讨論
來自 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 定理(CAP theorem ), 又被稱作 布魯爾定理 ( Brewer’s theorem )
CAP 定理指出一個分布式計算系統不可能同時滿足以下三點:
1、 一緻性(Consistency) : 所有節點在同一時間具有相同的資料)
2、 可用性(Availability) : 保證每個請求不管成功或者失敗都有響應
3、 分隔容忍(Partition tolerance) : 系統中任意資訊的丢失或失敗不會影響系統的繼續運作
CAP 理論的核心是:
一個分布式系統不可能同時滿足一緻性,可用性和分區容錯性,最多隻能滿足其中的兩個
根據 CAP 定理可以将 NoSQL 資料庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
1、 CA – 單點叢集,滿足一緻性,可用性的系統,通常在可擴充性上不太強大
2、 CP – 滿足一緻性,分區容忍性的系統,通常性能不是特别高
3、 AP – 滿足可用性,分區容忍性的系統,通常可能對一緻性要求低一些
NoSQL的優點/缺點
優點
1、 高可擴充性
2、 分布式計算
3、 低成本
4、 架構的靈活性,半結構化資料
5、 沒有複雜的關系
缺點
1、 沒有标準化
2、 有限的查詢功能(到目前為止)
3、 最終一緻是不直覺的程式
BASE
BASE 是指 Basically Available 、 Soft-state 、Eventually Consistent
CAP 理論的核心是:
一個分布式系統不可能同時滿足一緻性,可用性和分區容錯性,最多隻能滿足其中的兩個
BASE 是 NoSQL 資料庫對可用性及一緻性的弱要求原則
1、 Basically Availble 基本可用
2、 Soft-state 軟狀态/柔性事務
"Soft state" 可以了解為 "無連接配接" 的, 而 "Hard state" 是"面向連接配接" 的
3、 Eventual Consistency 最終一緻性
最終一緻性, 是 ACID 的最終目的
ACID vs BASE
ACID | BASE |
---|---|
原子性 ( Atomicity ) | 基本可用( Basically Available ) |
一緻性 ( Consistency ) | 軟狀态/柔性事務( Soft state ) |
隔離性 ( Isolation ) | 最終一緻性 ( Eventual consistency ) |
持久性 ( Durable ) |
NoSQL 資料庫分類
類型 | 資料庫 | 特點 |
---|---|---|
列存儲 | Hbase Cassandra Hypertable | 按列存儲資料的 特點是友善存儲結構化和半結構化資料 |
文檔存儲 | MongoDB CouchDB | 采用 JSON 格式,存儲的内容是文檔型 |
key/value存儲 | Tokyo Cabinet Tokyo Tyrant Berkeley DB MemcacheDB Redis | 可以通過 key 快速查詢到其 value |
圖存儲 | Neo4JF lockDB | 圖形關系的最佳存儲 |
對象存儲 | db4o Versant | 通過對象的方式存取資料。 |
XML 資料庫 | Berkeley DB XMLBaseX | 可存儲 XML 資料和支援 XML 查詢文法 |
大公司都在使用 NoSQL
現在已經有很多公司在使用 NoSQL 資料庫
- Mozilla
- Adobe
- Foursquare
- Digg
- Tencent
- Baidu