說起大資料生态,不得不提大資料生态系統圖,而大資料行業卻不斷的發生着巨變,目前的這張圖應該還算比較新了。
創業者們蜂擁至這個行業,這個行業正變得越來越擁擠。hadoop似乎已經奠定了其作為整個大資料生态系統的關鍵部分,spark是另一個基于記憶體計算的開源分布式計算架構,它試圖填補hadoop的弱項,提供更快的資料分析和良好的程式設計接口。
分析工具領域變得異常活躍,資料應用領域正如預測一樣逐漸成為重心。一些類别如資料庫無論是nosql還是newsql和社交資料分析正日趨成熟。
今天就先讓我們從衆多内容當中,先挑選一塊和大家探讨探讨,先從資料庫說起吧。
◎資料庫技術 傳統vs新型
從大的角度講,可以簡單的将資料庫分為兩類:
●傳統smp架構的資料庫,主要指代的是傳統的關系型資料庫,例如db2、postgrel,mysql等。
●新型資料庫,主要指代為支援大規模數量集,高并發要求,高可擴充性等孕育而生的新型資料庫。包括目前大資料生态當中主流mpp,nosql,newsql資料庫等。
傳統資料庫和新型資料庫的一個主要差別是smp架構vs分布式/并行。
◎資料庫理論基礎
理論基礎 - 伺服器系統架構
●smp(symmetric multi-processor)
smp是對稱多處理器結構的簡稱,指代多個cpu對稱工作,無主次或從屬關系。各個cpu共享相同的實體記憶體,每個cpu通路記憶體中的任何位址的路徑是相同的(通路的時間是相同的),是以smp也被稱為一緻存儲器通路結構(uma: uniform memory access)。
●numa(non-uniform memory access)
numa是非對稱的多處理結構,剛好與smp相對,多個cpu工作時,對記憶體的通路路徑不同。numa架構的提出主要是解決smp架構下多cpu擴充的問題。
●mpp(massive parallel processing)
和numa不同,mpp提供了另一種進行系統擴充的方式。它由多個smp伺服器通過一定的節點網際網路絡進行連接配接,協同工作,完成相同的任務,從使用者的角度來看是一個伺服器系統。
smp和numa都主要指向單一的計算機系統,而mpp則有點叢集的意思了
理論基礎 - acid基本理論
●原子性(atomic)
整個事務要麼成功,要麼失敗,杜絕部分成功
●一緻性(consistent)
事務的運作并不改變資料庫中資料的一緻性。例如,完整限制了a+b=10,一個事務改變了a,那麼b也應該随之改變
●獨立性(lsolated)
也稱作隔離性,指兩個以上的事務不會出現交錯執行的狀态,因為這樣不可能會導緻資料不一緻
●持久性(durable)
事務執行成功以後,該事務所對資料庫做的更改便是持久的儲存在資料庫之中,不會無緣無故的復原
傳統基于關系模型的資料庫遵從acid基本理論,而新型分布式資料庫則并不完全遵從該理論
理論基礎 - 分布式cap理論
●一緻性(consistent)
即資料的?一緻性,簡單的說就是資料複制到n台機器,如果有更新,要n台機器的資料一起更新
●可用性(availability)
在叢集中一部分節點故障後,叢集整體還能響應用戶端的讀寫請求
●分區容錯性(tolerance)
分區發生但不影響整個系統的運作:
基于傳統關系型模型資料庫更關注ca,新型nosql資料庫更關心cp,ap
◎資料庫分類與對比分析
根據體系架構來分類
從資料庫的體系架構來看,可以将資料庫分為:
●smp database
這類資料大多指代的是基于傳統關系型資料庫模型的資料庫,比如ibm的db2,postgres,mysql等
●mpp database
基于mpp體系架構的資料庫,例如teradata, greenplum, netezza等
●distribute database
嚴格來講mpp也應該屬于分布式資料庫,但這裡更多指的是新型nosql和newsql資料庫,例如hbase, cassandra, hive, mongodb等
根據sql支援來分類
根據資料庫對sql的支援情況,可以将資料庫分為:
●sql database
而sql資料又可以細分為:
?old sql傳統sql資料庫
?new sql新型sql資料庫
?mpp
?sql on hadoop
●nosql database
而nosql資料庫本身又是非常寬泛的,其又可以分為多種類型:
?key-value database
?document database
?column family stores
?graph database
sql,newsql and nosql
無論是「oldsql」,「newsql」還是「nosql」,都是大資料解決方案中經常提及的名詞。那麼面對傳統的sql資料庫, nosql資料存儲以及newsql資料該如何進行選擇呢?其實,沒有任何一款可以應對所有的應用場景,應該根據應用場景選擇對的資料庫。
對于傳統的sql資料庫來說,它已經被使用了多年,成為了很多應用服務過程中依賴的核心元件。如果對于自身的應用來說它的運作和性能表現是可接受的,那麼其實是不需要考慮替換的。沒有必要的替換或更新隻會引入更多的工作量,更大的風險。對于傳統sql資料庫而言,其優勢主要展現在:
●提供了系統運作多年的穩定性和可靠性,對标準sql的支援能力
●與orm的相容度
●擁有更加豐富的事務處理功能
●即席查詢的能力
●成熟而穩定的商業生态
傳統sql在過去一直處于市場的壟斷地位,但是随着存儲,處理和分析的資料量指數倍的快速增長,對傳統sql資料庫形成了非常大的挑戰,其劣勢主要展現在:
●設計架構決定了很難進行擴充,性能瓶頸往往局限在單機的處理能力上
●傳統sql資料庫系統設計遵循的往往是通?用标準"one size fits all",是以在很多專用場景下也不是最優的
●複雜的性能調優參數,需要在性能,資料安全,資源使用等多方面平衡,調優成本非常高
對于nosql資料庫來說,它在目前的大資料生态和真實應用場景中已經越來越多的被廣泛的應用。對非結構,半結構化資料的支援使得在很多特定場景下的開發非常簡單,對于對sql弱依賴的業務,nosql的引入不但降低了本身的成本而且增加了系統的擴充性和性能。其優勢主要展現在:
●大多nosql設計遵從最終一緻性,是以具有更高的可用性
●同時基于最終一緻性的系統相比于傳統的olap關系型資料庫具有更好的負載擴充性,支援更大的資料集
●很多nosql系統對于非關系性資料,例如log messages, xml and json documents進行了更多的優化
盡管nosql資料庫技術目前發展非常迅速,應用也越來越廣,但是其還是有自身的局限性:
●nosql資料庫基本上不支援事務,也不遵從acid。是以對于嚴格依賴acid的應用并不适用
●對olap-style的查詢并不能直接進行很好的支援,需要更多應用開發量
newsql也是目前比較流行的術語,與nosql相比還比較新。newsql系統基本上是基于關系資料庫模型的,對sql的支援非常好,與此同時嘗試解決傳統sql資料庫面臨的問題。newsql資料庫的設計目的不僅具有nosql對海量資料的存儲能力,還保持了傳統資料庫支援acid和sql等特征。newsql的主要優勢是:
●減少了應用研發和設計的複雜度,提供了強一緻性和全事務支援
●對sql的支援以及相應的标準工具
●豐富的資料分析sql支援和擴充
●無需應用層面大的改進便可以在資料和查詢模型的基礎上提供類似nosqlstyle叢集方案的擴充性和性能
于此同時,newsql也存在其自身的劣勢:
目前還沒有newsql系統具備像傳統sql資料庫系統那樣的通用性
●由于newsql自身in-memory的系統架構設計,在海量資料的支援上還是面臨很多技術和成本的挑戰
下表對oldsql,nosql和newsql:
mpp and hadoop
對于mpp和hadoop而言,很多人都會把兩者放在一起進行比較,可實際上這兩者本身應該不太具有可比性,因為并不完全是同類的産品,之是以會比較,可能是因為在特定的應用場景下,我們不知道也不清楚該如何從他們之中進行選擇。
無論是mpp資料庫還是hadoop,其基礎架構都是以分布式為基礎的。mpp資料庫本質上是分布式并行關系型資料庫系統,而hadoop并不是一個簡單的單一系統或技術,而是一個生态系統,由多個元件和不同的功能建構起來。
mpp資料庫的主要架構特點是:
●分布式,基于網格計算技術
●shared-nothing
●das(direct-attached storage)存儲特質
●資料分區以及本地處理
●資料壓縮
●高性能網絡連結
對于mpp資料庫,它比較擅長的是:
●關系型資料
●批處理
●即席資料查詢分析
●低并發場景
●ansi sql支援度高
而與之不同的是,hadoop?比較擅長的是:
●一次寫多次度
●100+以上節點叢集規模
●支援關系型和非關系型資料
●具有非常高的并發性
批處理和分析負載
具有非常好的擴充性
下表對mpp和hadoop進行了對比分析:
本文轉自d1net(轉載)