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