NoSQL 簡介

2022-09-06 16:25 更新

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

在現(xiàn)代的計算系統(tǒng)上每天網(wǎng)絡(luò)上都會產(chǎn)生龐大的數(shù)據(jù)量。

這些數(shù)據(jù)有很大一部分是由關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDMBSs)來處理。 1970年 E.F.Codd's提出的關(guān)系模型的論文 "A relational model of data for large shared data banks",這使得數(shù)據(jù)建模和應(yīng)用程序編程更加簡單。

通過應(yīng)用實踐證明,關(guān)系模型是非常適合于客戶服務(wù)器編程,遠(yuǎn)遠(yuǎn)超出預(yù)期的利益,今天它是結(jié)構(gòu)化數(shù)據(jù)存儲在網(wǎng)絡(luò)和商務(wù)應(yīng)用的主導(dǎo)技術(shù)。

NoSQL 是一項全新的數(shù)據(jù)庫革命性運(yùn)動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲,相對于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。


關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則

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

1、A (Atomicity) 原子性
原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個操作失敗,整個事務(wù)就失敗,需要回滾。

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

2、C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會改變數(shù)據(jù)庫原本的一致性約束。

例如現(xiàn)有完整性約束a+b=10,如果一個事務(wù)改變了a,那么必須得改變b,使得事務(wù)結(jié)束后依然滿足a+b=10,否則事務(wù)失敗。

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

4、D (Durability) 持久性
持久性是指一旦事務(wù)提交后,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機(jī)也不會丟失。


分布式系統(tǒng)

分布式系統(tǒng)(distributed system)由多臺計算機(jī)和通信的軟件組件通過計算機(jī)網(wǎng)絡(luò)連接(本地網(wǎng)絡(luò)或廣域網(wǎng))組成。

分布式系統(tǒng)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。正是因為軟件的特性,所以分布式系統(tǒng)具有高度的內(nèi)聚性和透明性。

因此,網(wǎng)絡(luò)和分布式系統(tǒng)之間的區(qū)別更多的在于高層軟件(特別是操作系統(tǒng)),而不是硬件。

分布式系統(tǒng)可以應(yīng)用在在不同的平臺上如:Pc、工作站、局域網(wǎng)和廣域網(wǎng)上等。


分布式計算的優(yōu)點(diǎn)

可靠性(容錯) :
分布式計算系統(tǒng)中的一個重要的優(yōu)點(diǎn)是可靠性。一臺服務(wù)器的系統(tǒng)崩潰并不影響到其余的服務(wù)器。

可擴(kuò)展性:
在分布式計算系統(tǒng)可以根據(jù)需要增加更多的機(jī)器。

資源共享:
共享數(shù)據(jù)是必不可少的應(yīng)用,如銀行,預(yù)訂系統(tǒng)。

靈活性:
由于該系統(tǒng)是非常靈活的,它很容易安裝,實施和調(diào)試新的服務(wù)。

更快的速度:
分布式計算系統(tǒng)可以有多臺計算機(jī)的計算能力,使得它比其他系統(tǒng)有更快的處理速度。

開放系統(tǒng):
由于它是開放的系統(tǒng),本地或者遠(yuǎn)程都可以訪問到該服務(wù)。

更高的性能:
相較于集中式計算機(jī)網(wǎng)絡(luò)集群可以提供更高的性能(及更好的性價比)。


分布式計算的缺點(diǎn)

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

軟件:
更少的軟件支持是分布式計算系統(tǒng)的主要缺點(diǎn)。

網(wǎng)絡(luò):
網(wǎng)絡(luò)基礎(chǔ)設(shè)施的問題,包括:傳輸問題,高負(fù)載,信息丟失等。

安全性:
開發(fā)系統(tǒng)的特性讓分布式計算系統(tǒng)存在著數(shù)據(jù)的安全性和共享的風(fēng)險等問題。


什么是NoSQL?

NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。

NoSQL用于超大規(guī)模數(shù)據(jù)的存儲。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴(kuò)展。


為什么使用NoSQL ?

今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取數(shù)據(jù)。用戶的個人信息,社交網(wǎng)絡(luò),地理位置,用戶生成的數(shù)據(jù)和用戶操作日志已經(jīng)成倍的增加。我們?nèi)绻獙@些用戶數(shù)據(jù)進(jìn)行挖掘,那SQL數(shù)據(jù)庫已經(jīng)不適合這些應(yīng)用了, NoSQL數(shù)據(jù)庫的發(fā)展也卻能很好的處理這些大的數(shù)據(jù)。

web-data-image

實例

