APP下载

基于Hibernate OGM的SQL与NoSQL数据库的统一访问模型的设计与实现

2016-12-15李东奎鄂海红

软件 2016年11期
关键词:海红编程统一

李东奎,鄂海红

(北京邮电大学,北京 海淀 100876)

基于Hibernate OGM的SQL与NoSQL数据库的统一访问模型的设计与实现

李东奎,鄂海红

(北京邮电大学,北京 海淀 100876)

针对将现有的关系型数据库和非关系型数据库都有自己的专用API的应用场景,借助于开源框架Hibernate OG建立了一个统一的存储SQL数据库和非NoSQL数据库的框架,使其对这两种数据库的读写能在一个框架下按照统一的规则进行,无需进行额外的API查看。通过使用JAVA的注解区别数据库类型、JAVA对象填充数据、Hibernate OGM框架自动将JAVA对象解析成点分格式、底层通过原生API封装写入数据库的引擎。针对混合使用HBase和MySQL的场景,对以上统一访问模型进行了实验和验证。实验表明,通过JAVA注解区分数据库类型,通过JAVA对象填充数据,通过Hibernate OGM统一解析数据存储数据的这一系列的操作来进行对SQL和NoSQL数据库的方案是可行的。

HBase;MySQL;数据库

本文著录格式:李东奎,鄂海红. 基于Hibernate OGM的SQL与NoSQL数据库的统一访问模型的设计与实现[J].软件,2016,37(11):14-18

0 引言

伴随着如今互联网行业的高速发展,各种数据格式层出不穷,从而产生了能适应各种不同类型数据的数据库。由于最开始的数据较为简单且有一定规律可循,所以从诞生了最开始的关系型数据库,比如MySQL、PostgreSQL和SQLServer仍然被广泛使用。随着互联网浪潮的继续推进和大数据时代的到来,要处理的数据不再是简单的扁平数据了,而是大量如Key-Value型、JSON型、XML型等新的数据类型,从而产生了HBase、MongoDB、Redis等类型的数据库来适应新的数据类型[1]。NoSQL数

据库不同于传统的数据库的重要区别,就是面向文档、图形、键值对、对象等存储方式,更适合存储某些特定类型的数据[2],其使用也成为一种潮流和趋势。因此在本文中,提到的NoSQL[3]数据即为非关系型数据库,提到的SQL数据库即为关系型数据库。

虽然现有的NoSQL数据库经过了十几年的发展,已经拥有了初步的使用规模,表现良好,但是SQL数据库经历了数十年的研究和性能优化,很多数据都可以使用SQL数据库进行很好的建模,所以关系型数据库不能完全被相对不成熟的NoSQL数据库替代和舍弃[4]。而对于实际使用的数据需要存入数据库时,需要判断其适合使用SQL数据库还是NoSQL数据库,然后使用不同的API访问,需要花费大量的时间去调研研究各种不同数据库的API使用,尤其是现在NoSQL数据库和SQL数据库的编程模型差异性非常大,增加了编程难度,降低了开发速度。

SQL数据和NoSQL数据库的访问没有统一的访问模型。而使用原生的数据库访问API将增加应用的复杂性并降低开发效率和可维护性。为了克服上述缺点,有必要提出一种解决方案,允许开发人员无论对于SQL型数据库还是NoSQL数据库使用统一的编程模型进行数据库的访问,不需要了解底层数据库的编程细节,这既具有理论意义,又具有使用价值。

本文提出的关系型数据库与非关系型数据库的统一访问模型旨在为SQL和NoSQL存储提供统一的编程访问模型,在HBase[5]和MySQL的数据库之间架起一座桥梁屏蔽底层的数据库的编程模型的差异,即为开发人员提供一个屏蔽底层的分离的数据源的访问解决方案。

1 基于HibernateOGM的SQL和NoSQL的统一访问模型的设计

1.1 HibernateOGM介绍

