NoSQL

NoSQL,指的是非關係型的數據庫。隨着互聯網web2.0網站的興起,傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的數據庫則由於其本身的特點得到了非常迅速的發展。

編輯本段簡介

  NoSQL,意即反SQL運動,是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於目前鋪天蓋地的關係型數據庫運用,這一概念無疑是一種全新的思維的注入。

編輯本段現今狀況

  現今的計算機體系結構在數據存儲方面要求具備龐大的水平擴展性①,而NoSQL致力於改變這一現狀。目前Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型數據庫。   NoSQL項目的名字上看不出什麼相同之處,但是,它們通常在某些方面相同:它們可以處理超大量的數據。   這場革命目前仍然需要等待。的確,NoSQL對大型企業來說還不是主流,但是,一兩年之後很可能就會變個樣子。在NoSQL運動的最新一次聚會中,來自世界各地的150人擠滿了CBS Interactive的一間會議室。分享他們如何推翻緩慢而昂貴的關係數據庫的暴政,怎樣使用更有效和更便宜的方法來管理數據。   “關係型數據庫給你強加了太多東西。它們要你強行修改對象數據,以滿足RDBMS (relational database management system,關係型數據庫管理系統)的需要,”在NoSQL擁護者們看來,基於NoSQL的替代方案“只是給你所需要的”。   1.水平擴展性(horizontal scalability)指能夠連接多個軟硬件的特性,這樣可以將多個服務器從邏輯上看成一個實體。

編輯本段我們爲什麼要使用NOSQL非關係數據庫?

  隨着互聯網web2.0網站的興起,非關係型的數據庫現在成了一個極其熱門的新領域,非關係數據庫產品的發展非常迅速。而傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,例如:   1、High performance - 對數據庫高併發讀寫的需求   web2.0網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,所以基本上無法使用動態頁面靜態化技術,因此數據庫併發負載非常高,往往要達到每秒上萬次讀寫請求。關係數據庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬盤IO就已經無法承受了。其實對於普通的BBS網站,往往也存在對高併發寫請求的需求。   2、Huge Storage - 對海量數據的高效率存儲和訪問的需求   對於大型的SNS網站,每天用戶產生海量的用戶動態,以國外的Friendfeed爲例,一個月就達到了2.5億條用戶動態,對於關係數據庫來說,在一張2.5億條記錄的表裏面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登錄系統,例如騰訊,盛大,動輒數以億計的帳號,關係數據庫也很難應付。   3、High Scalability && High Availability- 對數據庫的高可擴展性和高可用性的需求   在基於web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,你的數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移,爲什麼數據庫不能通過不斷的添加服務器節點來實現擴展呢?   在上面提到的“三高”需求面前,關係數據庫遇到了難以克服的障礙,而對於web2.0網站來說,關係數據庫的很多主要特性卻往往無用武之地,例如:   1、數據庫事務一致性需求   很多web實時系統並不要求嚴格的數據庫事務,對讀一致性的要求很低,有些場合對寫一致性要求也不高。因此數據庫事務管理成了數據庫高負載下一個沉重的負擔。   2、數據庫的寫實時性和讀實時性需求   對關係數據庫來說,插入一條數據之後立刻查詢,是肯定可以讀出來這條數據的,但是對於很多web應用來說,並不要求這麼高的實時性。   3、對複雜的SQL查詢,特別是多表關聯查詢的需求   任何大數據量的web系統,都非常忌諱多個大表的關聯查詢,以及複雜的數據分析類型的複雜SQL報表查詢,特別是SNS類型的網站,從需求以及產品設計角度,就避免了這種情況的產生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大的弱化了。   因此,關係數據庫在這些越來越多的應用場景下顯得不那麼合適了,爲了解決這類問題的非關係數據庫應運而生。   NoSQL 是非關係型數據存儲的廣義定義。它打破了長久以來關係型數據庫與ACID理論大一統的局面。NoSQL 數據存儲不需要固定的表結構,通常也不存在連接操作。在大數據存取上具備關係型數據庫無法比擬的性能優勢。該術語在 2009 年初得到了廣泛認同。   當今的應用體系結構需要數據存儲在橫向伸縮性上能夠滿足需求。而 NoSQL 存儲就是爲了實現這個需求。Google 的BigTable與Amazon的Dynamo是非常成功的商業 NoSQL 實現。一些開源的 NoSQL 體系,如Facebook 的Cassandra, Apache 的HBase,也得到了廣泛認同。從這些NoSQL項目的名字上看不出什麼相同之處:Hadoop、Voldemort、Dynomite,還有其它很多。

編輯本段特點

  它們可以處理超大量的數據。   它們運行在便宜的PC服務器集羣上。   PC集羣擴充起來非常方便並且成本很低,避免了“sharding”操作的複雜性和成本。   它們擊碎了性能瓶頸。   NoSQL的支持者稱,通過NoSQL架構可以省去將Web或Java應用和數據轉換成SQL友好格式的時間,執行速度變得更快。   “SQL並非適用於所有的程序代碼,” 對於那些繁重的重複操作的數據,SQL值得花錢。但是當數據庫結構非常簡單時,SQL可能沒有太大用處。   沒有過多的操作。   雖然NoSQL的支持者也承認關係數據庫提供了無可比擬的功能集合,而且在數據完整性上也發揮絕對穩定,他們同時也表示,企業的具體需求可能沒有那麼多。   Bootstrap支持   因爲NoSQL項目都是開源的,因此它們缺乏供應商提供的正式支持。這一點它們與大多數開源項目一樣,不得不從社區中尋求支持。

編輯本段缺點

  但是一些人承認,沒有正式的官方支持,萬一出了差錯會是可怕的,至少很多管理人員是這樣看。   “我們確實需要做一些說服工作,”,“但基本在他們看到我們的第一個原型運行良好之後,我們就能夠說服他們,這是條正確的道路。”
發佈了14 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章