NoSql和RDBMS的區別與比較

Nosql(not only sql) 不是用於關係型數據庫管理系統(RDBMS)。接下來我們討論一下NoSql DataBase和關係型DataBase的區別,還有一些關於爲什麼不在傳統的關係型數據庫(RDBMS)上使用NoSql的數據庫模型。
如今,互聯網已經擁有百億到萬億級別的用戶,甚至更多。大數據、大用戶和雲計算是目前每個主流app所面臨、使用或者將要面臨使用的,因爲互聯網的用戶是在夜以繼日地逐漸成長和變化的,數據也是在逐漸增長和變得複雜、非固定結構化的。這些所有的變化都是很難在原有的關係型數據庫中管理的。但是,NoSql數據庫在這一系列問題上,都有很從容的處理方式。NoSql被設計的初衷就是處理這些大量的、非固定結構化的數據以及雲計算等。NoSql數據庫可以精確地處理所有種類的非結構化數據、雜亂無章的結構數據以及不確定結構的數據。NoSql數據庫的出現,簡直引發了我們對數據庫概念新一輪的思考。不是嗎?
NoSql數據庫和關係型數據庫之間的不同
關係型數據庫存在很多相關聯的表中存取數據,而且這些表會被很多行、列所分割。表之間會通過以列存儲的外鍵,來相互關聯。當查詢數據的時候,如果數據級別比較大,可能一條企望的數據會涉及到數十張表(甚至上百張)也不爲怪,我們會將它們通過各種條件相關聯;當寫數據的時候也是一樣。不是嗎?
但是,NoSql數據庫則不然。它們有一個非常不同的存儲模型。比如說,一個面向文檔存儲的NoSql數據庫(如:MongoDB),它會將你想要存儲的數據以類JSON形式存儲、聚合到文檔裏持久化到硬盤,每個文檔可以被看做一個Object來提供給你的程序代碼使用。而這一個JSON文檔格式的Object可能涵蓋你使用關係型數據庫的數十個表的數據,無論讀還是寫。這不是很高效、便捷嗎?
另一個主要的不同是,關係型數據庫都需要一些模式(schema),但是NoSql數據庫不需要。在往數據庫寫入數據之前,關係型數據庫要求用戶首先定義一個模式;但是一旦模式定義好且插入數據後,再修改模式是一件非常麻煩、極具破壞性的事,所以這種情況需要避免發生。這種侷限性,在大數據時代是不被看好的,應用程序開發人員希望不斷、快速地修改、合併數據以豐富他們的應用程序。相比之下,NoSql數據庫則能滿足這一點,比如面向文檔的database允許用戶自由的添加字段到JSON文檔中而不需要事先定義一些結構;被插入數據庫的數據格式也可以隨時更改,而不會給應用程序帶來破壞性。
不過大部分NoSql數據庫是不提供關係型數據庫所有的ACID(atomicity, consistency, isolation, durability)事物保證的,但是它們有獨到的容錯機制。
NoSql Database 種類
NoSql如今已經支持key-value存儲,document存儲,BigTable和graph存儲等;如今流行的軟件有MongoDB,Cassandra,CouchDB,HBase等,都是Nosql類數據庫。
1.Key-value 存儲是最簡單的Nosql數據庫存儲形式。在數據庫中每個獨立的條目都是一對key和value的組合,此類庫有Riak 和Voldemort;像Redis這類數據庫,還支持不同數據類型的value,比如
2.Document database 也可看着key-"value"存儲,只不過這個value被稱爲文檔(document)。此文檔可以是複雜的數據結構:可以包含很多key-value對,或者很多key-array對,抑或是嵌套的文檔結構。
3.Graph 存儲主要關於網絡相關的信息,比如社交關係等。相關數據庫有:Neo4J和HyperGraphDB。
4.Wide-column 存儲是針對大數據進行優化的存儲方式,而且是以列存儲代替了傳統的行存儲,例如:Cassandra和HBase。
爲什麼使用 NoSQL 數據庫?
1.NoSql能夠靈活的捕獲非結構、半結構化的數據的大數據
數據變得越來越容易通過第三方應用來捕獲,比如Facebook和D&B等其他應用。個人用戶信息,地理位置數據,社交圖表,用戶所屬的內容,設備使用日誌以及傳感器等生成的數據等都是能不斷被捕獲的結構不固定的數據集。而開發人員可以使用這些數據來豐富現有的應用或者開發新的應用也並不奇怪。所以這些數據的使用正在迅速的改變通信、購物、廣告、娛樂以及關係管理原有的樣子。然而,不能充分利用這些數據的App將會逐漸被淘汰。
開發人員需要一個非常靈活、高效的數據庫,可以輕鬆適應新的數據類型並且不會受到來自第三方數據提供者內容結構更改的影響,因爲這些數據大部分數據都是非結構化、半結構化的。不幸的是,關係型數據庫都有固定的schema以及一些固定的表結構,很難適應各種變化的海量數據模型。但是NoSql提供了可以更好的映射這些需求的數據模型。
很多應用程序都可能從這種非結構化數據模型中獲益:諸如CRM,ERP,BPM等工具可以使用這種靈活性來存儲他們的數據,而無需在表中執行更改或在數據庫中創建通用列。這些數據庫也適用於創建原型或快速應用程序,因爲它們本身的這種靈活性便非常適合、容易開發新功能。
2.NoSql非常容易擴展
如果數百萬用戶頻繁且併發使用您的應用,則需要考慮可擴展的數據庫技術,而不是傳統的RDBMS。在保證用戶使用性能需求的其他下,應用程序開發人員發現,使用關係型技術,要獲得動態可伸縮性和他們所需的擴展級別是很困難的,甚至是不可能的。所以,需要切換NoSql數據庫來應對這些變化。
對於雲應用程序,關係數據庫最初是最受歡迎的選擇。然而,它們的使用越來越成問題,因爲它們是一種集中式的、分享一切的技術,可以擴大而不是放大。這使他們不適合需要簡單和動態可擴展性的應用程序。NoSQL數據庫已經從頭建立起來,成爲分佈式,橫向擴展技術,因此更適合三層Internet體系結構的高度分佈式特性。


Copyright © 2018 Ansel. All rights reserved. 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章