NoSQL 初探

Jujay發表於2011-10-11
1. 什麼叫NoSQL?
NoSQL一詞首先是Carlo Strozzi在1998年提出來的,指的是他開發的一個沒有SQL功能,輕量級的,開源的關係型資料庫。注意,這個定義跟我們現在對NoSQL的定義有很大的區別,它確確實實字如其名,指的就是“沒有SQL”的資料庫。但是NoSQL的發展慢慢偏離了初衷,Carlo Strozzi也發覺,其實我們要的不是"no sql",而應該是"no relational",也就是我們現在常說的非關係型資料庫了。

2009年初,Johan Oskarsson舉辦了一場關於開源分散式資料庫的討論,Eric Evans在這次討論中再次提出了NoSQL一詞,用於指代那些非關係型的,分散式的,且一般不保證遵循ACID原則的資料儲存系統的出現和興起。 Eric Evans使用NoSQL這個詞,並不是因為字面上的“沒有SQL”的意思,他只是覺得很多經典的關係型資料庫名字都叫"**SQL"(例如 MySQL,MS SQL,PostgreSQL),所以為了表示跟這些關係型資料庫在定位上的截然不同,就用了"NoSQL"一詞。

2. 傳統關係型資料庫有哪些瓶頸?
隨著像Facebook, Twitter等SNS web2.0網站的興起,傳統的關係型資料庫面對以下的“3高”問題,已經越來越力不從心了。
1) 高併發讀寫需求
Web 2.0網站的使用者併發性非常高,往往達到每秒上萬次讀寫請求,對於傳統的關係型資料庫來說,硬碟I/O會是一個很大的瓶頸。
2) 海量資料的高效率讀寫
Web 2.0網站每天產生的資料量是巨大的,對於關係型資料庫來說,在一張包含海量資料的表中查詢,效率是非常低的。
3) 高擴充套件性和可用性
Normal 0 false false false EN-US ZH-CN X-NONE在基於web的架構當中,資料庫是最難進行橫向擴充套件的,當一個應用系統的使用者量和訪問量與日俱增的時候,你的資料庫卻沒有辦法像web serverapp server那樣簡單的通過新增更多的硬體和服務節點來擴充套件效能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行升級和擴充套件 是非常痛苦的事情,往往需要停機維護和資料遷移,為什麼資料庫不能通過不斷的新增伺服器節點來實現擴充套件呢?

對於Web 2.0網站來說,關係型資料庫的很多特性不再需要了,比如:

1) 事務一致性
關係型資料庫在對事物一致性的維護中有很大的開銷,而現在很多Web 2.0系統對事物的讀寫一致性都不高。
2) 讀寫實時性
Normal 0 false false false EN-US ZH-CN X-NONE對關聯式資料庫來說,插入一條資料之後立刻查詢,是肯定可以讀出來這條資料的,但是對於很多web應用來說,並不要求這麼高的實時性,比方說發一條訊息之 後,過幾秒乃至十幾秒之後,我的訂閱者才看到這條動態是完全可以接受的。
3) 複雜SQL,特別是多表關聯查詢
Normal 0 false false false EN-US ZH-CN X-NONE任何大資料量的web系統,都非常忌諱多個大表的關聯查詢,以及複雜的資料分析型別的複雜SQL報表查詢,特別是SNS型別的網站,從需求以及產品設計角 度,就避免了這種情況的產生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大的弱化了。

3. NoSQL的主要產品有哪些?
1) Normal 0 false false false EN-US ZH-CN X-NONE滿足極高併發讀寫需求的Key-Value資料庫:RedisTokyo Cabinet Flare
Key-value型別資料庫的特點是把這個資料庫系統都載入到記憶體,定期通過非同步操作把資料庫刷到磁碟上,因為是純記憶體操作,這類資料庫效能非常快,但是缺點就是資料庫容量受實體記憶體限制,無法用於海量資料的讀寫。
2) 滿足海量資料讀寫和麵向文件的資料庫: MongoDB,CouchDB
面向文件的資料庫保證海量資料儲存的同時,還具有良好的查詢效能,注意:這裡只是提高了讀效能,而寫效能卻無法做到顯著提高。
3) 滿足高擴充套件性和可用性的面向分散式計算的資料庫: Normal 0 false false false EN-US ZH-CN X-NONE,Hadoop,HBase,Voldemort
Normal 0 false false false EN-US ZH-CN X-NONE面向scale能力的資料庫其實主要解決的問題領域和上述兩類資料庫還不太一樣,它首先必須是一個分散式的資料庫系統,由分佈在不同節點上面的資料庫共同構成一個資料庫服務系統,並且根據這種分散式架構來提供online的,具有彈性的可擴充套件能力,例如可以不停機的新增更多資料節點,刪除資料節點等等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26277071/viewspace-708958/,如需轉載,請註明出處,否則將追究法律責任。