NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴(kuò)展宣傳的重要窗口,一個合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺,成都創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:封陽臺等成都網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷推廣解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。
雖然NoSQL流行語火起來才短短一年的時間,但是不可否認(rèn),現(xiàn)在已經(jīng)開始了第二代運(yùn)動。盡管早期的堆棧代碼只能算是一種實(shí)驗(yàn),然而現(xiàn)在的系統(tǒng)已經(jīng)更加的成熟、穩(wěn)定。不過現(xiàn)在也面臨著一個嚴(yán)酷的事實(shí):技術(shù)越來越成熟——以至于原來很好的NoSQL數(shù)據(jù)存儲不得不進(jìn)行重寫,也有少數(shù)人認(rèn)為這就是所謂的2.0版本。這里列出一些比較知名的工具,可以為大數(shù)據(jù)建立快速、可擴(kuò)展的存儲庫。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫革命性運(yùn)動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲,相對于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。
對于NoSQL并沒有一個明確的范圍和定義,但是他們都普遍存在下面一些共同特征:
不需要預(yù)定義模式:不需要事先定義數(shù)據(jù)模式,預(yù)定義表結(jié)構(gòu)。數(shù)據(jù)中的每條記錄都可能有不同的屬性和格式。當(dāng)插入數(shù)據(jù)時,并不需要預(yù)先定義它們的模式。
無共享架構(gòu):相對于將所有數(shù)據(jù)存儲的存儲區(qū)域網(wǎng)絡(luò)中的全共享架構(gòu)。NoSQL往往將數(shù)據(jù)劃分后存儲在各個本地服務(wù)器上。因?yàn)閺谋镜卮疟P讀取數(shù)據(jù)的性能往往好于通過網(wǎng)絡(luò)傳輸讀取數(shù)據(jù)的性能,從而提高了系統(tǒng)的性能。
彈性可擴(kuò)展:可以在系統(tǒng)運(yùn)行的時候,動態(tài)增加或者刪除結(jié)點(diǎn)。不需要停機(jī)維護(hù),數(shù)據(jù)可以自動遷移。
分區(qū):相對于將數(shù)據(jù)存放于同一個節(jié)點(diǎn),NoSQL數(shù)據(jù)庫需要將數(shù)據(jù)進(jìn)行分區(qū),將記錄分散在多個節(jié)點(diǎn)上面。并且通常分區(qū)的同時還要做復(fù)制。這樣既提高了并行性能,又能保證沒有單點(diǎn)失效的問題。
異步復(fù)制:和RAID存儲系統(tǒng)不同的是,NoSQL中的復(fù)制,往往是基于日志的異步復(fù)制。這樣,數(shù)據(jù)就可以盡快地寫入一個節(jié)點(diǎn),而不會被網(wǎng)絡(luò)傳輸引起遲延。缺點(diǎn)是并不總是能保證一致性,這樣的方式在出現(xiàn)故障的時候,可能會丟失少量的數(shù)據(jù)。
BASE:相對于事務(wù)嚴(yán)格的ACID特性,NoSQL數(shù)據(jù)庫保證的是BASE特性。BASE是最終一致性和軟事務(wù)。
NoSQL數(shù)據(jù)庫并沒有一個統(tǒng)一的架構(gòu),兩種NoSQL數(shù)據(jù)庫之間的不同,甚至遠(yuǎn)遠(yuǎn)超過兩種關(guān)系型數(shù)據(jù)庫的不同??梢哉f,NoSQL各有所長,成功的NoSQL必然特別適用于某些場合或者某些應(yīng)用,在這些場合中會遠(yuǎn)遠(yuǎn)勝過關(guān)系型數(shù)據(jù)庫和其他的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的優(yōu)點(diǎn)/缺點(diǎn)
優(yōu)點(diǎn):
- 高可擴(kuò)展性
- 分布式計(jì)算
- 低成本
- 架構(gòu)的靈活性,半結(jié)構(gòu)化數(shù)據(jù)
- 沒有復(fù)雜的關(guān)系
缺點(diǎn):
- 沒有標(biāo)準(zhǔn)化
- 有限的查詢功能(到目前為止)
- 最終一致是不直觀的程序 (BY三人行慕課)
NoSQL太火,冒出太多產(chǎn)品了,保守估計(jì)也成百上千了。
互聯(lián)網(wǎng)公司常用的基本集中在以下幾種,每種只舉一個比較常見或者應(yīng)用比較成功的例子吧。
1. In-Memory KV Store : Redis
in memory key-value store,同時提供了更加豐富的數(shù)據(jù)結(jié)構(gòu)和運(yùn)算的能力,成功用法是替代memcached,通過checkpoint和commit log提供了快速的宕機(jī)恢復(fù),同時支持replication提供讀可擴(kuò)展和高可用。
2. Disk-Based KV Store: Leveldb
真正基于磁盤的key-value storage, 模型單一簡單,數(shù)據(jù)量不受限于內(nèi)存大小,數(shù)據(jù)落盤高可靠,Google的幾位大神出品的精品,LSM模型天然寫優(yōu)化,順序?qū)懕P的方式對于新硬件ssd再適合不過了,不足是僅提供了一個庫,需要自己封裝server端。
3. Document Store: Mongodb
分布式nosql,具備了區(qū)別mysql的最大亮點(diǎn):可擴(kuò)展性。mongodb 最新引人的莫過于提供了sql接口,是目前nosql里最像mysql的,只是沒有ACID的特性,發(fā)展很快,支持了索引等特性,上手容易,對于數(shù)據(jù)量遠(yuǎn)超內(nèi)存限制的場景來說,還需要慎重。
4. Column Table Store: HBase
這個富二代似乎不用贅述了,最大的優(yōu)勢是開源,對于普通的scan和基于行的get等基本查詢,性能完全不是問題,只是只提供裸的api,易用性上是短板,可擴(kuò)展性方面是最強(qiáng)的,其次坐上了Hadoop的快車,社區(qū)發(fā)展很快,各種基于其上的開源產(chǎn)品不少,來解決諸如join、聚集運(yùn)算等復(fù)雜查詢。