Hibernate Object/Grid Mapper(OGM)[6]这个项目能够为NoSQL数据库提供Java Persistence(JPA)支持。它复用了Hibernate Core引擎将实体持久化至NoSQL数据存储中,而不是关系型数据库中。它还复用了Java Persistence Query Language(JP-QL)来搜索数据。

通过重写Datastore provider和GridDialect,使得Hibernate OGM拥有访问HBase的能力,实现的原理如下,将非结构化压缩成结构化的数据。在Hiberante OGM框架中,Datastore provider扮演了数据提供者的角色,任何SQL或者NoSQL数据库,都可以通过重写Datastore provider来定制自己的数据库访问方式,因此,可以通过改写Datastore provider来定制框架,使框架拥有访问HBase的能力。

图1 Hibernate OGM架构图Fig.1 HibernateOGM Structure

1.2 JAVA注解

Annotation(注解)是JDK1.5及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件、或者运行时中出现(SOURCE/CLASS/RUNTIME)。

通过为类添加注解,可以在程序运行时查看某一个对象的注解对应哪个数据库,从而实现了程序自动建立对象和数据库之间的联系。

1.3 模型架构

此部分,介绍模型的架构和架构的中间件的功能。本架构中包含如下中间件:模型解析器、数据源分离策略的HBase模型处理器、数据源分离策略的MySQL模型处理器。模型架构如下图2所示。

1.3.1 mode parser

此部分为模型架构的模型解析器,当架构存储

数据时,会传递JAVA BEAN给mode parser模块,此模块判断运行时判断JAVA BEAN的注解信息,根据注解信息即可判断此JAVA BEAN中包含的数据将要被传送到哪个数据库,然后将此JAVA BEAN传递到相应的MO DE。此模块是整个数据访问流的中转模块。当读取数据时,此模块负责将数据与相应的JAVA BEAN做转换。

图2 模型架构图Fig.2 Mode Structure

1.3.2 HBase mode

此模块用于模型框架对于HBase的读取和写入操作,对于原生的HBase的API做了一次封装,使得框架上层传送的数据能够访问HBase数据库。

Insert handler:此模块用于执行框架数据插入HBase数据,根据框架上层传送的JAVA BEAN,此模块可以解析出将要插入的数据库表的名称,然后根据相应的插入逻辑,执行底层的实际的插入HBase数据的操作。

Delete handler:此模块用于执行框架数据删除HBase的数据,根据框架上层传送的JAVA BEAN,从模块可以解析出将要删除的数据的表的名称、ROWKEY,然后根据相应的删除逻辑,执行底层的实际的删除HBase数据的操作。

Read Handler:此模块用于执行框架数据的读取查询HBase的数据,根据框架上层传送的JAVA BEAN,从模块可以解析出将要读取的数据的表的名称、ROWKEY,然后根据相应的读取逻辑,执行底层的实际的读取数据的操作。

1.3.3 MySQL mode

此模块用于模型框架对于MySQL的读取和写入操作,对于原生的MySQL的API做了一次封装,使得框架上层传送的数据能够访问HBase数据库。

Insert handler:此模块用于执行框架数据插入HBase数据。根据传递的信息,解析出数据库名称,执行MYSQL数据库的插入。

Delete handler:此模块用于执行框架数据插入HBase数据。根据传递的信息,解析出数据库和PRIMARY KEY,执行MYSQL数据库的删除。

Read Handler:此模块用于执行框架数据的读取查询HBase的数据,根据传递的信息,从模块可以解析出将要读取的数据的表的名称、PRIMARY,KEY,然后根据相应的读取逻辑,执行底层的实际的读取数据的操作。

2 模型实现

