更新時(shí)間:2023-06-09 來(lái)源:黑馬程序員 瀏覽量:
NoSQL一詞最早出現(xiàn)于1998年,它是Carlo Strozzi開發(fā)的一個(gè)輕量、開源、不提供SQL功能的關(guān)系數(shù)據(jù)庫(kù)。CarloStrozzi認(rèn)為,由于NoSQL.悖離傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)模型,因此,NoSQL應(yīng)該有一個(gè)全新的名字,例如NoREL或與之類似的名字。
2009年,Last.fm的Johan Oskarsson(約翰·奧斯卡森)發(fā)起了一次關(guān)于分布式開源數(shù)據(jù)庫(kù)的討論,來(lái)自Rackspace的Eric Evans(埃里克·埃文斯)再次提出了NoSQL的概念,這時(shí)的NoSQL主要指非關(guān)系型、分布式、不提供ACID的數(shù)據(jù)庫(kù)設(shè)計(jì)模式。
2009年在亞特蘭大舉行的“no:sql(east)”討論會(huì)是一個(gè)里程碑,該討論會(huì)的口號(hào)是“select fun,profit from real world where relational=false:”。因此,對(duì)NoSQL最普遍的解釋是“非關(guān)系型的”,主要是強(qiáng)調(diào)鍵值存儲(chǔ)和文檔存儲(chǔ)數(shù)據(jù)庫(kù)的優(yōu)點(diǎn),而不是單純地反對(duì)關(guān)系數(shù)據(jù)庫(kù)。
現(xiàn)如今,大家看到NoSQL這個(gè)詞,可能會(huì)誤以為是“No!SQL”的縮寫,并深感詫異:“SQL怎么會(huì)沒有必要了呢?”,實(shí)際上,NoSQL是Not OnlySQL的縮寫,它的含義為“不僅僅是SQL”。NoSQL是一種非關(guān)系型、分布式、無(wú)須遵循ACID原則、不提供SQL功能的數(shù)據(jù)庫(kù),是對(duì)關(guān)系型數(shù)據(jù)庫(kù)在靈活性和擴(kuò)展性上的補(bǔ)充。NoSQL.的出現(xiàn)主要是解決大規(guī)模數(shù)據(jù)集合下數(shù)據(jù)種類多樣性帶來(lái)的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。
NoSQL具有“易擴(kuò)展”“高性能”“靈活的數(shù)據(jù)模型”以及“高可用”等顯著特點(diǎn),這些特點(diǎn)的具體介紹如下。
1.易擴(kuò)展
雖然NoSQL數(shù)據(jù)庫(kù)的種類繁多,但是它們都擁有一個(gè)共同的特點(diǎn),即去掉關(guān)系數(shù)據(jù)庫(kù)的關(guān)系型特性。數(shù)據(jù)之間均無(wú)關(guān)系,這就使得數(shù)據(jù)庫(kù)可以非常容易地?cái)U(kuò)展,這是完全區(qū)別于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的一大特性。
2.高性能
NoSQL.數(shù)據(jù)庫(kù)具有高并發(fā)讀寫性能,這一點(diǎn)在海量數(shù)據(jù)的處理上表現(xiàn)得尤其明顯。這一點(diǎn)是得益于NoSQL.數(shù)據(jù)庫(kù)的無(wú)關(guān)系性,NoSQL.數(shù)據(jù)庫(kù)的結(jié)構(gòu)比較簡(jiǎn)單。我們都知道,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)MySQL.使用QueryCache,每更新一次數(shù)據(jù)表,cache就會(huì)失效,在Web2.0時(shí)代,短時(shí)間內(nèi)會(huì)有大量數(shù)據(jù)進(jìn)行頻繁的交互應(yīng)用,這樣一來(lái),cache性能和效率就會(huì)不高。而NoSQL.的cache是記錄級(jí)的,是一種細(xì)粒度的cache,所以與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)相比較而言,NoSQL在這個(gè)層面上來(lái)說(shuō)性能就要高很多。
3.靈活的數(shù)據(jù)模型
NoSQL數(shù)據(jù)庫(kù)不需要事先為存儲(chǔ)的數(shù)據(jù)建立相應(yīng)的字段,用戶可以隨時(shí)存儲(chǔ)自定義的各種數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫(kù)里,需要在數(shù)據(jù)表里增加或者刪除字段是一件非常麻煩的事情,尤其是在非常大的數(shù)據(jù)表里,增加字段簡(jiǎn)直就是一個(gè)蛋夢(mèng),這點(diǎn)在大數(shù)據(jù)量的Web2.0時(shí)代尤其明顯。
4.高可用
NoSQL.在不太影響性能的情況下,可以方便地實(shí)現(xiàn)高可用的架構(gòu)。例如,Cassandra、HBase模型,我們甚至可以通過(guò)復(fù)制模型來(lái)實(shí)現(xiàn)NoSQL.的高可用。