在互聯網大數據時代的今天,互聯網的用戶可以為數以億計的用戶使用。而互聯網主要使用的技術是大數據與云計算,究其原因竟是傳統的關系型數據庫管理系統很難處理越來越多的數據,以及非結構化的數據。而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數據庫的全部內容,想了解更多關于NoSQL數據庫的信息,請繼續關注中培偉業。