天天看點

大資料應用程式最佳選擇:是SQL還是NoSQL

這篇文章看似比較了兩個不同的觀點,實際上兩個人說的并不是一回事兒。RyanBetts講的是SQL作為一種标準化、互動性極強的語言本身,依然會在大資料庫時代的非關系型資料庫中發揮作用。BobWiederhold講的是關系型資料庫是縱向發展(大集中模式:拼命增強主機性能、拼命增強一個磁陣内的存儲),而非關系型資料庫适合橫向擴充(拼命加廉價的主機與存儲),大資料系統不适合用關系型資料庫裡建構。

這個問題的歧義在于我們一般用NoSQL來指代大資料時代HDFS類的No Relational database。 但是實際上NoRelational的資料庫也可以用SQL,現在facebook、google、clouderea、Apach都在積極向他們的架構中添加SQL支援。

VoltDB公司首席技術官Ryan Betts: SQL經曆時間的考驗,并仍然在蓬勃發展

結構化查詢語言(SQL)是經過時間考驗的勝利者,它已經主宰了幾十年,目前大資料公司群組織(例如谷歌、Facebook、Cloudera和Apache)正在積極投資于SQL。

在成為主導技術(例如SQL)後,有時候我們很容易忘記其優越性。SQL的獨特優勢包括:

1. SQL能夠加強與資料的互動,并允許對單個資料庫設計提出問題。這是很關鍵的特征,因為無法互動的資料基本上是沒用的,并且,增強的互動性能夠帶來新的見解、新的問題和更有意義的未來互動。

2. SQL是标準化的,使使用者能夠跨系統運用他們的知識,并對第三方附件和工具提供支援。

3. SQL能夠擴充,并且是多功能和經過時間驗證的,這能夠解決從快寫為主導的傳輸到掃描密集型深入分析等問題。

4. SQL對資料呈現和存儲采用正交形式,一些SQL系統支援JSON和其他結構化對象格式,比NoSQL具有更好的性能和更多功能。

雖然NoSQL的出現帶來了一些影響,但SQL仍然主導着市場,并在大資料領域赢得了很多投資和廣泛部署。

NoSQL的說法很含糊,對于本次讨論,我借用RickCattell對NoSQL的定義,即提供簡單操作(例如密鑰/數值存儲)或簡單記錄和索引,并專注于這些簡單操作的橫向可擴充性的系統。

很顯然,現在很多新的資料庫并不是都一樣,認識每種資料庫背後的原理以及潛在問題是成功的關鍵。NoSQL的主要特點使其更适合于特定的問題。例如,圖形資料庫更适合于資料通過關系組織的情況,而專門的文本搜尋系統更适合于需要實時搜尋的情況。

在這裡,讓我們看看SQL系統的主要優勢和差異化功能:

* SQL可實作互動性。 SQL是一種聲明性查詢語言。使用者說出他們想要什麼(例如,顯示過去五年三月份期間頂級客戶的地理位置),資料庫内部就會構件算法并提取請求的結果。相比之下,NoSQL程式設計創新MapReduce是一種程式性查詢技術。在使用者提出請求時,MapReduce要求使用者不僅說出自己想要什麼,而且要求他們陳述如何産生答案。

這聽起來像一個無趣的技術差異,但這很關鍵,原因在于:首先,聲明性SQL查詢更容易通過圖形化工具以及點選報告建構器來建構。這讓分析師、操作員、管理者和其他不具備軟體程式設計能力的員工進行資料庫查詢;其次,資料庫引擎可以利用内部資訊來選擇最有效的算法。改變資料庫的實體布局或資料庫,最佳算法仍然能夠計算出來。而在程式性系統中,程式設計人員需要重新通路和重新程式設計算法,這是非常昂貴且容易出錯的過程。

市場了解這個關鍵差別。在2010年,谷歌宣布部署SQL來補充MapReduce,主要受内部使用者需求所驅動。最近,Facebook釋出了Presto(一種SQL部署)來查詢其PB(David注:GB、TB、PB、EB,後一個是前一個的1024倍)級HDFS(David注:Hadoop Distributed File System)叢集。根據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、PostgreSQL9.2、VoltDB和其他支援JSON的資料庫,通常具有優于“原生”JSON的性能。

SQL将繼續赢得市場佔有率,并會繼續看到新的投資和部署。NoSQL資料庫提供專有查詢語言或簡單的鍵值語義,而沒有更深層次的技術差異化。現代SQL系統提供可擴充性的同時,還支援更豐富的查詢語義,并有龐大的使用者安裝基礎,廣泛的生态系統整合和深度企業部署。