社會化關(guān)系網(wǎng):

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
- 高度組織化結(jié)構(gòu)化數(shù)據(jù)
- 結(jié)構(gòu)化查詢語言(SQL) (SQL)
- 數(shù)據(jù)和關(guān)系都存儲在單獨(dú)的表中。
- 數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
- 嚴(yán)格的一致性
- 基礎(chǔ)事務(wù)

NoSQL
- 代表著不僅僅是SQL
- 沒有聲明性查詢語言
- 沒有預(yù)定義的模式
-鍵 - 值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫
- 最終一致性,而非ACID屬性
- 非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
- CAP定理
- 高性能,高可用性和可伸縮性



NoSQL 簡史

NoSQL一詞最早出現(xiàn)于1998年,是Carlo Strozzi開發(fā)的一個輕量、開源、不提供SQL功能的關(guān)系數(shù)據(jù)庫。

2009年,Last.fm的Johan Oskarsson發(fā)起了一次關(guān)于分布式開源數(shù)據(jù)庫的討論[2],來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時的NoSQL主要指非關(guān)系型、分布式、不提供ACID的數(shù)據(jù)庫設(shè)計模式。

2009年在亞特蘭大舉行的"no:sql(east)"討論會是一個里程碑,其口號是"select fun, profit from real_world where relational=false;"。因此,對NoSQL最普遍的解釋是"非關(guān)聯(lián)型的",強(qiáng)調(diào)Key-Value Stores和文檔數(shù)據(jù)庫的優(yōu)點(diǎn),而不是單純的反對RDBMS。


CAP定理(CAP theorem)

在計算機(jī)科學(xué)中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對于一個分布式計算系統(tǒng)來說,不可能同時滿足以下三點(diǎn):

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

CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性、可用性和分區(qū)容錯性這三個需求,最多只能同時較好的滿足兩個。

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

  • CA - 單點(diǎn)集群,滿足一致性,可用性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大。
  • CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。
  • AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐σ恢滦砸蟮鸵恍?/li>



NoSQL的優(yōu)點(diǎn)/缺點(diǎn)

優(yōu)點(diǎn):

  • - 高可擴(kuò)展性
  • - 分布式計算
  • - 低成本
  • - 架構(gòu)的靈活性,半結(jié)構(gòu)化數(shù)據(jù)
  • - 沒有復(fù)雜的關(guān)系

缺點(diǎn):

  • - 沒有標(biāo)準(zhǔn)化
  • - 有限的查詢功能(到目前為止)
  • - 最終一致是不直觀的程序

BASE

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

CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求,最多只能同時較好的滿足兩個。

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

  • Basically Availble --基本可用
  • Soft-state --軟狀態(tài)/柔性事務(wù)。 "Soft state" 可以理解為"無連接"的, 而 "Hard state" 是"面向連接"的
  • Eventual Consistency --最終一致性 最終一致性, 也是是 ACID 的最終目的。

ACID vs BASE

ACID BASE
原子性(Atomicity) 基本可用(Basically Available)
一致性(Consistency) 軟狀態(tài)/柔性事務(wù)(Soft state)
隔離性(Isolation) 最終一致性 (Eventual consistency)
持久性 (Durable)  

NoSQL 數(shù)據(jù)庫分類

類型 部分代表 特點(diǎn)
列存儲

Hbase

Cassandra

Hypertable

顧名思義,是按列存儲數(shù)據(jù)的。最大的特點(diǎn)是方便存儲結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮,對針對某一列或者某幾列的查詢有非常大的IO優(yōu)勢。

文檔存儲

MongoDB

CouchDB

文檔存儲一般用類似json的格式存儲,存儲的內(nèi)容是文檔型的。這樣也就有有機(jī)會對某些字段建立索引,實現(xiàn)關(guān)系數(shù)據(jù)庫的某些功能。

key-value存儲

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

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

圖存儲

Neo4J

FlockDB

圖形關(guān)系的最佳存儲。使用傳統(tǒng)關(guān)系數(shù)據(jù)庫來解決的話性能低下,而且設(shè)計使用不方便。

對象存儲

db4o

Versant

通過類似面向?qū)ο笳Z言的語法操作數(shù)據(jù)庫,通過對象的方式存取數(shù)據(jù)。

xml數(shù)據(jù)庫

Berkeley DB XML

BaseX

高效的存儲XML數(shù)據(jù),并支持XML的內(nèi)部查詢語法,比如XQuery,Xpath。


誰在使用

現(xiàn)在已經(jīng)有很多公司使用了NoSQL:

  • Google
  • Facebook
  • Mozilla
  • Adobe
  • Foursquare
  • LinkedIn
  • Digg
  • McGraw-Hill Education
  • Vermont Public Radio


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號