一、專家簡介
VoltDB公司首席技術官Ryan Betts表示,SQL已經贏得了大型企業的廣泛部署,大數據是它可以支持的另一個領域。
Couchbase公司首席執行官Bob Wiederhold表示,NoSQL是可行的選擇,並且從很多方面來看,它是大數據的最佳選擇,特別是涉及到可擴展性時。
二、SQL經歷時間的考驗,並仍然在蓬勃發展
結構化查詢語言(SQL)是經過時間考驗的勝利者,它已經主宰了幾十年,目前大數據公司和組織(例如谷歌、Facebook、Cloudera和Apache)正在積極投資於SQL。
在成為主導技術(例如SQL)後,有時候我們很容易忘記其優越性。SQL的獨特優勢包括:
1. SQL能夠加強與數據的交互,並允許對單個數據庫設計提出問題。這是很關鍵的特征,因為無法交互的數據基本上是沒用的,並且,增強的交互性能夠帶來新的見解、新的問題和更有意義的未來交互。
2. SQL是標准化的,使用戶能夠跨系統運用他們的知識,並對第三方附件和工具提供支持。
3. SQL能夠擴展,並且是多功能和經過時間驗證的,這能夠解決從快寫為主導的傳輸到掃描密集型深入分析等問題。
4. SQL對數據呈現和存儲采用正交形式,一些SQL系統支持JSON和其他結構化對象格式,比NoSQL具有更好的性能和更多功能。
雖然NoSQL的出現帶來了一些影響,但SQL仍然主導著市場,並在大數據領域贏得了很多投資和廣泛部署。
NoSQL的說法很含糊,對於本次討論,我借用Rick Cattell對NoSQL的定義,即提供簡單操作(例如密鑰/數值存儲)或簡單記錄和索引,並專注於這些簡單操作的橫向可擴展性的系統。
很顯然,現在很多新的數據庫並不是都一樣,認識每種數據庫背後的原理以及潛在問題是成功的關鍵。NoSQL的主要特點使其更適合於特定的問題。例如,圖形數據庫更適合於數據通過關系組織的情況,而專門的文本搜索系統更適合於需要實時搜索的情況。
在這裡,讓我們看看SQL系統的主要優勢和差異化功能:
* SQL可實現交互性。 SQL是一種聲明性查詢語言。用戶說出他們想要什麼(例如,顯示過去五年三月份期間頂級客戶的地理位置),數據庫內部就會構件算法並提取請求的結果。相比之下,NoSQL編程創新MapReduce是一種程序性查詢技術。在用戶提出請求時,MapReduce要求用戶不僅說出自己想要什麼,而且要求他們陳述如何產生答案。
這聽起來像一個無趣的技術差異,但這很關鍵,原因在於:首先,聲明性SQL查詢更容易通過圖形化工具以及點擊報告構建器來構建。這讓分析師、操作員、管理者和其他不具備軟件編程能力的員工進行數據庫查詢;其次,數據庫引擎可以利用內部信息來選擇最有效的算法。改變數據庫的物理布局或數據庫,最佳算法仍然能夠計算出來。而在程序性系統中,編程人員需要重新訪問和重新編程算法,這是非常昂貴且容易出錯的過程。
市場理解這個關鍵區別。在2010年,谷歌宣布部署SQL來補充MapReduce,主要受內部用戶需求所驅動。最近,Facebook發布了Presto(一種SQL部署)來查詢其PB級HDFS集群。根據Facebook表示:“隨著我們的倉庫增長到PB級,以及我們的需求變化,我們清楚地意識到,我們需要一個提供低延時查詢的互動系統。”此外,Cloudera也正在構建Impala—另一個基於HDFS的SQL部署。
* SQL是標准化的。 雖然供應商有時候會添加自己的語言到SQL界面,但SQL的核心是標准化的,還有其他規格(例如ODBC和JDBC)提供廣泛可用的穩定界面到SQL存儲。這帶來了一個管理和操作工具生態系統,可以在SQL系統之上設計、監控、檢查、探索和構建應用程序。
SQL用戶和程序員可用跨多個後端系統重復使用其API和UI知識,減少了應用程序的開發時間。標准化還允許聲明性第三方提取、轉換、加載(ETL)工具,使企業可以在數據庫之間以及跨系統傳輸數據。
* SQL可擴展。 認為SQL必須犧牲以獲得可擴展性的看法,完全是錯誤的。如前所述,Facebook創建了一個SQL界面來查詢PB級數據。SQL能夠非常有效地運行極快的ACID傳輸。SQL對數據存儲和索引提供的抽象[注]化允許跨各種問題和數據集大小的一致使用,讓SQL可以跨集群復制數據存儲有效地運行。使用SQL作為界面獨立於構建雲、規模或HA系統,SQL中並沒有什麼在阻止和限制容錯、高可用性和復制。事實上,所有現代SQL系統支持雲友好型橫向可擴展性、復制和容錯性。
* SQL支持JSON。 幾年前,很多SQL系統增加了XML文檔支持。現在,隨著JSON成為一種流行的數據交換格式,SQL供應商也紛紛加入了JSON型的支持。基於現在靈活的編程過程和web基礎設施的正常運行時間要求,我們很需要結構化數據類型的支持。Oracle 12c、PostgreSQL 9.2、VoltDB和其他支持JSON的數據庫,通常具有優於“原生”JSON的性能。
SQL將繼續贏得市場份額,並會繼續看到新的投資和部署。NoSQL數據庫提供專有查詢語言或簡單的鍵值語義,而沒有更深層次的技術差異化。現代SQL系統提供可擴展性的同時,還支持更豐富的查詢語義,並有龐大的用戶安裝基礎,廣泛的生態系統整合和深度企業部署。
三、NoSQL更適合大數據應用程序
NoSQL越來越多地被認為是關系型數據庫的可行替代品,特別是對於大數據應用程序。此外,無模式數據模型通常更適合於現在捕捉和處理的數據種類和類型。
當我們談論NoSQL領域的大數據時,我們指的是從操作數據庫讀取和寫入。不要將操作數據庫與分析數據庫混淆,這通常會查看大量數據,並從這些數據獲取可視性。
雖然操作數據庫的大數據看起來不具有可分析性,但操作數據庫通常會存儲超大量用戶的大型數據集,這些用戶經常需要訪問數據來實時執行交易。這種數據庫的操作規模也解釋了NoSQL的關鍵特性,也就是為什麼NoSQL是大數據應用程序的關鍵的原因。
四、NoSQL是可擴展性的關鍵
每次技術行業經歷硬件發展的根本性轉變時,都會出現一個拐點。在數據庫領域,從縱向擴展到橫向擴展的轉變推動了NoSQL的發展。關系型數據庫(包括來自甲骨文和IBM的數據庫)是縱向擴展。也就是說,它們是集中式、共享一切的技術,只能通過增加更多昂貴的硬件來擴展。
而NoSQL數據庫是分布式橫向擴展技術。它們使用了分布式節點集(稱為集群)來提供高度彈性擴展功能,讓用戶可以添加節點來動態處理負載。
分布式橫向擴展的做法通常要比縱向做法更加便宜。商業關系型數據庫的授權費用也讓人望而卻步,因為他們的價格是按每台服務器來計算。另一方面,NoSQL數據庫通常是開源技術,按照運行的服務器集群收費,而且價格相對便宜。
五、NoSQL是靈活性的關鍵
關系型數據庫和NoSQL數據模型有很大的不同。關系型模式獲取數據,並將數據分配到很多相互關聯的表中,這些表通過外鍵相互應用。
當用戶需要對數據集運行查詢時,所需信息需要從多個表中收集(通常涉及數百個企業應用程序),並結合這些信息,再提供給應用程序。同樣地,當寫入數據時,需要在多個表協調和執行寫入。當數據相對較少,並且,數據以較慢速度流入數據庫時,關系型數據庫通常能夠捕捉和存儲信息。然而,現在的應用程序通常需要快速寫入(和讀取)海量數據。
NoSQL數據庫采用非常不同的模式。在其核心,NoSQL數據庫其實是“NoREL”,或者說非關系型,這意味著它們沒有依賴於表以及表之間的聯系,以存儲和組織信息。例如,以文檔為導向的NoSQL數據庫獲取你想要存儲的數據,並采用JSON格式整合到文檔中。每個JSON文檔可以被你的應用程序視為一個對象。JSON文檔可能會提取跨越25個表的數據,將數據集成到一個文檔中。
聚合這些信息可能會導致信息重復,但由於存儲已不再是一個成本問題,數據模型靈活性、發布所產生文檔的簡便性以及讀取和寫入性能提高,讓這成為不錯的選擇。
六、NoSQL是大數據應用程序的關鍵
通過第三方(包括社交媒體網站),數據正變得越來越容易捕捉和訪問。這些數據包括:個人用戶信息、地理位置數據、用戶生產的內容、機器記錄數據和傳感器產生的數據。企業還可以依賴於大數據來推動其關鍵任務型應用程序。同時,企業正在轉向到NoSQL數據庫,因為這種數據庫非常適合現在新型的數據類型。
開發人員想要一個靈活的數據庫,可以很容易適應新的數據類型,並且,不會受第三方數據供應商的內容結構變化的影響。大多數新數據是非結構化和半結構化,因此,開發人員也需要能夠有效存儲這些數據的數據庫。然而,關系型數據庫采用的嚴格定義的基於模式的做法讓其不可能快速整合新數據類型,並且很不適合於非結構化和半結構化數據。
總體來說,隨著web和移動應用程序的增加、新的趨勢、網上消費者行為的轉變以及新的數據類型的出現,行業需要能夠提供可擴展的靈活的數據庫技術來管理和訪問數據。NoSQL技術是有效滿足這些需求的唯一可行解決方案。