此模块主要介绍次模型框架的实现思路和原理。中间件的实现是通过使用Java语言,HBase API和JDBC API来创建平台类。中间件层的所有接口都封装在Platform Class中。在加载过程中,Platform Class首先读取记录HBase和MySQL信息的配置文件,来实现和HBase、MySQL数据通信来验证配置信息中的数据库信息。其次,调用配置模块进行存储平台的配置,主要包括HBase的初始化,创建作为Platform类的静态变量的MySQL连接池,映射关系用于完成HBase和MySQL的数据关联。然后,用户程序可以通过调用由搜索模块,读取模块,写入模块和删除模块提供的接口来操作数据。这些接口遵循数据关联模块中定义的规则,确保HBase和MySQL中的数据关联。框架的加载到运行流程图如下图3所示:

图3 模型加载流程Fig.3 Mode load process

2.1 mode parser模块的实现

框架可以动态识别传递来的BEAN所属的数据

库,原理是使用了JAVA annotation,通过动态解析,可以减少框架的配置量,实现过程如下图4所示:

图4 mode parser流程Fig.4 mode parser process

2.2 HBase mode模块的实现

此模块重写了Datastore provider和GridDialect,使得Hibernate OGM拥有访问HBase的能力,实现的原理如下,将非结构化压缩成结构化的数据。在Hiberante OGM框架中,Datastore provider扮演了数据提供者的角色,任何SQL或者NoSQL数据库,都可以通过重写Datastore provider来定制自己的数据库访问方式,因此,可以通过改写Datastore provider来定制框架,使框架拥有访问HBase的能力。对数据库的操作主要是CURD操作,GridDialect作为一个JAVA基类,通过继承并拓展重写,可以派生出对某一个特定数据库的CURD操作,重写GridDialect某一个函数就是拓展改写访问数据库的一种功能,在GridDialect类中定义了丰富的可被改写的可继承的函数,通过这些函数完成了拓展改写数据库CURD的能力。总之,通过Datastore provider和 GridDialect完了对某一特定数据库,特定数据库的操作的编程。

2.2.1 Delete handler模块的实现

这个接口的输入是一个JAVA BEAN,输出是成功还是失败。接口遵循数据关联模块规则:HBase的表名对应于JAVA BEAN的对象名,HBase的列族名对应于JAVA BEAN中的内嵌对象的名字,HBase列族里的KEY名称对应于JAVA BEAN内嵌对象的成员名;MySQL表明对应于JAVA BEAN对象名,列名对应BEAN中的成员变量名。因此删除一行数据,需要ROWKEY和表名。删除流程如下图5所示:

图5 Delete handler流程Fig.5 delete handler process

2.2.2 Insert handler模块的实现

这个接口的输入是一个JAVA BEAN,输出是成功还是失败。接口遵循数据关联模块规则:HBase的表名对应于JAVA BEAN的对象名,HBase的列族名对应于JAVA BEAN中的内嵌对象的名字,HBase列族里的KEY名称对应于JAVA BEAN内嵌对象的成员名;MySQL表明对应于JAVA BEAN对象名,列名对应BEAN中的成员变量名。默认情况下,HBase和MySQL存储相同的数据模式。插入模块运行时流程如下图6所示:

图6 Insert handler流程Fig.6 Insert handler process

2.2.3 Read handler模块的实现

存储平台的读模块负责从HBase读取数据。 它包括读取HBase表的所有数据,读取HBase表的行数据的接口和读取对应于HBase表的MySQL表的所有记录的接口。读取模块运行时流程如下图7所示:

图7 Read handler流程Fig.7 read handler process

2.3 MySQL mode模块的实现

MySQLMode的实现,与HBase mode的实现大同小异。MySQL的数据格式固定,所以数据被HibernateOGM转换后是标准的“表名.列名”的格式,分割后可以解析出表名和列名,然后交由需要的处理逻辑进行处理。

Insert handler:此模块用于执行框架数据插入HBase数据。根据传递的信息,解析出数据库名称,执行MYSQL数据库的插入。

Delete handler:此模块用于执行框架数据插入HBase数据。根据传递的信息,解析出数据库和PRIMARY KEY,执行MYSQL数据库的删除。

