欢迎来到天天文库
浏览记录
ID:31365822
大小:130.00 KB
页数:18页
时间:2019-01-09
《sql server数据库到hbase数据库的模式转换和数据迁移研究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、SQLServer数据库到HBase数据库的模式转换和数据迁移研究 摘要:大数据背景下,SQLServer关系型数据库的存储容量暴涨,如何高效的实现把SQLServer数据库中的数据迁移到HBase分布式数据库,是亟需解决的一个关键问题。讨论研究了两种数据库之间的差异之后,首先提出了数据库模式之间的转换,把SQLServer数据表的模式,按照不丢失关系的原则,转换成HBase下的表模式;然后根据不同的表间关系的数据迁移的规则,实现SQLServer数据库中的数据迁移到HBase数据库。因为表间转换关系和数据迁移规则的预定义,实现了一键完成数据的迁移
2、。 关键词:SQLServer;HBase;迁移;模式;转换 中图分类号TP393文献标识码A 0引言 SQLServer是关系型数据库、按行存储,而HBase是分布式的非关系型数据库、按列存储。由于各自的这些特点,在建立数据库表模式时,SQLServer须指定表名、表中所有的字段及类型和主外键[1];而HBase在建立表模式时,须指定表名、列族和行键,但具体的列族中有哪些列是在插入数据时以键值对的形式出现,并且表间没有主外键的关联关系[2]。基于两者的这些不同特点,本文首先给出了SQLServer数据库到HBase数据库表模式转换的解决方案
3、。HBase数据库中各个列族的数据会分散存储到不同的节点,而相互之间通过行键关联[3][4]。在SQL18Server中关系表的数据,须存储到同一张HBase表的不同列族,才能在不损失效率的情况下实现快速有效查找。如何根据表模式转换的规则[5-6],从SQLServer数据库中获取到关联的数据,然后准确的插入到HBase表的对应列族中,文中研究给出了在适应大数据量的情况下,基于分页的数据迁移方案[7][8]。 1表模式转换的整体解决方案 通过连接SQLServer数据库,获取指定数据库中所有表的相关信息(列名、列类型、主键、外键),然后根据表间关
4、系的规则定义去发现SQLServer数据表中的关系,最后根据表模式转换规则定义,遍历关系转换成HBase表模式[9]。调用Java的工具包,配置和实例化HAdmin对象,调用添加HBase表列族的API函数把转换后的表模式执行到HBase数据库,从而建立HBase表模式,整体方案如图1所示。 2获取SqlServer数据库表模式 数据库表模式的主要信息包括表名、列名、列类型、列约束以及主键、外键信息。数据库表模式的获取,也就是先获取到所有的数据库表的表名称,根据表名称依次获取主外键、列的相关信息,再将数据保存到TableDef的对象中,图2给出了
5、获取SqlServer数据库表模式的处理过程。 获取SqlServer数据库中指定数据库的所有表的表模式按照如下步骤设计展开: 首先,执行StringBuffersql=newStringBuffer("SelectNAMEFROM").append(database).append("..SysObjectsWhereXType='U'ORDERBYName");SQL查询得到数据库中所有的用户表的表名称,并保存到List列表中。18 然后,根据表名执行Sql查询获取到一条数据表中的数据,得到结果集rs;rs.getMetaData()来解析
6、提取到该数据表的元数据信息ma,至此就可以得到表的列数ma.getColumnCount(),以及各列的详细信息,包括列名Ma.getColumnName(i)、列类型ma.getColumnTypeName(i)、列类型长度ma.getColumnDisplaySize(i),其中i表示当前结果集中列的序号。 最后,就是获取表的主外键和关联关系信息,这也是把SqlServer数据库表模式转换到Hbase表模式的最重要的信息。具体的实现过程如下: 先通过meta=JDBCSqlTest.getConnection().getMetaData();
7、取得数据库连接元数据,数据库的元数据信息包括了数据库中所有表的主键、外键及其他信息,这里只关注主外键的信息,并且可根据表名查找到指定表的主外键信息。 获取数据库表的主键的信息,可通过meta.getPrimaryKeys(null,null,tableName);获取到主键信息引用key。表中的主键列,具有相同的主键名,主键列COLUMN_NAME通过key.getString("COLUMN_NAME")获取,主键名PK_NAME则可通过key.getString("PK_NAME")得到。再使用key.next()可以获取下一条主键信息,直到为
8、空可以获取到该表所有主键信息。 获取数据库表的外键的信息,可通过meta.getImportedKeys(
此文档下载收益归作者所有