NoSQL不是產品,是一項運動
---->NoSQL(NoSQL = Not Only SQL ),意即反SQL運動,是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢愈加高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於目前鋪天蓋地的關係型數據庫運用,這一律念無疑是一種全新的思惟的注入
---->NoSQL 項目的名字上看不出什麼相同之處,可是,它們一般在某些方面相同:它們能夠處理超大量的數據
---->現今的計算機體系結構在數據存儲方面要求應用架構具有龐大的水平擴展性,而 NoSQL 正在致力於改變這一現狀。目前新浪微博的 Redis 和 Google 的 Bigtable 以及 Amazon 的 SimpleDB使用的就是 NoSQL 型數據庫
NoSQL產品的優勢和缺點
---->優勢:高併發讀寫,海量數據存儲,高可擴展性,高可用性
---->缺點:缺少事務一致性,缺少讀寫實時性,不支持複雜查詢
NOSQL數據庫類型
類型====>簡介
key-value ====>Key 指向 Value 的鍵值對,一般用hash table來實現產品:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB
列式數據庫===>以列簇式存儲,將同一列數據存在一塊兒產品:Cassandra, HBase, Riak
文檔型數據庫===>Key-Value對應的鍵值對,Value爲結構化數據產品:CouchDB, MongoDB
圖結構數據庫===>以「圖」爲基本存儲模型產品:Neo4J, InfoGrid, Infinite Graph
爲何是NOsql產品火爆起來? 爲何是 NoSQL?
隨着互聯網 web2.0 網站的興起,非關係型的數據庫如今成了一個極其熱門的新領域,非關係數據庫產品的發展很是迅速,而傳統的關係型數據庫在應付 web2.0 網站,特別是超大規模和高併發的 SNS 類型的web2.0 純動態網站已經顯得力不從心,暴露了不少難以克服的問題,例如:
第一高: High performance - 對數據庫高併發讀寫的需求
web2.0 網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,因此基本上沒法使用動態頁面靜態化技術,所以數據庫併發負載很是高,每每要達到每秒上萬次讀寫請求。關係型數據庫應付上萬次 SQL 查詢還勉強頂得住,可是應付上萬次 SQL 寫數據請求,硬盤IO 就已經沒法承受了,其實對於普通的 BBS 網站,每每也存在對高併發寫請求的需求。
第二高:Huge Storage - 對海量數據的高效率存儲和訪問的需求
對於大型的 SNS 網站,天天用戶產生海量的用戶動態信息,以國外的 Friend feed 爲例,一個月就達到了 2.5 億條用戶動態,對於關係數據庫來講,在一張 2.5 億條記錄的表裏面進行SQL 查詢,效率是極其低下乃至不可忍受的。再例如大型 web 網站的用戶登陸系統,例如騰訊,盛大,動輒數以億計的賬號,關係數據庫也很難應付。
第三高:High Scalability && High Availability - 對數據庫的高可擴展性和高可用性的需求
在基於 web 的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,你的數據庫卻沒有辦法像 web server 和 app server 那樣簡單的經過添加更多的硬件和服務節點來擴展性能和負載能力。對於不少須要提供 24 小時不間斷服務的網站來講,對數據庫系統進行升級和擴展是很是痛苦的事情,每每須要停機維護和數據遷移,但是停機維護隨之帶來的就是公司收入的減小。
在上面提到的「三高」需求面前,關係數據庫遇到了難以克服的障礙,而對於 web2.0 網站來講,關係數據庫的不少主要特性卻每每無用武之地,例如:
【1】 數據庫事務一致性需求
不少 web 實時系統並不要求嚴格的數據庫事務,對讀一致性的要求很低,有些場合對寫一致性要求也不高。所以數據庫事務管理成了數據庫高負載下一個沉重的負擔。
【2】數據庫的寫實時性和讀實時性需求
對關係數據庫來講,插入一條數據以後馬上查詢,是確定能夠讀出來這條數據的,可是對於不少 web 應用來講,並不要求這麼高的實時性。
【3】 對複雜的 SQL 查詢,
查詢 , 特別是多表關聯查詢的需求任何大數據量的 web 系統,都很是忌諱多個大表的關聯查詢,以及複雜的數據分析類型的複雜 SQL 報表查詢,特別是 SNS 類型的網站,從需求以及產品設計角度,就避免了這種狀況的產生。每每更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL 的功能被極大的弱化了。所以,關係數據庫在這些愈來愈多的應用場景下顯得不那麼合適了,爲了解決這類問題的NoSQL 數據庫應運而生。
NoSQL 是非關係型數據存儲的廣義定義。它打破了長久以來關係型數據庫與 ACID 理論大一統的局面。NoSQL 數據存儲不須要固定的表結構,一般也不存在鏈接操做。在大數據存取上具有關係型數據庫沒法比擬的性能優點,該概念在 2009 年初獲得了普遍認同。
當今的應用體系結構須要數據存儲在橫向伸縮性上可以知足需求。而 NoSQL 存儲就是爲了實現這個需求。Google 的 BigTable 與 Amazon 的 Dynamo 是很是成功的商業 NoSQL 實現。一些開源的 NoSQL 體系,如 Facebook 的 Cassandra, Apache 的 HBase,也獲得了普遍認同。從這些 NoSQL 項目的名字上看不出什麼相同之處:Hadoop、Voldemort、Dynomite,還有其它不少,但它們都有一個共同的特色,就是要改變你們對數據庫在傳統意義上的理解。web