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