王海林,张雅君(山西财经大学信息管理学院,太原 030006)
关系数据库向文档数据库的模式转换算法
王海林,张雅君
(山西财经大学信息管理学院,太原030006)
从数据库的角度来讲,大数据是指不可以被通常的数据处理工具如传统的数据库管理系统所捕获、存储、管理和分析的数据[1]。为了满足大数据存储及处理分析的需求,NoSQL(Not Only SQL)数据库应运而生。
不同于关系数据库,NoSQL数据库用来存储大量的非结构化数据,因此它的特征是非关系的、分布的、开源的、可水平扩展的。按照存储结构的不同,常见的NoSQL数据库可以分为文档式存储、列式存储、键值对存储、对象式存储和图形式存储。其中,MongoDB是一种轻量级文档式存储数据库,在不涉及到聚合函数的情况下,MongoDB在性能方面甚至要优于关系数据库[2]。
NoSQL数据库在性能上满足了对海量数据的高效存储和访问的需求,文献[3-5]在性能这方面做了详细的叙述。与关系数据库相比,NoSQL数据库灵活性更大,扩展性更高,可用性更强[6]。
为了将关系数据库中的数据迁移到NoSQL数据库中,实现从SQL到NoSQL的转换,并维持良好的查询性能,甚至是提高查询效率,许多学者都做了相关的研究。一些学者提出四种表模式变换方法,实现了从关系数据库向HBase迁移的半自动化迁移[7]。对于转换到HBase数据库的方法,也有学者提出使用嵌套和多重嵌套描述SQL数据库中的参照关系,设计了HBase的数据模式,并支持从关系数据库到HBase数据库的迁移[8]。因为一个表中任何数据的获得都只需执行一次查询,因此在这种模式下会提高查询性能。由于HBase是列存储数据库,与MongoDB存储结构不同,这种转换并不能实现到文档数据库的转换。
本文从ER图入手,提出一种转换算法,将SQL数据库中表间的参照关系转换为层次结构,将参照关系中外键所在的表作为子表嵌入到主键所在的表也就是父表中,从而存储到MongoDB数据库中。最后,实验结果表明这种算法不仅可以实现数据模式从SQL数据库到MongoDB数据库的转换,还可以提高数据查询的性能,更加符合大数据时代对数据分析的要求。
从结构化到半结构化再到非结构化,数据的形式越来越自由,越来越向无模式的方向发展。基于关系数据库存储半结构化或非结构化数据,可以利用已经完善的SQL数据库,降低开发者的学习曲线。Sinew是一个基于关系数据库的系统,它在关系数据库中定义了虚拟列,从而对键值对文档进行存储,实现了对半结构化数据的存储[9]。可正是由于以关系数据库为基础,这个系统在对数据的拓展性和进行分布式处理时都有很大的障碍。因此,NoSQL数据库呈现出了巨大的优势。
图数据库是NoSQL中的一种,有学者提出使用图数据库存储医疗数据,通过图中的节点实现了更高的扩展性[10]。也有学者提出基于文本构造图数据库的方法[11]。但是图数据库中存储的数据有一定的特征,如社交网络中的数据。因为它更适合处理数据间的关系,对于节点本身属性的处理没有优势。所以将没有具体特征的数据转存于图数据库中并不合适。
为了很好的利用NoSQL数据库无固定结构的优势,转换后的数据模式不仅要符合所使用数据库的特点,还可以有针对性的提高数据库性能。一些学者探索了在NoSQL中,如何在最小存储开销中优化查询性能[12]。他们提出的方法是在已知的模式中,用执行已定负载的成本引导从数据模型到物理模式的映射。可由于缺少目标NoSQL数据库的成本模型和搜索可能查询模式的方法,性能的比较是通过人工实现的,所以对于大量的数据,并不能说明这种映射可以更好的提高查询效率。QODM[13]是一个面向查询的工具,在工具中输入NoSQL数据库中数据存储结构和应用程序对数据查询的需要,就可以生成相应的数据模型和数据模式。可NoSQL并没有固定的数据结构,这就需要使用第三方工具实现数据的转换或迁移。
2.1基本转换思维
MongoDB的逻辑结构是一种层次结构,它由数据库(Database)、集合(Collection)和文档(Document)组成[14]。在关系数据库中,当查询涉及多个表时,通常需要使用连接查询。而由于MongoDB自身的特点,它不支持连接查询。为了弥补这一缺陷,MongoDB提供DBRef方式关联数据表,可这种关联方式并不是性能最优的查询方式。当把需要连接的内容放在一个集合中,也就是使用嵌套存储方式时,会消除表间的连接,提高查询效率。由于从关系数据库迁移到MongoDB的数据多为用于数据分析的历史数据,在MongoDB中对这些数据只做查询操作,因此这种嵌套存储方式不会影响MongoDB数据库的完整性和一致性。
2.2FR图元建模
使用元建模工具MetaEdit+对ER图进行建模,建立ER图的元模型,元模型建好后,使用逆向工程的方法从设计好的关系数据库生成ER图,然后使用“角色”对其进行遍历。
2.3数据模式基本转换
由于MongoDB是文档类型的数据库,所以在模型转换时,ER图中的实体型最终转换为文档集合,相关定义如下:
①E表示ER图的实体型,表示E的值,即E的实体。Ei表示ER图中第i个实体型;
②TE表示E最终生成的文档集合;
③E.A表示实体型E中的属性A。E.U表示E的属性全集,即由E的全部属性组成的集合。E.Apk表示E的主键,E.Afk表示E的外键,E.Aot表示E的其他属性集合,即E.Aot=E.U-E.Apk-E.Afk;
④E.pk表示E在联系中承担的主键角色;
⑤E.fk表示E在联系中承担的外键角色;
⑥E.Tfk表示模式转换后实体型E的E.Afk。
(1)单表模式转换
当实体型E不参照任何其它实体型时,模型转换前和转换后没有本质的区别。转换图如图1所示。
图1 单表模式转换
(2)参照模式转换
①简单转换
如图2所示,实体型E1的主键为E1.Apk,外键为E1. Afk=E1.A2,其他属性集合为E1.Aot=E1.B1。实体型E2的主键为E1.Apk=E2.A2,其他属性集合为E2.Aot=E2.B2。可以看出,E2的主键E2.A2为E1的外键。
图2 简单转换
在进行模式转换时,实体型E2的所有属性作为以E2.A2为节点的属性集合存储在E1中。也就是E1的外键不再是转换前的E2.A2,而是包含E2的主键和其他属性集合的集合。这样数据结构就不再是转换前的结构,而是将实体型连同其属性作为一个文档数据集合,内嵌于另一个实体型的属性中,即:
(2)纵向扩展
在1:n联系中,纵向扩展是指实体型E1参照E2,E2参照E3,依此类推,直至En-1参照En,而En不参照任何实体型。在模式转换后,En的属性集合En.U会作为En-1的外键存储在En-1.Tfk中,此时En-1的属性集合为En-1. U=En-1.Tfk∪En-1.Apk∪En-1.Aot;然后En-1的属性集合En-1.U会作为En-2的外键存储在En-2.Tfk中,En-2的属性集合变为En-2.U=En-2.Tfk∪En-2.Apk∪En-2.Aot;依次递推,就可得出如下结果:
综上所述,在小儿支气管哮喘急性发作治疗中,采用布地奈德混悬液联合吸入用异丙托溴铵治疗效果更为显著,有利于加速患儿临床症状消失,提高其整体治疗效果。
使用图来表示转换过程,如图3。
(3)横向扩展
横向扩展是指实体型E1既参照E2,也参照E3、E4…,En,如图4。此时有:
2.4ER模型转换算法
充当外键角色的实体型其自身所包含的属性信息是不完整的,因此,它的数据集合应该包含着它所参照的实体型。换句话说就是要将主键角色实体型的属性内嵌于参照关系中外键角色实体型的属性中,从而减少数据表与表之间的连接,提高查询效率。
由于MetaEdit+是随机确定遍历实体型顺序的,所以使用其对ER图进行遍历时,每一次的搜索顺序都是不同的。如果从只含有主键角色的实体型开始遍历,可以简化遍历算法。
图3 纵向扩展
首先,从任意实体型开始,通过“角色”遍历ER图,找到某一个只充当主键角色而不充当外键角色的实体型,然后从该实体型开始查找其上层是否有外键角色实体型。如果没有,则将该实体型转换为一个单独的文档集合存储在MongoDB中。若有则根据上层外键角色实体型找到其参照的所有实体型,将这些实体型分别转换为一个单独的文档集合存储在MongoDB中,再将它们连同自己的属性存入上一层外键角色的实体型中。此时,这个上层外键角色实体型参照的所有实体型都转换结束,就可以去除其外键角色将其看作只充当主键角色而不充当外键角色的实体型,继续循环。
图4 横向扩展
为了验证转换后的内嵌文档存储模式对查询性能的提高,需要在文档数据库中分别以内嵌文档模式和单文档模式存储同一数据集并对比执行相同查询时所需的时间。
3.1实验数据
实验使用了两个数据集,分别来自关系数据库SQL Server 2014的示例数据库Business和文档数据库MongoDB的示例数据库Northwind。根据前面所述的要求,我们将Business数据库的数据分别以单文档集合模式和内嵌文档集合模式存储在MongoDB中,并将Northwind数据库的数据转换为数据表的形式存储在SQL Server 2014中。Northwind中实体型间参照关系最大为3层,Business中实体型间参照关系最大为4层。
3.2性能比较
根据数据结构,设计单表查询语句和多重表连接查询语句。图5反映了随着表连接数的增加,MongoDB中使用内嵌和非内嵌模式时查询语句得出结果所需的时间。该结果证明了算法中内嵌数据的模式在某种程
度上提高了查询性能,缩短了查询所需要的时间。
图5 内嵌模式和非内嵌模式查询性能比较
从上图中可以看出两个数据集中内嵌模式比非内嵌模式的查询性能要高,所需时间要短,并且随着查询所涉及数据表数量的增多,使用内嵌模式的优势越明显。在MongoDB中,不支持数据表的连接操作,所以在非内嵌模式下的查询,需要在主键角色的文档集合中筛选满足条件的数据并把其查询出的结果赋予一个变量,再将变量中的相关属性作为条件在外键角色的文档集合中进行查询,最后返回查询结果。由于需要对不同文档集合的数据进行筛选和对中间变量的赋值和提取,会大大延长查询时间,降低数据库性能。而将关系数据库中表间的连接关系转换为内嵌结构只需要在一个文档集合中进行操作,从而节省了操作所需的时间。
本文提出了一种数据模式的转换算法,这种算法利用MetaEdit+中的“角色”遍历ER图,实现了数据模式从关系数据库到文档数据库的转换,解决了数据从传统的关系数据库迁移到大数据环境下NoSQL类型数据库中模式不同的问题,并通过实验说明了转换算法的正确性,验证了在转换后的内嵌模式下查询性能的提高。
[1]Jaroslav Pokorny.Database Technologies in the World of Big Data[C].Proceedings of the 16th International Conference on Computer Systems and Technologies.New York:ACM,2015:1-12.
[2]Zachary Parker,Scott Poe,Susan V.Vrbsky.Comparing NoSQL MongoDB to an SQL DB[C].Proceedings of the 51st ACM Southeast Conference.New York:ACM,2013.
[3]申德荣,于戈,王习特等.支持大数据管理的NoSQL系统研究综述[J].软件学报,2013,24(8):1786-1803.
[4]John Klein,Ian Gorton,Neil Ernst,et al.Performance Evaluation of NoSQL Databases:A Case Study[C].Proceedings of the 1st Workshop on Performance Analysis of Big Data Systems.New York:ACM,2015:5-10.
[5]王林彬,黎建辉,沈志宏.基于NoSQL的rdf数据存储与查询技术综述[J].计算机应用研究,2015,5(32):1281-1286.
[6]孟晓峰,慈祥.大数据管理:概念、技术与挑战[J].计算机研究与发展,2013,50(1):146-169.
[7]杨寒冰,赵龙,贾金原.HBase数据库迁移工具的设计与实现[J].计算机科学与探索,2013,7(3):236-246.
[8]Gansen Zhao,Libo Li,Zijing Li,et al.Multiple Nested Schema of HBase for Migration from SQL[C].Proceedings of Ninth International Conference on P2P,Parallel,Grid,Cloud and Internet Computing.2014:338-343.
[9]Daniel Tahara,Thaddeus Diamond,Daniel J.Abadi.Sinew:A SQL System for Multi-Structured Data[C].Proceedings of the SIGMOD 2014.New York:ACM,2014:815-826.
[10]Manpreet Singh,Karamjit Kaur.SQL2Neo:Moving Health-care Data From Relational To Graph Database[C].Proceedings of IACC.Piscataway,NJ:IEEE,2015:721-725.
[11]S.Jeon,Y.Khosiawan,B.Hong.Making a Graph Database from Unstructured Text[C].Proceedings of Computational Science and Engineering.Piscataway,NJ:IEEE,2013:981-988.
[12]Michael J.Mior.Automated Schema Design for NoSQL Databases[C].Proceedings of SIGMOD 2014.New York:ACM,2014:41-45.
[13]Xiang Li,Zhiyi Ma,Hongjie Chen.QODM:A Query-Oriented Data Modeling Approach for NoSQL Databases[C].Proceedings of WARTIA.Piscataway,NJ:IEEE,2014:338-345.
[14]Veronika Abramova,Jorge Bernardino.NoSQL Databases:MongoDB VS Cassandra[C].Proc of the International C*Conference on Computer Science and Software Engineering.New York,2013:14-22.
Schema Conversion;Document Database;MongoDB;NoSQL
An Algorithm for Schema Conversion from Relational Databases to Document-Oriented Databases
WANG Hai-lin,ZHANG Ya-jun
(College of Information Management,Shanxi University of Finance and Economics,Taiyuan 030006)
山西省回国留学人员科研资助项目(No.2013076)
1007-1423(2016)18-0018-06
10.3969/j.issn.1007-1423.2016.18.004
王海林(1962-),男,副教授,硕士,研究方向为数据建模、大数据、分布式系统、数据可视化张雅君(1992-),女,硕士研究生,研究方向为数据挖掘、数据建模
2016-06-07
2016-06-20
文档数据库是NoSQL数据库的一种,它与关系数据库在数据结构上存在较大差异。为了解决关系数据库与非关系数据库模式不同的问题,实现数据从关系数据库向非关系数据库的转换,以文档数据库MongoDB为例,利用元建模工具MetaEdit+中的“角色”遍历ER图,提出从关系数据库到文档数据库的模式转换算法。这种算法不仅解决传统关系数据库与文档数据库模式不同的问题,而且使得转换后的模式对数据库查询性能有显著的提高。实验结果说明这种转换的正确性以及模式对于查询的高效性。
数据模式转换;文档数据库;MongoDB;NoSQL
The document-oriented database is one of NoSQL databases;its schema is different from relational databases.In order to implement the conversion from relational databases to NoSQL databases,based on MongoDB,proposes an algorithm which achieves schema conversion of relational databases to document-oriented databases by traversing ER-Diagram in MetaEdit+which is one of tools for metamodeling. The algorithm not only solves the different schema problems between traditional relational databases and document-oriented databases,and the transformed model improves the performance of the database query.Finally,the experiment has shown the correctness of the algorithm and the high performance of join operation.