Couchbase公司首席執行官Bob Wiederhold: NoSQL更适合大資料應用程式

NoSQL越來越多地被認為是關系型資料庫的可行替代品,特别是對于大資料應用程式。此外,無模式資料模型通常更适合于現在捕捉和處理的資料種類和類型。

當我們談論NoSQL領域的大資料時,我們指的是從操作資料庫讀取和寫入。不要将操作資料庫(David注:一般叫做操作性資料庫,OLTP資料庫)與分析資料庫(David注:一般叫做分析型資料庫,OLAP)混淆,這(David:這裡指分析型資料庫)通常會檢視大量資料,并從這些資料擷取可視性。

雖然操作資料庫的大資料看起來不具有可分析性,但操作資料庫通常會存儲超大量使用者的大型資料集,這些使用者經常需要通路資料來實時執行交易。這種資料庫的操作規模也解釋了NoSQL的關鍵特性,也就是為什麼NoSQL是大資料應用程式的關鍵的原因。

NoSQL是可擴充性的關鍵

每次技術行業經曆硬體發展的根本性轉變時,都會出現一個拐點。在資料庫領域,從縱向擴充到橫向擴充的轉變推動了NoSQL的發展。關系型資料庫(包括來自甲骨文和IBM的資料庫)是縱向擴充。也就是說,它們是集中式、共享一切的技術,隻能通過增加更多昂貴的硬體來擴充。

而NoSQL資料庫是分布式橫向擴充技術。它們使用了分布式節點集(稱為叢集)來提供高度彈性擴充功能,讓使用者可以添加節點來動态處理負載。

分布式橫向擴充的做法通常要比縱向做法更加便宜。商業關系型資料庫的授權費用也讓人望而卻步,因為他們的價格是按每台伺服器來計算。另一方面,NoSQL資料庫通常是開源技術,按照運作的伺服器叢集收費,而且價格相對便宜。

NoSQL是靈活性的關鍵

關系型資料庫和NoSQL資料模型有很大的不同。關系型模式擷取資料,并将資料配置設定到很多互相關聯的表中,這些表通過外鍵互相應用。

當使用者需要對資料集運作查詢時,所需資訊需要從多個表中收集(通常涉及數百個企業應用程式),并結合這些資訊,再提供給應用程式。同樣地,當寫入資料時,需要在多個表協調和執行寫入。當資料相對較少,并且,資料以較慢速度流入資料庫時,關系型資料庫通常能夠捕捉和存儲資訊。然而,現在的應用程式通常需要快速寫入(和讀取)海量資料。

NoSQL資料庫采用非常不同的模式。在其核心,NoSQL資料庫其實是“NoREL”,或者說非關系型,這意味着它們沒有依賴于表以及表之間的聯系,以存儲群組織資訊。例如,以文檔為導向的NoSQL資料庫擷取你想要存儲的資料,并采用JSON格式整合到文檔中。每個JSON文檔可以被你的應用程式視為一個對象。JSON文檔可能會提取跨越25個表的資料,将資料內建到一個文檔中。

聚合這些資訊可能會導緻資訊重複,但由于存儲已不再是一個成本問題,資料模型靈活性、釋出所産生文檔的簡便性以及讀取和寫入性能提高,讓這成為不錯的選擇。

NoSQL是大資料應用程式的關鍵

通過第三方(包括社交媒體網站),資料正變得越來越容易捕捉和通路。這些資料包括:個人使用者資訊、地理位置資料、使用者生産的内容、機器記錄資料和傳感器産生的資料。企業還可以依賴于大資料來推動其關鍵任務型應用程式。同時,企業正在轉向到NoSQL資料庫,因為這種資料庫非常适合現在新型的資料類型。

開發人員想要一個靈活的資料庫,可以很容易适應新的資料類型,并且,不會受第三方資料供應商的内容結構變化的影響。大多數新資料是非結構化和半結構化,是以,開發人員也需要能夠有效存儲這些資料的資料庫。然而,關系型資料庫采用的嚴格定義的基于模式的做法讓其不可能快速整合新資料類型,并且很不适合于非結構化和半結構化資料。

總體來說,随着web和移動應用程式的增加、新的趨勢、網上消費者行為的轉變以及新的資料類型的出現,行業需要能夠提供可擴充的靈活的資料庫技術來管理和通路資料。NoSQL技術是有效滿足這些需求的唯一可行解決方案。