【編者按】大數據應用程序究竟是選擇SQL還是NoSQL?VoltDB公司首席技術官Ryan Betts和Couchbase公司首席執行官Bob Wiederhold分別提出了不同的意見,同時借助多項論據來支持自己的說法,讓我們來看看他們是如何證明的。
免費訂閱“CSDN大數據”微信公眾號,實時了解最新的大數據進展!
CSDN大數據,專注大數據資訊、技術和經驗的分享和討論,提供Hadoop、Spark、Imapala、Storm、HBase、MongoDB、Solr、機器學習、智能算法等相關大數據觀點,大數據技術,大數據平臺,大數據實踐,大數據產業資訊等服務。
執行大數據【注】項目的企業面對的關鍵決策之一是使用哪個數據庫,SQL還是NoSQL?SQL有著驕人的業績,龐大的安裝基礎;而NoSQL正在獲得可觀的收益,且有很多支持者。我們來看看兩位專家對這個問題的看法。
VoltDB公司首席技術官Ryan Betts
結構化查詢語言(SQL)是經過時間考驗的勝利者,它已經主宰了幾十年,目前大數據公司和組織(例如谷歌、Facebook、Cloudera和Apache)正在積極投資于SQL。
在成為主導技術(例如SQL)后,有時候我們很容易忘記其優越性。SQL的獨特優勢包括:
雖然NoSQL的出現帶來了一些影響,但SQL仍然主導著市場,并在大數據領域贏得了很多投資和廣泛部署。
NoSQL的說法很含糊,對于本次討論,我借用Rick Cattell對NoSQL的定義,即提供簡單操作(例如密鑰/數值存儲)或簡單記錄和索引,并專注于這些簡單操作的橫向可擴展性的系統。
很顯然,現在很多新的數據庫并不是都一樣,認識每種數據庫背后的原理以及潛在問題是成功的關鍵。NoSQL的主要特點使其更適合于特定的問題。例如,圖形數據庫更適合于數據通過關系組織的情況,而專門的文本搜索系統更適合于需要實時搜索的情況。
在這里,讓我們看看SQL系統的主要優勢和差異化功能:
這聽起來像一個無趣的技術差異,但這很關鍵,原因在于:首先,聲明性SQL查詢更容易通過圖形化工具以及點擊報告構建器來構建。這讓分析師、操作員、管理者和其他不具備軟件編程能力的員工進行數據庫查詢;其次,數據庫引擎可以利用內部信息來選擇最有效的算法。改變數據庫的物理布局或數據庫,最佳算法仍然能夠計算出來。而在程序性系統中,編程人員需要重新訪問和重新編程算法,這是非常昂貴且容易出錯的過程。
市場理解這個關鍵區別。在2010年,谷歌宣布部署SQL來補充MapReduce,主要受內部用戶需求所驅動。最近,Facebook發布了Presto(一種SQL部署)來查詢其PB級HDFS集群。根據Facebook表示:“隨著我們的倉庫增長到PB級,以及我們的需求變化,我們清楚地意識到,我們需要一個提供低延時查詢的互動系統。”此外,Cloudera也正在構建Impala―另一個基于HDFS的SQL部署。
SQL用戶和程序員可用跨多個后端系統重復使用其API和UI知識,減少了應用程序的開發時間。標準化還允許聲明性第三方提取、轉換、加載(ETL)工具,使企業可以在數據庫之間以及跨系統傳輸數據。
SQL將繼續贏得市場份額,并會繼續看到新的投資和部署。NoSQL數據庫提供專有查詢語言或簡單的鍵值語義,而沒有更深層次的技術差異化。現代SQL系統提供可擴展性的同時,還支持更豐富的查詢語義,并有龐大的用戶安裝基礎,廣泛的生態系統整合和深度企業部署。
NoSQL更適合大數據應用程序
Couchbase公司首席執行官Bob Wiederhold
NoSQL越來越多地被認為是關系型數據庫的可行替代品,特別是對于大數據應用程序。此外,無模式數據模型通常更適合于現在捕捉和處理的數據種類和類型。
當我們談論NoSQL領域的大數據時,我們指的是從操作數據庫讀取和寫入。不要將操作數據庫與分析數據庫混淆,這通常會查看大量數據,并從這些數據獲取可視性。
雖然操作數據庫的大數據看起來不具有可分析性,但操作數據庫通常會存儲超大量用戶的大型數據集,這些用戶經常需要訪問數據來實時執行交易。這種數據庫的操作規模也解釋了NoSQL的關鍵特性,也就是為什么NoSQL是大數據應用程序的關鍵的原因。
每次技術行業經歷硬件發展的根本性轉變時,都會出現一個拐點。在數據庫領域,從縱向擴展到橫向擴展的轉變推動了NoSQL的發展。關系型數據庫(包括來自甲骨文和IBM的數據庫)是縱向擴展。也就是說,它們是集中式、共享一切的技術,只能通過增加更多昂貴的硬件來擴展。
而NoSQL數據庫是分布式橫向擴展技術。它們使用了分布式節點集(稱為集群)來提供高度彈性擴展功能,讓用戶可以添加節點來動態處理負載。
分布式橫向擴展的做法通常要比縱向做法更加便宜。商業關系型數據庫的授權費用也讓人望而卻步,因為他們的價格是按每臺服務器來計算。另一方面,NoSQL數據庫通常是開源技術,按照運行的服務器集群收費,而且價格相對便宜。
關系型數據庫和NoSQL數據模型有很大的不同。關系型模式獲取數據,并將數據分配到很多相互關聯的表中,這些表通過外鍵相互應用。
當用戶需要對數據集運行查詢時,所需信息需要從多個表中收集(通常涉及數百個企業應用程序),并結合這些信息,再提供給應用程序。同樣地,當寫入數據時,需要在多個表協調和執行寫入。當數據相對較少,并且,數據以較慢速度流入數據庫時,關系型數據庫通常能夠捕捉和存儲信息。然而,現在的應用程序通常需要快速寫入(和讀取)海量數據。
NoSQL數據庫采用非常不同的模式。在其核心,NoSQL數據庫其實是“NoREL”,或者說非關系型,這意味著它們沒有依賴于表以及表之間的聯系,以存儲和組織信息。例如,以文檔為導向的NoSQL數據庫獲取你想要存儲的數據,并采用JSON格式整合到文檔中。每個JSON文檔可以被你的應用程序視為一個對象。JSON文檔可能會提取跨越25個表的數據,將數據集成到一個文檔中。
聚合這些信息可能會導致信息重復,但由于存儲已不再是一個成本問題,數據模型靈活性、發布所產生文檔的簡便性以及讀取和寫入性能提高,讓這成為不錯的選擇。
通過第三方(包括社交媒體網站),數據正變得越來越容易捕捉和訪問。這些數據包括:個人用戶信息、地理位置數據、用戶生產的內容、機器記錄數據和傳感器產生的數據。企業還可以依賴于大數據來推動其關鍵任務型應用程序。同時,企業正在轉向到NoSQL數據庫,因為這種數據庫非常適合現在新型的數據類型。
開發人員想要一個靈活的數據庫,可以很容易適應新的數據類型,并且,不會受第三方數據供應商的內容結構變化的影響。大多數新數據是非結構化和半結構化,因此,開發人員也需要能夠有效存儲這些數據的數據庫。然而,關系型數據庫采用的嚴格定義的基于模式的做法讓其不可能快速整合新數據類型,并且很不適合于非結構化和半結構化數據。
總體來說,隨著web和移動應用程序的增加、新的趨勢、網上消費者行為的轉變以及新的數據類型的出現,行業需要能夠提供可擴展的靈活的數據庫技術來管理和訪問數據。NoSQL技術是有效滿足這些需求的唯一可行解決方案。
原文鏈接:大數據應用程序最佳選擇:是SQL還是NoSQL?(責編/仲浩)