NoSQL與RDBMS:何時使用,何時不使用

來源:互聯網
上載者:User

http://www.infoq.com/cn/news/2014/01/nosql-vs-rdbms


Naresh Kumar是位軟體工程師與熱情的博主,對於編程與新事物擁有極大的興趣,非常樂於與其他開發人員和程式員分享技術上的研究成果。近日,Naresh撰文比較了NoSQL與RDBMS,並詳細介紹了他們各自的特點與適用的情境。

NoSQL並不是關係型資料庫管理系統,本文將會介紹NoSQL資料庫與關係型資料庫之間的差別,同時還會討論在何種情境下應該使用NoSQL,何種情境下不應該使用。由於NoSQL還是個相對較新的技術,因此它還面臨著很多挑戰。

時至今日,互連網上有數以億計的使用者。大資料與雲端運算已經成為很多主要的互連網應用都在使用或是準備使用的技術,這是因為互連網使用者每天都在不斷增長,資料也變得越來越複雜,而且有很多非結構化的資料存在,這是很難通過傳統的關係型資料庫管理系統來處理的。NoSQL技術則能比較好地解決這個問題,它主要用於非結構化的大資料與雲端運算上。從這個角度來看,NoSQL是一種全新的資料庫思維方式。

為何要使用NoSQL資料庫?

1.NoSQL具有靈活的資料模型,可以處理非結構化/半結構化的大資料

現在,我們可以通過Facebook、D&B等第三方輕鬆獲得與訪問資料,如個人使用者資訊、地理位置資料、社交圖譜、使用者產生的內容、機器日誌資料以及感應器產生的資料等。對這些資料的使用正在快速改變著通訊、購物、廣告、娛樂以及關係管理的特質。沒有使用這些資料的應用很快就會被使用者所遺忘。開發人員希望使用非常靈活的資料庫,能夠輕鬆容納新的資料類型,並且不會被第三方資料供應商內容結構的變化所累。很多新資料都是非結構化或是半結構化的,因此開發人員還需要能夠高效儲存這種資料的資料庫。但遺憾的是,關係型資料庫所使用的定義嚴格、基於模式的方式是無法快速容納新的資料類型的,對於非結構化或是半結構化的資料更是無能為力。NoSQL提供的資料模型則能很好地滿足這種需求。很多應用都會從這種非結構化資料模型中獲益,比如說CRM、ERP、BPM等等,他們可以通過這種靈活性儲存資料而無需修改表或是建立更多的列。這些資料庫也非常適合於建立原型或是快速應用,因為這種靈活性使得新特性的開發變得非常容易。

2.NoSQL很容易實現延展性(向上擴充與水平擴充)

如果有很多使用者在頻繁且並發地使用你的應用,那麼你就需要考慮可伸縮的資料庫技術而非傳統的RDBMS了。對於關係型技術來說,很多應用開發人員會發現動態延展性是難以實現的,這時就應該考慮切換到NoSQL資料庫上。對於雲應用來說,關係型資料庫一開始是普遍的選擇。然而,在使用過程中卻遇到了越來越多的問題,原因就在於他們是中心化的,向上擴充而非水平擴充的。這使得他們不適合於那些需要簡單且動態延展性的應用。NoSQL資料庫從一開始就是分布式、水平擴充的,因此非常適合於互連網應用分布式的特性。

在三層互連網架構的Web/應用程式層上,多年來向上擴充已經成為預設的擴充方式了。隨著應用使用人數的激增,我們需要添加更多的伺服器,效能則是通過負載平衡來實現的,這時的代價與使用者數量成線性比例關係。在NoSQL資料庫之前,資料庫層的預設擴充方式就是向上擴充。為了支援更多的並發使用者以及儲存更多的資料,你需要越來越好的伺服器,更好的CPU、更多的記憶體、更大的磁碟來維護所有表。然而,好的伺服器意味著更加複雜、私人、並且也更加昂貴。這與Web/應用程式層所使用的便宜的硬體形成了鮮明的對比。

3.動態模式

關係型資料庫需要在添加資料前先定義好模式。比如說,你需要儲存客戶的電話號碼、姓名、地址、城市與州等資訊,SQL資料庫需要提前知曉你要存的是什麼。這對于敏捷開發模式來說是場災難,因為每次完成新特性時,資料庫的模式通常都需要改變。因此,如果在開發過程中想將客戶喜歡的條目加到資料庫中,那就得向表中添加這一列才行,然後要做的就是將整個資料庫遷移到新的模式上。

4.自動分區

由於是結構化的,關係型資料庫通常會垂直擴充,單台伺服器要持有整個資料庫來確保可靠性與資料的持續可用性。這樣做的代價就是非常昂貴、擴充受到限制,並且資料庫基礎設施會成為失敗點。這個問題的解決方案就是水平擴充,添加伺服器而不是為單台伺服器增加更多的能力。NoSQL資料庫通常都支援自動分區,這意味著他們本質上就會自動在多台伺服器上分發資料,應用甚至都不知道這些事情。資料與查詢負載會自動在多台伺服器上做到平衡,當某台伺服器當機時,它能快速且透明地被替換掉。

5.複製

大多數NoSQL資料庫也支援自動複製,這意味著你可以獲得高可用性與災備恢複功能。從開發人員的角度來看,儲存環境本質上是虛擬化的。

NoSQL資料庫面臨的挑戰

1.成熟度等級

RDBMS系統由來已久。NoSQL擁護者們會說RDBMS的高齡是其衰退的標誌,不過對於大多數CIO來說,RDBMS的成熟讓人放心。對於大多數情況來說,RDBMS系統是穩定且功能豐富的。相比較而言,大多數NoSQL資料庫則還有很多特性有待實現。

2.支援

企業需要的是安心,如果關鍵系統出現了故障,他們可以獲得即時的支援。所有RDBMS廠商都在不遺餘力地提供良好的企業支援。與之相反,大多數NoSQL系統都是開源項目,雖然每種資料庫都有那麼幾家公司提供支援,不過這些公司大多都是小的初創公司,沒有全球支援資源,也沒有Oracle、微軟或是IBM那種令人放心的公信力。

3.分析與商業智慧

NoSQL資料庫在Web 2.0應用時代開始出現。因此,大多數特性都是面向這些應用的需要的。然而,應用中的資料對於業務來說是有價值的,這種價值遠遠超出了Web應用那種CRUD。企業資料庫中的商務資訊可以協助改進效率並提升競爭力,商業智慧對於大中型企業來說是個非常關鍵的IT問題。

4.管理

NoSQL的設計目標是提供零管理的解決方案,不過當今的現實卻離這個目標還相去甚遠。現在的NoSQL需要很多技巧才能用好,並且需要不少人力、物力來維護。

5.專業

全球有很多開發人員,每個業務部門都會有熟悉RDBMS概念與編程的人。相反,幾乎每個NoSQL開發人員都處於學習模式。這種狀況會隨著時間的流逝而發生改觀。但現在,找到一個有經驗的RDBMS程式員或是管理員要比NoSQL專家容易多了。

結論

NoSQL資料庫正在成為資料庫領域的重要力量。如果使用恰當,那麼它會帶來很多好處。然而,企業應該非常小心並注意到這些資料庫的限制與問題。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.