在互聯(lián)網(wǎng)大數(shù)據(jù)時代的今天,互聯(lián)網(wǎng)的用戶可以為數(shù)以億計的用戶使用。而互聯(lián)網(wǎng)主要使用的技術(shù)是大數(shù)據(jù)與云計算,究其原因竟是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)很難處理越來越多的數(shù)據(jù),以及非結(jié)構(gòu)化的數(shù)據(jù)。而NoSQL技術(shù)則很好的解決這個問題,目前主要應(yīng)用于非結(jié)構(gòu)化的大數(shù)據(jù)與云計算上,從該角度看,NoSQL也是一種全新的數(shù)據(jù)庫思維方式。也就是為何要使用NoSQL數(shù)據(jù)庫的原因之一,除此之外,還有以下原因。
1、NoSQL具有靈活的數(shù)據(jù)模型,可以處理非結(jié)構(gòu)化/半結(jié)構(gòu)化的大數(shù)據(jù)
現(xiàn)在,我們可以通過Facebook、D&B等第三方輕松獲得與訪問數(shù)據(jù),如個人用戶信息、地理位置數(shù)據(jù)、社交圖譜、用戶產(chǎn)生的內(nèi)容、機器日志數(shù)據(jù)以及傳感器生成的數(shù)據(jù)等。對這些數(shù)據(jù)的使用正在快速改變著通信、購物、廣告、娛樂以及關(guān)系管理的特質(zhì)。沒有使用這些數(shù)據(jù)的應(yīng)用很快就會被用戶所遺忘。開發(fā)者希望使用非常靈活的數(shù)據(jù)庫,能夠輕松容納新的數(shù)據(jù)類型,并且不會被第三方數(shù)據(jù)提供商內(nèi)容結(jié)構(gòu)的變化所累。很多新數(shù)據(jù)都是非結(jié)構(gòu)化或是半結(jié)構(gòu)化的,因此開發(fā)者還需要能夠高效存儲這種數(shù)據(jù)的數(shù)據(jù)庫。但遺憾的是,關(guān)系型數(shù)據(jù)庫所使用的定義嚴格、基于模式的方式是無法快速容納新的數(shù)據(jù)類型的,對于非結(jié)構(gòu)化或是半結(jié)構(gòu)化的數(shù)據(jù)更是無能為力。NoSQL提供的數(shù)據(jù)模型則能很好地滿足這種需求。很多應(yīng)用都會從這種非結(jié)構(gòu)化數(shù)據(jù)模型中獲益,比如說CRM、ERP、BPM等等,他們可以通過這種靈活性存儲數(shù)據(jù)而無需修改表或是創(chuàng)建更多的列。這些數(shù)據(jù)庫也非常適合于創(chuàng)建原型或是快速應(yīng)用,因為這種靈活性使得新特性的開發(fā)變得非常容易。
2、NoSQL很容易實現(xiàn)可伸縮性(向上擴展與水平擴展)
如果有很多用戶在頻繁且并發(fā)地使用你的應(yīng)用,那么你就需要考慮可伸縮的數(shù)據(jù)庫技術(shù)而非傳統(tǒng)的RDBMS了。對于關(guān)系型技術(shù)來說,很多應(yīng)用開發(fā)者會發(fā)現(xiàn)動態(tài)的可伸縮性是難以實現(xiàn)的,這時就應(yīng)該考慮切換到NoSQL數(shù)據(jù)庫上。對于云應(yīng)用來說,關(guān)系型數(shù)據(jù)庫一開始是普遍的選擇。然而,在使用過程中卻遇到了越來越多的問題,原因就在于他們是中心化的,向上擴展而非水平擴展的。這使得他們不適合于那些需要簡單且動態(tài)可伸縮性的應(yīng)用。NoSQL數(shù)據(jù)庫從一開始就是分布式、水平擴展的,因此非常適合于互聯(lián)網(wǎng)應(yīng)用分布式的特性。
在三層互聯(lián)網(wǎng)架構(gòu)的Web/應(yīng)用層上,多年來向上擴展已經(jīng)成為默認的擴展方式了。隨著應(yīng)用使用人數(shù)的激增,我們需要添加更多的服務(wù)器,性能則是通過負載均衡來實現(xiàn)的,這時的代價與用戶數(shù)量成線性比例關(guān)系。在NoSQL數(shù)據(jù)庫之前,數(shù)據(jù)庫層的默認擴展方式就是向上擴展。為了支持更多的并發(fā)用戶以及存儲更多的數(shù)據(jù),你需要越來越好的服務(wù)器,更好的CPU、更多的內(nèi)存、更大的磁盤來維護所有表。然而,好的服務(wù)器意味著更加復雜、私有、并且也更加昂貴。這與Web/應(yīng)用層所使用的便宜的硬件形成了鮮明的對比。
3、動態(tài)模式
關(guān)系型數(shù)據(jù)庫需要在添加數(shù)據(jù)前先定義好模式。比如說,你需要存儲客戶的電話號碼、姓名、地址、城市與州等信息,SQL數(shù)據(jù)庫需要提前知曉你要存的是什么。這對于敏捷開發(fā)模式來說是場災(zāi)難,因為每次完成新特性時,數(shù)據(jù)庫的模式通常都需要改變。因此,如果在開發(fā)過程中想將客戶喜歡的條目加到數(shù)據(jù)庫中,那就得向表中添加這一列才行,然后要做的就是將整個數(shù)據(jù)庫遷移到新的模式上。
4、自動分片
由于是結(jié)構(gòu)化的,關(guān)系型數(shù)據(jù)庫通常會垂直擴展,單臺服務(wù)器要持有整個數(shù)據(jù)庫來確保可靠性與數(shù)據(jù)的持續(xù)可用性。這樣做的代價就是非常昂貴、擴展受到限制,并且數(shù)據(jù)庫基礎(chǔ)設(shè)施會成為失敗點。這個問題的解決方案就是水平擴展,添加服務(wù)器而不是為單臺服務(wù)器增加更多的能力。NoSQL數(shù)據(jù)庫通常都支持自動分片,這意味著他們本質(zhì)上就會自動在多臺服務(wù)器上分發(fā)數(shù)據(jù),應(yīng)用甚至都不知道這些事情。數(shù)據(jù)與查詢負載會自動在多臺服務(wù)器上做到平衡,當某臺服務(wù)器當機時,它能快速且透明地被替換掉。
5、復制
大多數(shù)NoSQL數(shù)據(jù)庫也支持自動復制,這意味著你可以獲得高可用性與災(zāi)備恢復功能。從開發(fā)者的角度來看,存儲環(huán)境本質(zhì)上是虛擬化的。
以上即是關(guān)于為何要使用NoSQL數(shù)據(jù)庫的全部內(nèi)容,想了解更多關(guān)于NoSQL數(shù)據(jù)庫的信息,請繼續(xù)關(guān)注中培偉業(yè)。