《SQL、NewSQL和NoSQL融合研究與實踐》要點:
本文介紹了SQL、NewSQL和NoSQL融合研究與實踐,希望對您有用。如果有疑問,可以聯(lián)系我們。
講師介紹
朱祥磊
山東移動BOSS系統(tǒng)架構(gòu)師
近幾年,各類大數(shù)據(jù)技術(shù)迅猛發(fā)展,企業(yè)中數(shù)據(jù)處理量呈現(xiàn)幾十到幾百倍增長,數(shù)據(jù)類型也從傳統(tǒng)結(jié)構(gòu)化數(shù)據(jù),延伸到實時流數(shù)據(jù),以及各類非結(jié)構(gòu)化數(shù)據(jù).傳統(tǒng)數(shù)據(jù)庫單一技術(shù)包打天下的局面無法適應(yīng)復(fù)雜多變的海量數(shù)據(jù)處理,從而出現(xiàn)了各類NewSQL技術(shù)和NoSQL技術(shù),出現(xiàn)不同技術(shù)解決不同場景應(yīng)用的局面.
以某運營商大數(shù)據(jù)平臺為例,建立了基于“MPP平臺+Hadoop平臺+Kafak+Spark+Oracle”混搭架構(gòu)的企業(yè)大數(shù)據(jù)中心.但隨著數(shù)據(jù)量和業(yè)務(wù)量的倍增,平臺間數(shù)據(jù)交互運算頻繁,常規(guī)跨平臺數(shù)據(jù)遷移和跨平臺數(shù)據(jù)交叉運算的工作復(fù)雜度越來越高,急需高效方案實現(xiàn)對各大數(shù)據(jù)平臺的統(tǒng)一管理.
本文通過研究SQL和NoSQL融合技術(shù),并進行了測試,通過融合MPP之GBase數(shù)據(jù)庫,以及傳統(tǒng)Oracle數(shù)據(jù)庫和Hadoop、Kafaka等平臺能力,可以便捷地以統(tǒng)一的SQL接口打通跨平臺的數(shù)據(jù)遷移和運算功能,解決了實際應(yīng)用難點和痛點,并可以進一步推廣到數(shù)據(jù)集市、歷史數(shù)據(jù)統(tǒng)計分析等場景,實現(xiàn)在不改變當(dāng)前應(yīng)用架構(gòu)的前提下,充分利用大數(shù)據(jù)能力的目的.
首先簡單介紹各類SQL技術(shù),具體如下:
基于強事務(wù)一致性的數(shù)據(jù)庫,如Oracle、TimesTen、Sybase等,支持SQL標(biāo)準,擅長于在線交易類型應(yīng)用.特點是數(shù)據(jù)存儲在列與表里、關(guān)系通過數(shù)據(jù)表來表示、DML\DDL\DCL語言、事務(wù)、物理層的抽象.
適合處理熱數(shù)據(jù),適用于小數(shù)據(jù)量、業(yè)務(wù)邏輯復(fù)雜、并發(fā)度高的事務(wù)型業(yè)務(wù)場景,如BOSS系統(tǒng)各個數(shù)據(jù)庫.
本質(zhì)上仍然屬于關(guān)系型數(shù)據(jù)庫,但是引入了分布式并行處理架構(gòu),支持SQL標(biāo)準,如MPP(大規(guī)模并行處理)數(shù)據(jù)庫,常見的如GBase、Greenplum等.
適合處理溫數(shù)據(jù),新型MPP數(shù)據(jù)庫適合處理大規(guī)模的復(fù)雜分析,例如我們的經(jīng)分核心數(shù)據(jù)倉庫系統(tǒng).
基于鍵值對的,而不是基于關(guān)系,適合查詢需要快速返回答案場景,適合場景的特點是大量查詢、極少修改、異步插入數(shù)據(jù)與更新數(shù)據(jù)、無模式、不需要強一致性事務(wù),一般為開源,不支持SQL.
NoSQL細分為4類:列存儲數(shù)據(jù)庫(如Cassandra)、文檔存儲數(shù)據(jù)庫(如MongoDB)、鍵值存儲數(shù)據(jù)庫(如Redis)、圖形數(shù)據(jù)庫(如GraphSQL).
Hadoop適合任意結(jié)構(gòu)化數(shù)據(jù)處理以及大規(guī)模批量復(fù)雜作業(yè),鍵值存儲數(shù)據(jù)庫則適合緩存場景.
OldSQL和NewSQL都是基于SQL標(biāo)準的,傳統(tǒng)的SQL語法已經(jīng)很強大,很多人已經(jīng)習(xí)慣通過SQL獲取自己需要的數(shù)據(jù).但是NoSQL產(chǎn)品一般不支持SQL,這就造成了一定的知識碎片,傳統(tǒng)技術(shù)人員需要再去掌握另一種NoSQL技術(shù),帶來很多的不便,同時NoSQL解決的問題是傳統(tǒng)OldSQL和NewSQL無法解決的,如下:
這就帶來一個問題,是否可以實現(xiàn)采用傳統(tǒng)的SQL和NoSQL結(jié)合,進行融合,即利用SQL的強大語法,同時利用NoSQL上述優(yōu)點呢?
一個場景例子,在現(xiàn)有的Oracle數(shù)據(jù)庫上保存最近期的數(shù)據(jù),需要深度挖掘和歷史查詢,則自動轉(zhuǎn)到Hadoop進行處理,這樣充分利用了SQL和NoSQL的優(yōu)點,避免了數(shù)據(jù)同步,大幅降低學(xué)習(xí)掌握NoSQL的難度.
SQL和NoSQL融合主要由如下幾種演進路徑:
上述屬于SQL on Hadoop,即在Hadoop上研發(fā)實現(xiàn)支持SQL機制,實現(xiàn)融合.
為了實現(xiàn)傳統(tǒng)數(shù)據(jù)庫和NoSQL的深度融合,一些數(shù)據(jù)庫公司正在開發(fā)或已退出SQL and Hadoop產(chǎn)品,如Oracle公司的Big Data SQL等,可在Oracle中實現(xiàn)對Hadoop數(shù)據(jù)的直接查詢.國產(chǎn)南大通用數(shù)據(jù)庫GBase則推出了GBase UP產(chǎn)品,使后端SQL 和NoSQL上層封裝為一個整體呈獻給用戶使用.
不同的產(chǎn)品以成熟的數(shù)據(jù)庫為基礎(chǔ),擴展出針對Hive&Spark、HBase等組件的計算和存儲引擎,建立引擎之間高效數(shù)據(jù)交換通道,構(gòu)建了對外統(tǒng)一,對內(nèi)可擴展的集群數(shù)據(jù)庫產(chǎn)品.
對比上述SQL on Hadoop和SQL and Hadoop產(chǎn)品,后者在利舊現(xiàn)網(wǎng)數(shù)據(jù)庫,以及在處理復(fù)雜多變的業(yè)務(wù)場景下優(yōu)勢明顯,實現(xiàn)幾乎不改變現(xiàn)有技術(shù)架構(gòu)的前提下實現(xiàn)對大數(shù)據(jù)技術(shù)的充分利用.
為充分驗證SQL and Hadoop技術(shù),我們近期進行了測試,一是現(xiàn)有交易數(shù)據(jù)庫Oracle和Hadoop的融合,一是數(shù)據(jù)倉庫類型GBase和Hadoop的融合,取得較好的效果:
Oracle公司推出Oracle Big Data SQL來實現(xiàn)本功能,主要思路是Oracle標(biāo)準SQL通過實現(xiàn)跨Oracle數(shù)據(jù)庫、Hadoop和NoSQL數(shù)據(jù)存儲提供統(tǒng)一查詢.
該產(chǎn)品需要Oracle數(shù)據(jù)庫12c作為支持,數(shù)據(jù)庫版本要求12.1.0.2以上;支持的Hadoop版本包括CDH 5.5以上或HDP 2.3以上.
Big?Data SQL的主要理念是“SQL應(yīng)該直接在數(shù)據(jù)所存儲的地方”進行操作,即最大限度利用各類數(shù)據(jù)存放的位置平臺的優(yōu)勢,同時利用統(tǒng)一的元數(shù)據(jù)用來實現(xiàn)如何執(zhí)行統(tǒng)一跨平臺查詢,充分利用原有存儲數(shù)據(jù)的技術(shù)平臺的特性來優(yōu)化查詢執(zhí)行效率,對于關(guān)系型數(shù)據(jù)庫的技術(shù)平臺,其優(yōu)點包括:能立即查詢處理,變化數(shù)據(jù)日志記錄,細粒度的安全訪問控制等等.對于Hadoop的技術(shù)平臺,其優(yōu)勢在于可擴展性和schema-on-read.
Big Data SQL數(shù)據(jù)流
1)從HDFS DataNone上讀取數(shù)據(jù)
2)轉(zhuǎn)換成Oracle數(shù)據(jù)格式
3)基于Oracle格式數(shù)據(jù)做Smart Scan
統(tǒng)一元數(shù)據(jù)
Oracle Big Data SQL通過Oracle數(shù)據(jù)庫的數(shù)據(jù)字典技術(shù),通過Oracle外部表技術(shù)的擴展,將在Hadoop或者NoSQL數(shù)據(jù)庫中的表定義成Oracle的外部表.在通過外部表技術(shù)進行設(shè)計的同時,還充分保存和利用了Hadoop的特性.
CREATE TABLE movieapp_log_json
(click VARCHAR2(4000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE
DEFAULT DIRECTORY DEFAULT_DIR )
ACCESS PARAMETERS
(
com.oracle.bigdata.tablename logs
com.oracle.bigdata.cluster mycluster))
PARALLEL 20
REJECT LIMIT UNLIMITED;
Oracle數(shù)據(jù)庫12.1.0.2支持兩個新類型的外部表,也就是兩種新的訪問驅(qū)動:ORACLE_HIVE和ORACLE_HDFS.ORACLE_HIVE是在Apache Hive數(shù)據(jù)源上創(chuàng)建Oracle外部表.ORACLE_HIVE也可以訪問存儲在其他位置如HBase的數(shù)據(jù).ORACLE_HDFS是在HDFS文件上直接創(chuàng)建Oracle外部表.ORACLE_HIVE訪問驅(qū)動從Hive中繼承元數(shù)據(jù), ORACLE_HDFS訪問驅(qū)動需要手工指定數(shù)據(jù)訪問方式.
性能優(yōu)化
Oracle Big Data SQL性能優(yōu)化的核心是充分利用并行,讓盡可能多的數(shù)據(jù)處理工作在Hadoop端完成,從而減少數(shù)據(jù)的流動.
上面是Big Data SQL針對Hadoop智能掃描的技術(shù),通過這個技術(shù)讓數(shù)據(jù)能在其存放的Hadoop層就完成盡可能多的數(shù)據(jù)處理.Oracle Big Data SQL給Hadoop生態(tài)系統(tǒng)引入了一個新的服務(wù),這個服務(wù)和HDFS的DataNodes,YARN NodeManagers協(xié)同工作.外部表的查詢的請求能直接發(fā)送到這些服務(wù),進行直接路徑的數(shù)據(jù)本地讀取.通過智能掃描加速I/O最大限度地減少數(shù)據(jù)移動.
存儲索引
Big?Data SQl還通過減少HDFS IO的掃描提升查詢性能.通過外部表Mapping HDFS上的數(shù)據(jù),存儲索引記錄每個HDFS block的最大、最小值.
數(shù)據(jù)安全
Big Data SQL支持跨Oracle,Hadoop和NoSQL數(shù)據(jù)源的一個統(tǒng)一的數(shù)據(jù)字典,將Hive和NoSQL數(shù)據(jù)呈現(xiàn)為Oracle的常規(guī)表,允許DBA來創(chuàng)建關(guān)系型數(shù)據(jù)的安全性,制定行級過濾策略等.
下面是測試的幾個場景例子:
場景1:聯(lián)合查詢:A表(10億行,在Hive中)和B表(7.6千萬,在Hive中),指定某一個手機號.
場景2:聯(lián)合查詢:A表(10億行,在Hive中)和B表 (7.6千萬,在Hive中)指定b_avg_arpu字段排序,并取Top10.
場景3:聯(lián)合查詢:A表(10億行,在Hive中)和B表(17行,在Oracle中)根據(jù)應(yīng)用類型和城市分組,取記錄數(shù)Top20.
場景4:聯(lián)合查詢:A表(7.6千萬行,在Hive中)和B表(18行,在Oracle中),C表(315行,在Oracle中),根據(jù)城市分組,取4G流量最高的Top20.
場景5:聯(lián)合查詢:A表(10億行,在Hive中)和B表(7.6千萬,在Oracle中),指定vie_game_flow字段排序,并取Top10.
測試結(jié)果如下:
GBase UP,它是融合了GBase 8a MPP、GBase 8t、開源Hadoop生態(tài)系統(tǒng)等大數(shù)據(jù)平臺產(chǎn)品,兼顧了大規(guī)模分布式并行數(shù)據(jù)庫集群系統(tǒng)、穩(wěn)定高效的事務(wù)數(shù)據(jù)庫,以及Hadoop生態(tài)系統(tǒng)的多種大規(guī)模結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)處理技術(shù),能夠適應(yīng)OLAP、OLTP和NoSQL三種計算模型的業(yè)務(wù)場景.
通過構(gòu)建完整的Schema定義和數(shù)據(jù)庫訪問控制,能夠?qū)τ脩魯?shù)據(jù)庫訪問進行解析、優(yōu)化、數(shù)據(jù)緩沖等操作,完成透明高效的中間數(shù)據(jù)存儲、關(guān)聯(lián)、聚合等操作,對內(nèi)構(gòu)建GBase 8a MPP、Hadoop或者其它數(shù)據(jù)庫之間的內(nèi)部數(shù)據(jù)傳輸協(xié)議,實現(xiàn)高效的數(shù)據(jù)交換,構(gòu)建統(tǒng)一的監(jiān)視和控制系統(tǒng),進行資源調(diào)度.提供了經(jīng)典的數(shù)據(jù)庫接入方式和結(jié)構(gòu)化查詢語言,從而大大降低維護和開發(fā)成本.
其核心技術(shù)架構(gòu)如下圖:
其實質(zhì)是在各個數(shù)據(jù)引擎(Oracle、GBase、Hadoop等)之上建立Mega SQL Engine (數(shù)據(jù)聯(lián)邦),實現(xiàn)統(tǒng)一接口、統(tǒng)一查詢語言、統(tǒng)一元數(shù)據(jù)以及統(tǒng)一的用戶管理和權(quán)限控制,并構(gòu)建了跨引擎的優(yōu)化器和關(guān)聯(lián)查詢.整個架構(gòu)中,GBase UP負責(zé)連接接入、元數(shù)據(jù)管理、跨集群查詢調(diào)度、安全認證、日志記錄等一系列分布式數(shù)據(jù)庫的功能;GBase 8a集群(集合)負責(zé)高質(zhì)量高密度高性能的數(shù)據(jù)存儲和計算;GBase 8t(Oracle)負責(zé)支撐高端事務(wù)處理;Hive集群負責(zé)驅(qū)動Hadoop或Spark集群實現(xiàn)對低密度、低質(zhì)量、結(jié)構(gòu)化/非結(jié)構(gòu)化的大數(shù)據(jù)進行分析;Hadoop集群的HDFS負責(zé)高效高可用的存儲海量數(shù)據(jù),HBase負責(zé)存儲海量中小文件,以及作為分布式可擴展的KV型數(shù)據(jù)倉庫.目前已經(jīng)支持SQL92標(biāo)準、HiveQL、GBase 8t 、HBase等,目前已融合Oracle部分功能.?
測試環(huán)境:
測試功能點包括:統(tǒng)一接口數(shù)據(jù)加載,跨引擎數(shù)據(jù)交換(簡單),跨引擎關(guān)聯(lián)查詢,跨引擎數(shù)據(jù)交換(復(fù)雜),水平分區(qū)表,數(shù)據(jù)備份恢復(fù),Kafka對接UP測試,Hive on Spark模式用例測試.
測試軟件版本:
場景1:統(tǒng)一數(shù)據(jù)接口數(shù)據(jù)加載
場景一是從ftp方式遠程加載到UP數(shù)據(jù)庫,二是從Hadoop HDFS加載到UP.
數(shù)據(jù)量:1157542760行
文件大小:593G
表名稱:
cdr_gbase_t01_fromftp
cdr_gbase_t01_fromhdfs
語句:
執(zhí)行結(jié)果:
SQL執(zhí)行 | 耗時 |
FTP加載到8a(UP) | Elapsed: ?00:10:54.20 |
HDFS加載到8a(UP) | Elapsed: ?00:06:55.24 |
場景2:跨引擎關(guān)聯(lián)(MPP和Hive)
測試MPP與Hive 在不同計算機制(MR/Spark)下join關(guān)聯(lián)查詢并分別插入MPP和Hive的功能.
表名:cdr_hive_t01 ???數(shù)據(jù)量:1157542760行
表名:dw_brand_status ?數(shù)據(jù)量:98291109行
語句:
執(zhí)行結(jié)果:
場景3:Kafka對接UP測試
驗證Kafka消息加載到UP功能支持情況.
表名:cdr_gprs_dm_kafka????數(shù)據(jù)量:10000000行
消息大小:5.3GB 單行消息長度:560B
語句:
執(zhí)行結(jié)果:
SQL執(zhí)行 | 耗時 |
FTP加載到8a(UP) | Elapsed: ?00:10:54.20 |
HDFS加載到8a(UP) | Elapsed: ?00:06:55.24 |
場景4:水平分區(qū)表
驗證UP產(chǎn)品對數(shù)據(jù)生命周期管理機制.
測試過程:
語句:
執(zhí)行結(jié)果:GBase UP按照設(shè)定的數(shù)據(jù)遷移策略后臺自動透明的完成高效遷移.
以上為本階段針對UP產(chǎn)品的測試說明,后續(xù)將逐步測試融合HBase、Oracle產(chǎn)品的能力,本文就不做過多贅述.
經(jīng)過上述測試,初步驗證了SQL和NoSQL融合技術(shù)的可行性,后續(xù)將推廣使用,尤其歷史數(shù)據(jù)存放和查詢等場景,可實現(xiàn)Hadoop的歷史數(shù)據(jù)直接查詢,大大方便了數(shù)據(jù)生命周期管理.
文章來自微信公眾號:DBAplus社群
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/2220.html