SQL、NewSQL和NoSQL融合研究与实践

《SQL、NewSQL和NoSQL融合研究与实践》要点:
本文介绍了SQL、NewSQL和NoSQL融合研究与实践,希望对您有用。如果有疑问,可以联系我们。

SQL、NewSQL和NoSQL融合研究与实践

讲师介绍

朱祥磊

山东移动BOSS系统架构师

  • 负责业务支撑系统架构规划和建设
  • 获国家级创新奖1项,通信行业级科技进步奖2项,移动集团级业务服务创新奖3项
  • 申请发明专利13项

近几年,各类大数据技术迅猛发展,企业中数据处理量呈现几十到几百倍增长,数据类型也从传统结构化数据,延伸到实时流数据,以及各类非结构化数据.传统数据库单一技术包打天下的局面无法适应复杂多变的海量数据处理,从而出现了各类NewSQL技术和NoSQL技术,出现不同技术解决不同场景应用的局面.

以某运营商大数据平台为例,建立了基于“MPP平台+Hadoop平台+Kafak+Spark+Oracle”混搭架构的企业大数据中心.但随着数据量和业务量的倍增,平台间数据交互运算频繁,常规跨平台数据迁移和跨平台数据交叉运算的工作复杂度越来越高,急需高效方案实现对各大数据平台的统一管理.

本文通过研究SQL和NoSQL融合技术,并进行了测试,通过融合MPP之GBase数据库,以及传统Oracle数据库和Hadoop、Kafaka等平台能力,可以便捷地以统一的SQL接口打通跨平台的数据迁移和运算功能,解决了实际应用难点和痛点,并可以进一步推广到数据集市、历史数据统计分析等场景,实现在不改变当前应用架构的前提下,充分利用大数据能力的目的.

首先简单介绍各类SQL技术,具体如下:

一、传统数据库技术(OldSQL)

基于强事务一致性的数据库,如Oracle、TimesTen、Sybase等,支持SQL标准,擅长于在线交易类型应用.特点是数据存储在列与表里、关系通过数据表来表示、DML\DDL\DCL语言、事务、物理层的抽象.

适合处理热数据,适用于小数据量、业务逻辑复杂、并发度高的事务型业务场景,如BOSS系统各个数据库.

二、分布式数据库(NewSQL)

本质上仍然属于关系型数据库,但是引入了分布式并行处理架构,如MPP(大规模并行处理)数据库,常见的如GBase、Greenplum等.

适合处理温数据,新型MPP数据库适合处理大规模的复杂分析,例如我们的经分核心数据仓库系统.

三、分布式key-value数据库(NoSQL)

基于键值对的,而不是基于关系,适合查询需要快速返回答案场景,适合场景的特点是大量查询、极少修改、异步插入数据与更新数据、无模式、不需要强一致性事务,一般为开源,不支持SQL.

NoSQL细分为4类:列存储数据库(如Cassandra)、文档存储数据库(如MongoDB)、键值存储数据库(如Redis)、图形数据库(如GraphSQL).

Hadoop适合任意结构化数据处理以及大规模批量复杂作业,键值存储数据库则适合缓存场景.

Hadoop

OldSQL和NewSQL都是基于SQL标准的,传统的SQL语法已经很强大,很多人已经习惯通过SQL获取自己需要的数据.但是NoSQL产品一般不支持SQL,这就造成了一定的知识碎片,传统技术人员需要再去掌握另一种NoSQL技术,带来很多的不便,同时NoSQL解决的问题是传统OldSQL和NewSQL无法解决的,如下:

  1. 非结构化数据处理(传统数据库仅支持结构化和半结构化数据)
  2. 海量历史数据的处理和查询(传统数据库难以进行海量数据存储)
  3. 流数据处理
  4. 深度迭代,机器学习
  5. 图算法引擎
  6. R语言非结构数据算法分析

这就带来一个问题,是否可以实现采用传统的SQL和NoSQL结合,进行融合,即利用SQL的强大语法,同时利用NoSQL上述优点呢?

SQL

一个场景例子,在现有的Oracle数据库上保存最近期的数据,需要深度挖掘和历史查询,则自动转到Hadoop进行处理,这样充分利用了SQL和NoSQL的优点,避免了数据同步,大幅降低学习掌握NoSQL的难度.

SQL和NoSQL融合主要由如下几种演进路径:

  • 一类是开源产品,如Apache Impala、Phoenix、Spark-SQL等.
  • 一类是商业产品,如IBM的Big SQL、Pivotal的HAWQ等.

上述属于SQL on Hadoop,即在Hadoop上研发实现支持SQL机制,实现融合.

为了实现传统数据库和NoSQL的深度融合,一些数据库公司正在开发或已退出SQL and Hadoop产品,如Oracle公司的Big Data SQL等,可在Oracle中实现对Hadoop数据的直接查询.国产南大通用数据库GBase则推出了GBase UP产品,使后端SQL 和NoSQL上层封装为一个整体呈献给用户使用.

不同的产品以成熟的数据库为基础,扩展出针对Hive&Spark、HBase等组件的计算和存储引擎,建立引擎之间高效数据交换通道,构建了对外统一,对内可扩展的集群数据库产品.

HBase

对比上述SQL on Hadoop和SQL and Hadoop产品,后者在利旧现网数据库,以及在处理复杂多变的业务场景下优势明显,实现几乎不改变现有技术架构的前提下实现对大数据技术的充分利用.

为充分验证SQL and Hadoop技术,我们近期进行了测试,一是现有交易数据库Oracle和Hadoop的融合,一是数据仓库类型GBase和Hadoop的融合,取得较好的效果:

1.Oracle和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数据流

Oracle

1)从HDFS DataNone上读取数据

  • 直接路径读
  • 基于C开发的读取引擎(目前支持分割文本和JSON)
  • 其它使用Hadoop原生类来访问

2)转换成Oracle数据格式

3)基于Oracle格式数据做Smart Scan

  • WHERE子句条件过滤
  • 列投影
  • 应用布隆筛选器以提高联接性能
  • JSON/XML解析,数据挖掘模型评分

统一元数据

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行,根据城市分组,取4G流量最高的Top20.

场景5:联合查询:A表(10亿行,指定vie_game_flow字段排序,并取Top10.

测试结果如下:

SQL、NewSQL和NoSQL融合研究与实践

2.MPP之GBase和Hadoop的融合

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部分功能. 

测试环境:

SQL、NewSQL和NoSQL融合研究与实践

测试功能点包括:统一接口数据加载,跨引擎数据交换(简单),跨引擎关联查询,跨引擎数据交换(复杂),水平分区表,数据备份恢复,Kafka对接UP测试,Hive on Spark模式用例测试.

测试软件版本:

SQL、NewSQL和NoSQL融合研究与实践

场景1:统一数据接口数据加载

场景一是从ftp方式远程加载到UP数据库,二是从Hadoop HDFS加载到UP.

数据量:1157542760行

文件大小:593G

表名称:

cdr_gbase_t01_fromftp

cdr_gbase_t01_fromhdfs

语句:

SQL、NewSQL和NoSQL融合研究与实践

执行结果:

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行

语句:

SQL、NewSQL和NoSQL融合研究与实践

执行结果:

SQL、NewSQL和NoSQL融合研究与实践

场景3:Kafka对接UP测试

验证Kafka消息加载到UP功能支持情况.

表名:cdr_gprs_dm_kafka    数据量:10000000行

消息大小:5.3GB 单行消息长度:560B

语句:

SQL、NewSQL和NoSQL融合研究与实践

执行结果:

SQL执行 耗时
FTP加载到8a(UP) Elapsed:  00:10:54.20
HDFS加载到8a(UP) Elapsed:  00:06:55.24

场景4:水平分区表

验证UP产品对数据生命周期管理机制.

测试过程:

  1. 创建水平分区表,8a为热分区,Hive为冷分区;
  2. 创建自动数据迁移任务,每天将前一天的数据自动迁移至Hive分区;
  3. 将数据导入至热分区,验证热分区和整个水平分区表的数据正确性;
  4. 等待一天,观察数据是否已经自动迁移至冷分区,并验证冷分区和整个水平分区表的数据正确性;
  5. 尝试向冷分区插入数据,应报错(只有热分区可以更新数据,冷分区只供读取).

语句:

SQL、NewSQL和NoSQL融合研究与实践

执行结果:GBase UP按照设定的数据迁移策略后台自动透明的完成高效迁移.

以上为本阶段针对UP产品的测试说明,后续将逐步测试融合HBase、Oracle产品的能力,本文就不做过多赘述.

经过上述测试,初步验证了SQL和NoSQL融合技术的可行性,后续将推广使用,尤其历史数据存放和查询等场景,可实现Hadoop的历史数据直接查询,大大方便了数据生命周期管理.

文章来自微信公众号:DBAplus社群

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


起步 处理器架构,参考 x86是指intel的开发的一种32位指令集 intel和amd早期的cpu都支持这种指令集 AMD比Intel率先制造出了商用的兼容x86的CPU,AMD称之为AMD64 Intel选择了设计一种不兼容x86的全新64为指令集,称之为IA-64,后来支持AMD64的指令集,
pscp pscp -P 22 C:\work\test.txt root@192.168.1.5:/home/data pscp -P 22 root@192.168.1.5:/home/data/test.txt C://work// 检索 find / -name default.config
文件处理 ls -a # 显示所有文件 ls -l # 显示详细信息 ls -d # 显示路径 mkdir /目录名称 # 创建目录 cd /目录名称 # 切换目录 pwd # 显示当前路径 rmdir /目录名称 # 删除目录 cp -rp [目录名称] [目标目录] # 复制目录到目标目录 cp
准备一台电脑(我就用联想拯救者r7000演示) 参考博客制作启动盘 插上U盘,启动电脑,一直按F2 进入如下页面后,将U盘设置为第一启动项,点击exit,保存并退出 之后进入如下页面,选择第三项 进入如下页面,选择第四项 进入如下页面,选择第一项,选中后,先不要点Enter 按e键,将inst.st
认识 Linux系统是参考了UNIX系统作为模板开发的,但没有使用UNIX的代码;是UNIX的一种,但不是衍生版 在Linux内核的基础上开发是发行版 分区 逻辑分区永远从5开始 步骤 挂载:可理解为分配盘符,挂载点即是盘符名;不同之处:Linux中是以空目录名称作为盘符 Hda 第一块硬盘 Hda
文件处理命令 以 . 开头的文件是隐藏文件 以 - 开头表示这是一个文件 以 d 开头表示是一个目录 以 l 开头表示是一个软链接 第一个root是所有者,第二个root是所属组 ls -h 以文件默认大小后缀 显示 ls -i 查看i节点(唯一标识) 所有者:只能有一个,可变更 所属组:只能有一个
参考 01 02 03 前提环境 本地安装VirtualBox,并安装CentOS8,配置网络后,window系统上putty能连接到CentOS8服务器 配置步骤 右键服务器复制 启动复制后的服务器,查看ip和hostname发现和原来的服务器一样,需要修改 hostname # 查看主机名 vi
文件搜索命令 星号匹配任意字符,问号匹配任意单个字符 -iname 根据文件名查找且不区分大小写 -ok 命名会有一个询问的步骤 如果没有找到指定文件,可输入命令:updatedb 更新文件资料库;除tmp目录不在文件资料库收录范围之内 locate -i 文件名 # 检索时不区分大小写 which
安装环境 安装最新版的Virtual Box,点击安装 下载centos8镜像 创建虚拟机,可参考 选择下载到本地的镜像 设置启动顺序 点击启动 启动过程中报错:“FATAL:No bootable medium found!” 1.没有选择iso镜像 2.光驱没有排在第一位置 3.镜像只能选择x8
Linux严格区分大小写 所有内容文件形式保存,包括硬件 Linux不靠扩展名区分文件类型 挂载:将设备文件名和挂载点(盘符)连接的过程 Linux各个目录的作用 bin表示二进制 服务器注意事项 远程服务器不允许关机,只能重启 重启时应该关闭服务 不要在服务器访问高峰运行高负载命令 远程配置防火墙
IDE连接Linux,上传下载文件 参考1 参考2 连接Linux 上传下载文件 本地项目打包后上传 查看是否上传成功,右键下载 补充 后端项目开发完成后,需clean掉临时文件target文件夹,且只推送修改过的文件 前端项目开发的过程中,需要在每个子组件中使用scoped,确保每个子组件中的编码
起步 LTS与普通版本的区别 LTS版本的发布周期更长,更加稳定 安装jdk sudo mkdir /usr/lib/jvm # 在Ubuntu中创建目录 pscp D:\安装包\linux源码包\jdk-8u291-linux-x64.tar.gz chnq@192.168.0.102:/tmp
前言 最近在b站上看了兄弟连老师的Linux教程,非常适合入门:https://www.bilibili.com/video/BV1mW411i7Qf 看完后就自己来试着玩下,正好手上有台空闲的电脑就尝试不使用虚拟机的方式安装Linux系统 安装步骤 制作启动盘 下载ISO镜像,我这里下载的是Cen
新建虚拟电脑 设置内存和处理器 设置硬盘大小 完成 设置 查看光驱 设置启动顺序 点击启动 选择第1项 进入图形安装界面 选择安装位置,开始安装 设置root密码 重启 登录 查看本地文件夹 配置网络,点击设置 查看宿主机ip C:\Users\ychen λ ipconfig 无线局域网适配器 W
源码包安装需手动下载后安装 二进制包则在package目录下 rpm命令管理rpm包 若某个rpm包依赖于某个模块,需要到网站www.rpmfind.net查询该模块依赖的包,安装这个包后自动安装模块,之后就能安装rpm包了 安装升级时使用包全名 查询卸载时使用包名 虚拟机中的Linux系统安装rp
首先进入命令模式,再输入以下命令 命令模式用于输入命令 插入模式可对文件编写操作 编辑模式下的命令是在冒号后输入 :12, 15d # 删除指定范围的行,这里是删除12到15行 :n1,n2s/old/new/g ## 表示从n1行到n2行,old表示旧的字符串 vim使用小技巧:自定义快捷键,如快
使用源码包安装,需要自己指定安装位置,通常是 /usr/local/软件名/ linux中要想启动执行文件,应使用绝对路径 /绝对路径/rpm包名 start ## 执行方式一 service rpm包名 start ## 执行方式二 使用源码包安装后,由于自定义安装路径,就不能使用service命
网络命令 在收邮件的用户中,输入 mail 可查看邮件信息,输入序列号查看详细信息 在mail命令下,输入h 查看所有邮件的列表 输入:d 序列号 # 删除邮件 last # 统计所有用户登录或重启时间,用于日志查询 lastlog # 显示包括未登录用户的登录时间 lastlog -u 用户id
若要使用yum管理,必须能连接网络,首先配置网络IP 进入yum源文件中启动容器 使用yum源头安装rpm包不需要进入package路径,同时也不需要使用包全名,会有yum自动管理 安装软件组
简介 client即是本机安装的docker,相当于git Docker_host相当于centos系统 registry则是docker仓库,相当于GitHub 镜像用于创建docker容器,一个镜像可以创建多个docker容器 容器是由镜像创建的运行实例,(镜像相当于类,容器相当于类创建的对象)