Read Handler:此模块用于执行框架数据的读取查询HBase的数据,根据传递的信息,从模块可以解析出将要读取的数据的表的名称、PRIMARY,KEY,然后根据相应的读取逻辑,执行底层的实际的读取数据的操作。

3 结论

本文阐释了基于HibernateOGM框架的SQL和NoSQL统一访问架构的设计与实现,该访问模型理论上适用于任一种SQL数据库和NoSQL数据库,并选定HBase和MySQL对框架进行了完整实现,通过框架提出的mode parser,实现了统一访问中的NoSQL数据和MySQL中的SQL数据。简化了编程模式,开发人员只需专注于数据的格式定义,并给出相应的BEAN并在BEAN标明注解即可,提高了开发效率和可维护性。但面对海量数据的查询,该查询模型的查询效率还需 进一步改进和优化。总的来说,该统一查询模型出的理论框架是可行的,达到了预期的效果。

致谢(可选)

感谢我的指导老师鄂海红老师的全心指导,用心关怀。鄂海红老师积极勤奋,性格开朗,思维严谨,工作认真负责,在学术上出类拔萃。鄂海红老师在日常生活和学习中给我无微不至的照顾,并且从毕业论文的开题到最终答辩,一直给我悉心指导,提出宝贵的意见。鄂海红老师认真负责的态度、积极勤奋的品格,都将成为我以后人生路上学习的榜样。感谢所有本文参考文献的作者们,你们的研究给了我很多启发,对本文的研究有莫大的帮助。

[1] Stonebraker M. SQL databases v. NoSQL databases. Communications of the ACM, 2010, 53(4): 10-11.

[2] Rick Cattell. Scalable SQL and NoSQL Data Stores.ACM Special Interest Group on Management of Data. New York, 2010: 12-27.

[3] Stonebraker M. New sql: An alternative to nosql and old sql for new oltp apps. 2011.

[4] Brynko B. NuoDB: Reinventing the Database. Information Today, 2012, 29(9): 9-9.

[5] Hbase 0.95-SNAPSHOT Reference. http://hbase.apache.org/ xref/index.html.

[6] http://hibernate.org/ogm/

Design and Implementation of Relation Database and Non-Relation Database Unified Access Model Based on HibernateOGM

LIU Dong-kui E Hai-hong
(2. School of Computer Science, Beijing University of Posts and Telecommunications, Beijing 100876, China)

For the existing relational database and non-relational database has its own application-specific API scenarios, with the help of open-source framework Hibernate OG to establish a unified storage SQL database and non-NoSQL database framework, so that both of them Database read and write in a framework in accordance with the unified rules, without additional API view. Through the use of JAVA annotation distinction between the database type, JAVA object to fill data, Hibernate OGM framework automatically JAVA object analysis into point format, the underlying API package written by the original database engine. For the mixed use of HBase and MySQL scenarios, the above uniform access model for the experiment and validation. Experiments show that it is feasible to distinguish database types by JAVA annotation, populate data with JAVA objects, and unify database data storage through Hibernate OGM to implement SQL and NoSQL database.

HBase; MySQL; Database

TP311.13

A

10.3969/j.issn.1003-6970.2016.11.004

国家科技支撑计划(2014BAK15B01)。

李东奎(1992-),男,硕士研究生,HBase存储研究。

鄂海红,副教授,主要研究方向:大数据及个性化推荐系统。

猜你喜欢

海红编程统一
哈代诗歌的民谣艺术
坚持严管和厚爱相统一的着力点
编程,是一种态度
编程小能手
碑和帖的统一,心和形的统一,人和艺的统一
纺织机上诞生的编程
统一数量再比较
Isolation and callus formation of Gracilariopsis bailiniae(Gracilariales, Rhodophyta) protoplasts*
海红姑娘
Novel attribute-based framework for halftone watermarking