程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> NoSQL 非關系型的數據庫,nosql數據庫

NoSQL 非關系型的數據庫,nosql數據庫

編輯:MySQL綜合教程

NoSQL 非關系型的數據庫,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查詢,效率是極其低下乃至不可忍受的。

3、High Scalability && High Availability- 對數據庫的高可擴展性和高可用性的需求

目前新浪微博的Redis 和Google 的Bigtable 以及Amazon 的SimpleDB使用的就是NoSQL 型數據庫。

NoSQL 優點:

1、易擴展

NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。

2、大數據量,高性能

NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關系性,數據庫的結構簡單。一般MySQL使用 Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的 Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。

3、靈活的數據模型

NoSQL無需事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關系數據庫裡,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢。這點在大數據量的web2.0時代尤其明顯。

NoSQL在不太影響性能的情況,就可以方便的實現高可用的架構。比如Cassandra,HBase模型,通過復制模型也能實現高可用。

NoSQL數據庫最主流的有文檔數據庫,列存數據庫,鍵值數據庫,三者分別有代表作MongoDB,HBase和Redis。

如果將NoSQL比作兵器的話,可以這樣(MySQL是典型的關系型數據庫,一樣參與比較):

 

1、MySQL產生年代較早,而且隨著LAMP大潮得以成熟。

盡管其沒有什麼大的改進,但是新興的互聯網使用的最多的數據庫。就像傳統的菜刀,結構簡單,幾百年沒有改進。但是不妨礙產生各式各樣的刀法,只要有一把,就能勝任廚房裡的大部分事務。MySQL也是一樣,核心已經穩定。但是切庫,分表,備份,監控,等等手段一應俱全。

2、MongoDB是個新生事物,提供更靈活的Schema,Capped Collection,異步提交,地理位置索引等五花十色的功能。

就像瑞士軍刀,不但可以當刀用,還可以開瓶蓋,剪指甲。但是他也不比MySQL強,因為還缺乏時間的磨砺。一是系統本身的穩定性,二是開發,運維需要更多經驗才能流行。

3、HBase是個仗勢欺人的大象兵。依仗著Hadoop的生態環境,可以有很好的擴展性。

但是就像象兵一樣,使用者需要養一頭大象(Hadoop),才能驅使他。

4、Redis是鍵值存儲的代表,功能最簡單。提供隨機數據存儲。

就像一根棒子一樣,沒有多余的構造。但是也正是因此,他的伸縮性特別好。就像悟空手裡的金箍棒,大可捅破天,小能成縮成針。

針對這兩個夢魇。文檔數據庫如MongoDB的的主要目的是 提供更豐富的數據結構來拋棄Join來適應在線業務。當然也不是MongoDB完全不能用Join,不能拿來做數據分析,討論這個只是見仁見智的問題。所以文檔數據庫並不比關系數據庫強大,由於對Join的弱支持,功能會弱許多。設計關系模型的時候,通常只需要考慮好數據直接的關系,定義數據模型。而設計文檔數據庫模型的時候,還需要考慮應用如何使用。因此設計好一個的文檔數據庫Schema比設計關系模型更加的困難。除此之外,由於文檔數據庫事務的支持也是比較弱,一般NoSQL只會提供一個行鎖。這也給設計Schema更加增加了難度。對於文檔數據庫的使用有很多需要注意的地方,本文只關注模型設計的部分。

Nosql數據庫的特點:

1、滿足極高讀寫性能需求的Kye-Value數據庫

2、滿足海量存儲需求和訪問的面向文檔的數據庫

面向文檔的非關系數據庫主要解決的問題不是高性能的並發讀寫,而是保證海量數據存儲的同時,具有良好的查詢性能。

文檔數據庫實際上是更高級的鍵/值(Key/Value)數據庫,允許在每個鍵上關聯嵌套的值.相對於每次簡單地返回整個BLOB(二進制對象)來講,文檔數據庫支持更高效的查詢.

3、滿足高可擴展性和可用性的面向分布式計算的數據庫

分布式的數據庫系統,由分布在不同節點上面的數據庫共同構成一個數據庫服務系統,具有彈性的可擴展能力,例如可以不停機的添加更多數據節點,刪除數據節點等等。

4、數據存儲不需要固定的表結構,每個記錄之間的列沒有任何限制。通常也不存在連接操作。

5、可以運行在便宜的PC服務器集群上。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved