naresh kumar是位軟體工程師與熱情的博主,對於程式設計與新事物擁有極大的興趣,非常樂於與其他開發者和程式設計師分享技術上的研究成果。近日,naresh撰文比較了nosql與rdbms,並詳細介紹了他們各自的特點與適用的場景。
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資料庫也支援自動複製,這意味著你可以獲得高可用性與災備恢復功能。從開發者的角度來看,儲存環境本質上是虛擬化的。
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資料庫正在成為資料庫領域的重要力量。如果使用恰當,那麼它會帶來很多好處。然而,企業應該非常小心並注意到這些資料庫的限制與問題。
NoSQL與RDBMS 何時使用,何時不使用
naresh kumar是位軟體工程師與熱情的博主,對於程式設計與新事物擁有極大的興趣,非常樂於與其他開發者和程式設計師分享技術上的研究成果。近日,naresh撰文比較了nosql與rdbms,並詳細介紹了他們各自的特點與適用的場景。nosql並不是關係型資料庫管理系統,本文將會介紹nosql資料庫...
RDBMS與NOsql的區別
關係型資料庫 關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯...
NoSql與RDBMS的對比
nosql出現的原因是因為有很多應用不需要使用rdbms的特性 強一致性以及join查詢 而這些特性還成為了阻礙 如join限制了分片等 以下對比了兩種資料庫的特性,以便於更好地進行技術選型。特性rdbms nosql 強一致事務 支援,acid特性 不支援,base特性 sql語句 跨表join ...