引言
隨著雲計算時代的到來,各種類型的互聯網應用層出不窮,對與此相關的資料模型、分散式架構、資料存儲等資料庫相關的技術指標也提出了新的要求。 雖然傳統的關聯式資料庫已在資料存儲方面佔據了不可動搖的地位,但由於其天生的限制,已經越來越無法滿足雲計算時代對資料擴展、讀寫速度、支撐容量以及建設和運營成本的要求。 雲計算時代對資料庫技術提出了新的需求,主要表現在以下幾個方面。
●海量資料處理:對類似搜尋引擎和電信運營商級的經營分析系統這樣大型的應用而言,需要能夠處理PB級的資料,同時應對百萬級的流量。
●大規模集群管理:分散式應用可以更加簡單地部署、應用和管理。
●低延遲讀寫速度:快速的回應速度能夠極大地提高使用者的滿意度。
●建設及運營成本:雲計算應用的基本要求是希望在硬體成本、軟體成本以及人力成本方面都有大幅度的降低。
關聯式資料庫的劣勢分析
隨著Web2.0的發展,傳統的關聯式資料庫在應對超大規模和高併發的SNS類型的網站方面暴露了許多難以克服的問題,主要表現在以下方面。
(1)高併發讀寫速度慢
這種情況主要發生在資料量達到一定規模時,由於關聯式資料庫的系統邏輯非常複雜,使得其非常容易發生鎖死等併發問題,導致其讀寫速度下降非常嚴重。 例如,Web2.0網站要根據使用者個人化資訊來即時生成動態頁面、提供動態資訊,所以基本上無法使用動態頁面靜態化技術,因此資料庫併發負載非常高,往往要達到每秒上萬次讀寫請求。 關聯式資料庫勉強可以應付上萬次SQL查詢,硬碟I/O往往無法承擔上萬次的SQL寫資料請求。
(2)支撐容量有限
類似Facebook、Twitter這樣的SNS網站,使用者每天產生海量的使用者動態,每月會產生幾億條使用者動態,對於關聯式資料庫來說,在一張數億條記錄的表裡面進行SQL查詢,效率是極其低下乃至不可忍受的。
(3)擴充性差
在基於Web的架構當中,資料庫是最難進行橫向擴展的,當一個應用系統的使用者量和訪問量與日俱增的時候,傳統的關聯式資料庫卻沒有辦法像Web Server那樣簡單地通過添加更多的硬體和服務節點來擴充性能和負載能力。 對於很多需要提供不間斷服務的網站來說,對資料庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和資料移轉,因此迫切需要關聯式資料庫也能夠通過不斷添加伺服器節點來實現擴展。
(4)建設和運維成本高
企業級資料庫的價格很高,並且隨著系統的規模增大而不斷上升。 高昂的建設和運維成本無法滿足雲計算應用對資料庫的需求。
關聯式資料庫遇到上述難以克服的瓶頸,與此同時,它的很多主要特性在雲計算應用中卻往往無用武之地,例如:資料庫事務一致性、資料庫的寫即時性和讀即時性、複雜的SQL查詢特別是多表關聯查詢。 因此,傳統的關聯式資料庫已經無法獨立應付雲計算時代的各種應用。
NoSQL資料庫資料模型
關聯式資料庫越來越無法滿足雲計算的應用場景,為了解決此類問題,非關聯式資料庫應運而生,由於在設計上和傳統的關聯式資料庫相比有了很大的不同,所以此類資料庫被稱為「NoSQL(Not only SQL)」系列資料庫。 與關聯式資料庫相比,它們非常關注對資料高併發讀寫和海量資料的存儲,在架構和資料模型方面作了簡化,而在擴展和併發等方面作了增強。 目前,主流的NoSQL資料庫包括BigTable、HBase、Cassandra、SimpleDB、CouchDB、MongoDB以及Redis等。 NoSQL常用資料模型包括以下3種。
(1)Column-oriented(列式)
列式主要使用Table這樣的模型,但是它並不支援類似Join這樣多表的操作,它的主要特點是在存儲資料時,主要圍繞著「列(Column)」,而不是像傳統的關聯式資料庫那樣根據「行(Row)」進行存儲,也就是說, 屬於同一列的資料會盡可能地存儲在硬碟同一個頁中,而不是將屬於同一個行的資料存放在一起。 這樣做的好處是,對於很多類似資料倉儲的應用,雖然每次查詢都會處理很多資料,但是每次所涉及的列並沒有很多。 使用列式資料庫,將會節省大量I/O,並且大多數列式資料庫都支援Column Family這個特性,能將多個列並為一個小組。 這樣做的好處是能將相似列放在一起存儲,提高這些列的存儲和查詢效率。 總體而言,這種資料模型的優點是比較適合匯總和資料倉儲這類應用。
(2)Key-value
雖然Key-value這種模型和傳統的關聯式相比較簡單,有點類似常見的HashTable,一個Key對應一個Value,但是它能提供非常快的查詢速度、大的資料存放量和高併發操作,非常適合通過主鍵對資料進行查詢和修改等操作 ,雖然不支援複雜的操作,但是可以通過上層的開發來彌補這個缺陷。
(3)Document(文檔)
在結構上,Document和Key-value是非常相似的,也是一個Key對應一個Value,但是這個Value主要以JSON或者XML等格式的文檔來進行存儲,是有語義的,並且Document DB一般可以對Value來創建Secondary Index來方便上層的應用,而這點是普通Key-Value DB所無法支援的。
常用NoSQL資料庫比較及優劣勢分析
(1)主要NoSQL資料庫比較
從設計理念、資料模式、分散式等幾個角度對BigTable、Cassandra、Redis、MongoDB進行比較,見表1.
(2) NoSQL資料庫的優勢分析
NoSQL資料庫主要有以下優勢:
●擴展簡單,典型例子是Cassandra,由於其架構類似于經典的P2P,因此能夠通過簡單添加新的節點來擴展集群;
●讀寫快速,典型例子是Redis,由於其邏輯簡單,純記憶體操作,因此其具有非常出色的性能,單節點每秒可以處理超過10萬次的讀寫操作;
●成本低廉,因為大多數NoSQL資料庫都是開源軟體,沒有昂貴的成本限制。
(3)NoSQL資料庫的劣勢分析
雖然NoSQL具有很多顯著的優勢,但是依然存在很多不足,主要表現在:
●不提供對SQL的支援,將會對使用者產生一定的應用遷移成本,同時,無法實現組合應用,發揮SQL資料庫已經非常成熟的優勢;
●支援的特性不夠豐富,現有NoSQL資料庫提供的功能十分有限,大多數都不支援事務和其他附加功能;
●產品不夠成熟,大多數NoSQL資料庫產品還處於初級階段,與已經非常完善成熟的關聯式資料庫不可同日而語。
結束語
雲計算主要常見的有兩類場景:需要低延遲和高併發的讀寫能力,資料量雖大,但不超過TB級別,大部分現在使用RDBMS的Web應用基本上都屬於這一類,類似傳統的OLTP(線上交易處理);海量資料的存儲和操作,如PB級別的, 這方面的例子有傳統的資料倉儲、Google海量的Web頁面和圖片存儲等,類似傳統的OLAP(線上分析處理)。 目前,業界還沒有一款資料庫能同時適應上述多種雲計算場景的NoSQL資料庫。 考慮到PaaS平臺的需求比較複雜,能夠在後臺進行定制化的資料庫將是未來發展的趨勢,因此,羽量級的、兼顧高可擴展和高可靠性的架構設計將會受到歡迎。
(責任編輯:呂光)