本文是對《Will NoSQL Databases Live Up to Their Promise?》一文的簡要翻譯。翻譯中省略了人名、研究機構名稱,只翻譯了作者自己或者作者引用的他人觀點。
【原文下載地址】
與關系型數據庫相比,NoSQL數據庫最大的優勢是它們能高效地處理非結構化的數據,如字符文件、郵件、多媒體、社交媒體等。一些NoSQL數據庫可以運行在分布式的環境中,因此可以用多個較廉價的設備來完成一台高性能服務器的功能。
一些NoSQL的支持者認為,NoSQL有更好的性能,這對於大數據的處理是很重要的。
最早提出和使用NoSQL技術的公司是那些在WEB2.0浪潮擁中有大數據量,且數據增長速度極快的公司,如amazon和google。
關系型數據庫的局限性:
規模。當數據規模變得很大時,一台服務器就裝不完所有的表格了,這時候就需要進行分布式處理。但是將關系型數據庫進行分布式處理是不是一件容易的事情,因為將不同機器上的表格join到一起很困難。另外,關系型數據庫並不是設計來進行數據分割的,因此對它們進行分布式的功能划分是一件累人又麻煩的工作。
復雜性。關系型數據庫需要將數據轉換到表格中。當一類數據不容易轉換為表格類數據時,其所對應的關系型數據庫的結構將變得復雜且難以使用。
SQL。SQL對於處理結構化數據是很有效的,但對於非結構化數據就顯得力不從心了。
大量的約束條件。關系型數據庫提出了嚴格的約束條件及數據完備性要求。但NoSQL的支持者認為數據庫的使用者通常並不需要那么嚴格的約束條件,並且不喜歡這些約束條件所造成的成本及為系統增加的復雜性。
由於關系型數據所固有的這些局限性,供應商及用戶開始逐漸轉向NoSQL數據庫。一個關鍵的事件發生在2007年,amazon發表了一篇論文,介紹了內部使用的Dynamo distributed NoSQL系統。Amazon是最早使用非關系型數據庫來存儲公司數據的企業之一。
有三種比較常見的NoSQL數據庫:
Key-value存儲(key-value stores)
正像其名字所暗示的那樣,Key-value存儲就是使用key來檢索value的系統。對於結構化或非結構化的數據,這類系統均可應對。Amazon的SimpleDB是一個網絡服務,用來提供雲端的核心數據庫服務,包括檢索和查詢數據。它提供了一個簡單的API來存儲和獲取數據。對用戶實行按使用量來收費的政策。
Uppsala大學的AmosⅡ是一個科研樣機,它可以作為一個獨立的數據庫系統或作為其他應用的前端來使用。
其他例子還有Scalaris,一個可以用於WEB 2.0服務中的可擴展及分布式的數據庫。
列式數據庫(column-oriented database)
相比於存儲一些列高度結構化的,將行列以統一格式進行規范的關系型數據庫相比,列式數據庫包含了一個可擴展的列(column),列中存儲的是closely related的數據。
這類數據庫的代表有Facebook創造的高性能Cassandra,還有Apache開發的分布式開源數據庫Hbase。Hbase其實是效仿了Google的Big Table。
基於文件的存儲(document-based stores)
這類數據庫將數據以文件集合的方式進行存儲和組織。在這種方式下,用戶可以增加任意多的任意長度的域(fields)到一個文件中。不像關系型數據那樣需要受到column數量及每個record記錄大小的限制。
這方面的例子有Apache主持的CouchDB,它是一個用Erlang編寫的開源、可擴展的數據庫,可以說使用任意方式來瀏覽數據庫中的數據。除CouchDB外,還有受到10gen資助的MongoDB數據庫。MongoDB數據庫是一個開源的文件型數據庫,旨在與提供易於使用的又具有良好擴展性的數據庫服務。另外,還有Basho Technologies出品的Riak數據庫,Riak是一個分布式、可擴展的離散型數據庫,它也是開源數據庫,並且適用於基於web的應用。
開源
大部分的NoSQL數據庫都是開源的,這也反映了全球軟件市場的一種發展趨勢。
譯者注:開源軟件的最大好處是可以集眾人之力快速將軟件開發收斂到穩定版本,其盈利模式一般是通過軟件的周邊產品來賺錢,如提供技術支持、認證或提供更豐富功能的版本等。
NoSQL的優勢與弊端
優勢:
NoSQL通常情況下運行速度比關系型數據庫快。關系型數據庫一般用在商業交易上,因此需要很高的精准度。因此所有的數據都必須滿足ACID(原子性、一致性、隔離性、持久性)原則。正是為了滿足ACID原則才導致關系型數據庫的數據較慢。
為了提高性能,開發人員一般不要求自己的NoSQL滿足ACID原則,不過這樣會導致在開發一些高精准度的應用時出現問題。
NoSQL速度比較快的另一個原因在於它的數據模型一般比較簡單(Kyle Banker, 10gen工程師)。Kyle 說:“這是一個在速度與模型復雜性之間的權衡,但通常情況下犧牲一定的復雜性換取速度是值得的。”
弊端:
①復雜性與開銷
由於NoSQL數據庫不使用SQL語言,因此它們需要使用手冊中指定的查詢語句進行操作。在執行一些簡單的任務時速度很快,但是當任務逐漸變復雜時,耗費的時間會很長。
②可靠性
關系型數據庫天生支持ACID約束,但NoSQL數據庫則不然。因此NoSQL數據庫無法天然地支持ACID約束所帶來的可靠性。如果用戶希望NoSQL數據庫可以支持ACID約束,那么還需要額外的編程來實現。
③一致性
由於NoSQL數據庫並不天然地支持ACID約束,因此它可能無法滿足數據一致性,除非手冊中提供這樣的支持。不提供一致性可以讓數據庫中的數據更靈活也更容易擴展,但是這也會在某類特定應用中變成一種難題,如銀行業務等。
④對技術不熟悉
由於很多組織對NoSQL數據庫還不熟悉,因此在挑選產品時沒有足夠的背景資料來幫助他們進行數據庫產品間的對比,也不知道是否NoSQL數據庫更符合他們的需求。
⑤有限的生態結構
不像商用的關系型數據庫,很多開源的NoSQL應用還不提供商業支持或管理工具。
展望
在接下來的五年中,NoSQL的支持者們會專注於NoSQL的兼容性和管理工具的開發。並且NoSQL技術會大規模的應用在有擴展性需求的非結構化數據上。但是NoSQL的市場份額還是會很小,因為關系型數據庫更為成熟而且擁有更多供應商與用戶的投資。
在最近的一兩年內,NoSQL數據庫主要還是被用於特定類型的項目,如分布式項目、大數據量的項目或要求具有良好擴展性的項目,但越來越多不同類型的項目會開始考慮使用NoSQL數據庫。
NoSQL數據庫並不會取代關系型數據庫,但是它會是某些特定類型項目的最佳選擇。以后用戶在為自己的數據選擇數據庫時,將會有關系型數據庫之外的其他選擇。用戶將根據自己的需求來選擇合適的數據庫類型。
作者信息:
Editor: Lee Garber, Computer,
l.garber@computer.org