新聞中心
當(dāng)前位置:網(wǎng)站首頁 > 新聞中心
為什么企業(yè)依賴于NoSQL
如果你關(guān)注大數(shù)據(jù)科技動向,你對NoSQL一定不陌生,NoSQL是一個(gè)分布式數(shù)據(jù)庫。在過去時(shí)間,數(shù)據(jù)存儲一直關(guān)系型數(shù)據(jù)庫天下,有著良好的控制并發(fā)操作、事務(wù)功能。雖然RDBMS很優(yōu)秀,但是隨著時(shí)間的推移就出現(xiàn)了兩個(gè)關(guān)系數(shù)據(jù)庫解決不了的問題:快速增長的數(shù)據(jù)規(guī)模和日漸復(fù)雜的數(shù)據(jù)模型。結(jié)果,我們看到了NoSQL數(shù)據(jù)庫的興起。一、關(guān)系數(shù)據(jù)庫不足
實(shí)際上,從1979 年Oracle發(fā)布了第一個(gè)版本,這些數(shù)據(jù)庫被設(shè)計(jì)為在單個(gè)服務(wù)器上運(yùn)行,并且越大越好。而且增加這些數(shù)據(jù)庫容量的唯一方法是升級服務(wù)器處理器、內(nèi)存和存儲,數(shù)據(jù)存儲代價(jià)不斷升高。隨著互聯(lián)網(wǎng)的數(shù)據(jù)呈指數(shù)級增長和Web應(yīng)用程序的興起,數(shù)據(jù)模型日漸復(fù)雜,關(guān)系數(shù)據(jù)庫難以支撐,NoSQL數(shù)據(jù)庫也由此孕育而生。在2006年谷歌發(fā)布了Bigtable研究論文,在2007年亞馬遜發(fā)布了Dynamo研究論文,而這些新的數(shù)據(jù)庫旨在滿足新一代企業(yè)要求:需要敏捷開發(fā)并支持任意規(guī)模運(yùn)作。
二、敏捷開發(fā)
當(dāng)今是以體驗(yàn)為中心的數(shù)字經(jīng)濟(jì),企業(yè)如何保持競爭力,那么必須進(jìn)行創(chuàng)新。由于這項(xiàng)創(chuàng)新的核心是現(xiàn)代Web、移動和物聯(lián)網(wǎng)應(yīng)用程序的開發(fā),因此開發(fā)人員必須高頻提供應(yīng)用程序和服務(wù)。速度和敏捷性都至關(guān)重要,因?yàn)檫@些應(yīng)用程序的發(fā)展速度遠(yuǎn)遠(yuǎn)超過ERP等傳統(tǒng)應(yīng)用程序。而關(guān)系數(shù)據(jù)庫是卻不能很好滿足于它,因?yàn)樗鼈兊墓潭〝?shù)據(jù)模型不能很好地支持敏捷開發(fā)。
敏捷開發(fā)的核心原則是適應(yīng)不斷變化的應(yīng)用程序需求:當(dāng)需求發(fā)生變化時(shí),數(shù)據(jù)模型也會發(fā)生變化,這是關(guān)系數(shù)據(jù)庫的難以克服的問題,因?yàn)殛P(guān)系數(shù)據(jù)庫的模型是固定的,并預(yù)先定義好的。因此,當(dāng)要更改數(shù)據(jù)模型,開發(fā)人員不得不修改當(dāng)初設(shè)定好的數(shù)據(jù)庫結(jié)構(gòu),以適應(yīng)新的需求。這會減慢或停止開發(fā),不僅因?yàn)樗且粋€(gè)手動,耗時(shí)的過程,而且還會影響其他應(yīng)用程序和服務(wù)。
相比之下,NoSQL文檔數(shù)據(jù)庫完全完美支持這點(diǎn),因?yàn)樗菬o模式的,沒有強(qiáng)制定義數(shù)據(jù)必須建模。相反,它遵循應(yīng)用程序和服務(wù)。使用NoSQL,數(shù)據(jù)模型由應(yīng)用程序模型定義。應(yīng)用程序和服務(wù)將數(shù)據(jù)建模作為對象。三、如何支持任意規(guī)模運(yùn)作
為了支持以指數(shù)增長的用戶和數(shù)據(jù) 數(shù)百到數(shù)千到數(shù)百萬用戶,以及千兆字節(jié)到數(shù)TB的數(shù)據(jù)操作,應(yīng)用程序和服務(wù)不得不進(jìn)行擴(kuò)展以保持性能,并且必須有效地運(yùn)行。
對于擴(kuò)展關(guān)系數(shù)據(jù)庫而言,這是一個(gè)問題,例如,使用Oracle ,使用RAC技術(shù)進(jìn)行擴(kuò)展就需要大量組件,昂貴且不完全可靠。因此有效擴(kuò)展和按需擴(kuò)展的能力是一項(xiàng)挑戰(zhàn)。它會變得越來越昂貴,因?yàn)楸仨氋徺I更大更強(qiáng)的服務(wù)器以容納更多用戶和更多數(shù)據(jù)。此外,如果必須使數(shù)據(jù)庫脫機(jī)以執(zhí)行硬件升級,則可能導(dǎo)致停機(jī)。
然而,分布式NoSQL數(shù)據(jù)庫利用廉價(jià)硬件進(jìn)行擴(kuò)展, 只需添加更多服務(wù)器即可添加更多資源。擴(kuò)展能力使企業(yè)能夠通過以下方式更有效地?cái)U(kuò)展:
1、不需要為滿足部署而買相對稱的硬件;
2、利用較便宜的硬件進(jìn)行拓展;
3、按需擴(kuò)展,無需停機(jī)。
四、NoSQL 常見存儲方式
NoSQL 常見有三種存儲方式:鍵值存儲、面向文檔的數(shù)據(jù)庫和面向列的數(shù)據(jù)庫。接下來說明這幾種存儲方式以及數(shù)據(jù)庫代表。
1\鍵值存儲? ?代表:Redis、memcached
鍵值存儲是 NoSQL 最常見存儲方式,通過 key-value 形式保存數(shù)據(jù),高速訪問數(shù)據(jù)。而且根據(jù)保存時(shí)效也分為臨時(shí)性、永久性和兩者兼?zhèn)洹?
2\面向文檔的數(shù)據(jù)庫? ?代表:MongoDB、CouchDB
面向文檔的數(shù)據(jù)庫數(shù)據(jù)結(jié)構(gòu)要求不是很嚴(yán)格,不定義表結(jié)構(gòu)而且可以使用復(fù)雜的查詢條件
3\面向列的數(shù)據(jù)庫? ?代表:HBase
面向列的數(shù)據(jù)庫以列為單位進(jìn)行存儲,這里的列式存儲其實(shí)說的是列族存儲,它將數(shù)據(jù)表存儲為數(shù)據(jù)列而非行的形式。列族存儲優(yōu)勢:快速查詢,易拓展,但功能相對局限。
五、NoSQL 對于事務(wù)的支持?
在這里有一個(gè)誤區(qū),由于分布式事務(wù)需要分布式協(xié)作,所以似乎必須在性能可擴(kuò)展性和分布式事務(wù)支持之間進(jìn)行權(quán)衡。
耶魯大學(xué)的一名副教授Daniel Abadi認(rèn)為這個(gè)想法是錯(cuò)的,可拓展的分布式系統(tǒng)也是可以實(shí)現(xiàn)事物。他提出了一個(gè)新的權(quán)衡策略,具體是在公平性、隔離性和吞吐量(FIT)三者之間進(jìn)行取舍。 換句話說,有兩種方法構(gòu)建出具備分布式事務(wù)吞吐量的可擴(kuò)展系統(tǒng):
1、放棄隔離性。當(dāng)放棄隔離性,一個(gè)事物是不會跟其他事物有沖突,就無需等待協(xié)作就可以完成了。而且也有一類數(shù)據(jù)約束可以確保在弱隔離下正確性。
2、放棄公平性。通過設(shè)定分布式協(xié)作的順序最小化兩者之間的時(shí)間重疊,從而減輕二者之間的相互影響,在此公平下找到最合適時(shí)間進(jìn)行協(xié)作。
六、小結(jié)
構(gòu)建和運(yùn)行這些大規(guī)模交互式應(yīng)用程序創(chuàng)建了一組新的技術(shù)要求。新的技術(shù)架構(gòu)需要比以往更加靈活,并且需要一種能夠適應(yīng)前所未有的規(guī)模、速度和數(shù)據(jù)可變性的實(shí)時(shí)數(shù)據(jù)管理方法。關(guān)系數(shù)據(jù)庫無法滿足這些新要求,這就使得 NoSQL 逐漸流行起來。
|