百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

异构数据库系统数据转换方法设计与实现

zhezhongyun 2025-09-12 06:10 14 浏览

摘 要: 针对传统关系数据库处理海量数据效率低下的问题,提出了一种基于键值数据库Level DB与传统关系数据库MySQL协同存储管理海量数据的方案,以及两种数据库之间数据转换方法。首先对两种数据库特点进行了分析,提出了一种异构数据库系统存储策略,并在此基础上介绍了Level DB到MySQL的数据转移流程以及基于实用性的异构数据转换方法,最后给出了数据转换应用示例展示,结果表明,该方法具备良好的可行性和实用价值。

0 引言

随着社会节能环保意识的不断加强,能耗监管网关被广泛地使用在学校、企业等各种大型公共建筑中,其运行的核心内容就是能耗数据[1]。由于能源消耗的激增,采用单一的传统关系数据库管理系统处理能耗数据存在很大的局限性,因此可以采用多个数据库协同管理的异构数据库系统的处理方案。支持数据管理的数据库产品呈现多样化,比较常见的大体分为两类,分别是键值数据库和关系数据库,两者都有各自的优缺点。

键值存储模型简单,具有高吞吐、海量存储、较强的扩展性等特点[2],可以作为实时数据库,快速地存储由感知层上报的能耗数据。关系数据库因为存取路径对用户透明、数据独立性好等特点,为数据库用户提供了对结构化数据的简单、健壮、灵活、高效的组织和管理方法[3],适合设计网关平台数据库,向用户提供能耗数据的页面展示,并能查询历史数据记录。

将键值数据库与关系数据库相结合,构建能耗监管网关数据管理系统,可以发挥各自的优势,实现对能耗数据的高效存储和访问。本文所述建筑能耗监管网关采用键值数据库Level DB加关系数据库MySQL的数据存储方案,由于两种数据库的数据存储模型不同,在实际运行环境中,数据在两者之间进行交流和转换,实现数据的共享,是网关系统运行不可避免的问题[4]。在叙述完数据库系统架构设计后,具体介绍异构数据转换方法。

1 数据库系统架构

图1所示为数据系统整体架构。

采集的能耗数据通过数据上报模板自动并实时上传给实时数据库,以保证数据得到有效的处理和支持高效率的查询服务。数据上报采取统一的JSON格式,实现数据组织、存储及交换的一致性。

网关数据库系统接收并存储感知层上传的能耗数据,并对其进行处理,具体设计分成键值数据库和传统关系数据库两部分。数据库接收到数据后,先存储数据至实时数据库Level DB,按照业务需求将数据分别存储在对应的数据库中,客户端程序可以通过REST接口将数据上传到页面,实现对能耗数据的实时监测;同时,后台程序读取JSON格式的实时数据,进行数据转换,形成对应的CSV格式文件,批量存储到MySQL。所以,客户端也可以通过SQL语言接口访问传统关系数据库MySQL,查询历史数据记录。

数据库访问接口集成了对能耗数据封装的两类接口:一类是标准结构化查询语言SQL接口,用于访问关系型数据库MySQL;另一类是用于访问实时数据库Level DB的REST接口。REST实时数据接口通过对Level DB数据库自带的API进行封装,形成一个类似于关系数据库对象关系映射模型的数据对象接口,隐藏了客户端与不同类型数据库之间连接细节,简化了用户对数据的读写和管理流程。

2 异构数据转移流程

数据的传输与存储效率是能耗监管网关非常重要的指标,选择一种合适的数据格式显得至关重要。JSON作为一种轻量级的数据格式,独立于编程语言和开发平台,并且易于阅读和编码[5]。相比于传统的XML文件格式,JSON格式屏蔽了前者解析文件时的复杂性,缩短数据传输和存储时间[6]。这些特征使JSON成为理想的数据交换语言,一般键值数据库支持JSON作为应用程序开发的数据载体[7]。因此本网关系统选择JSON格式作为传输媒介,将能耗数据实时存储到键值数据库Level DB,并向应用层客户端上报数据。

网关平台数据库基于关系数据库MySQL设计,数据的批量存储采用CSV格式。这是一种用来存储数据的纯文本格式,一般用于传统关系数据库的读写。CSV格式良好,主流数据库都支持该格式,非常有利于异构数据迁移[8]。

能耗数据上传并存储至实时数据库以后,需要转移到平台数据库MySQL,以便用户通过服务器访问查询数据记录。图2所示为能耗数据从实时数据库Level DB导入MySQL的总体流程。

整个过程包括以下4个步骤:

(1)导出实时数据表。能耗数据采集好后,从数据资源层上报并存储到实时数据库Level DB,第一步先从Level DB中取出实时数据,因为是以JSON格式存储的,当取出保存时,就形成了JSON格式的数据文件。

(2)JOSN文件放到缓冲区。由于两种数据库的读写速度不同,为了使两者工作衔接,在处理器中开辟一个缓冲区来临时存放交换的数据文件,因此保存实时数据表的JSON文件被取出后,被存储至缓冲区。

(3)数据转换。这是数据转移流程的核心。由于是在缓冲区完成数据转换,在导入MySQL前会判断是否转换成功,不会因为程序执行的滞后性导致系统运行阻塞。转换程序执行以后,需要根据文件生成的时间判断转换是否成功。此部分具体的转换程序在本文第3部分会详细叙述。

(4)MySQL是关系数据库,采用SQL语句将CSV文件批量导入MySQL。由于JSON格式保存了字段的值,没有值对应的属性信息,而数据在存入MySQL前,需要根据这些值的属性信息建立对应的数据表。数据表结构用于设置这些属性信息,在CSV数据导入前通过它可以在MySQL中建立对应的数据表,从而完成整个导入流程。文件结构表如表1所示,其中Field栏是字段列名,Type栏中是数据类型,括号中数字表示给字段分配的字节数,PRI表示主键,Default表示默认,NULL表示任何值都能保存。

3 数据转换程序设计

3.1 字段映射关系建立

建立异构数据格式之间的字段映射关系是数据转换的首要步骤,图3所示为字段映射关系示意图。图中上半部分的表格为数据记录的CSV格式,第一行为字段,第二、三、四行是字段内容;图的下半部分为JSON格式,字段和数值在双引号中,中间用冒号隔开,以值对的形式表示,例如“NodeID”:“1001”,多个值对组成一组记录,用大括号“{}”括起来的,每组记录对应CSV文件中每一行记录。在进行数据转换前,根据已知格式文件中的字段建立另一种文件格式的模板。通过读取CSV文件,执行转换程序,并将执行结果插入到数据模板中的相应位置,就可以得到相应JSON文档。

3.2 JSON文件转换成CSV文件

转换过程中,首先读取JSON文件,再利用push函数将每组记录存入临时数组arr[0],arr[2],...,arr[n],最后将各个临时数组作为数据流导入CSV文件,每个数组arr[i]作为一行记录,利用监听函数的记录的导入记录数,判断数据是否准确导入CSV文件,这样就将JSON格式的数据转换保存为CSV格式的文件。此转换过程如图4所示。

4 数据转换应用示例

数据转换程序设计是异构数据导入流程的核心部分,采用JavaScript语言作为数据转换部分的编程语言,软件环境采用在Linux系统中嵌入的Node.js平台。

将网关现场设备采集的数据存入实时数据库Level DB并上报至平台后,后台程序通过该数据转换方法将从实时数据库取出的JSON格式数据(图5所示为设备信息表的一部分)转换成CSV格式后,批量存入关系数据库MySQL。打开MySQL监视器,键入查看命令select*from DevInfo可以查看存入MySQL的设备信息表DevInfo。图6为MySQL监视器中设备信息表DevInfo截图。

5 结论

本文提出了基于键值数据库Level DB和关系数据库MySQL协同存储能耗数据的方案及其异构数据存储格式之间的转换方法。两种异构数据库数据结构不同,后台程序将数据从Level DB转移到MySQL时调用数据转换程序,可以实现两者的无缝对接。本文提出的存储方案和数据转换方法已应用于实际的能源监测系统中且系统运行良好,该方法具有一定的实用价值。

参考文献

[1] 曹洪波,陈扬.MySQL与SQL Server数据转换研究与实现[J].电脑开发与应用,2010,23(4):31-32,36.

[2] 周沫.Key value数据库的发展与展望[J].信息与电脑(理论版),2012(7):152-153.

[3] 刘小春.分布式海量空间数据存储结构研究[J].地矿测绘,2014,30(1):16-18,22.

[4] Li Ning, Xu Bin, Zhao Xin, et al. Database conversion based on relationship schema mapping[C]. 2011 International Conference on Internet Technology and Applications (iTAP), 2011:1-5.

[5] 高静,段会川.JSON数据传输效率研究[J].计算机工程与设计,2011,32(7):2267-2270.

[6] WEHNER P, PIBERGER C, GOHRINGER D. Using JSON to manage communication between services in the Internet of Things[C]. 2014 9th International Symposium on Reconfigurable and Communication-Centric Systems-on-Chip (ReCoSoC), 2014:1-4.

[7] Liu Zhenhua, HAMMERSCHMIDT B, MCMAHON D. JSON data management-supporting schema-less development in RDBMS[C]. Proceedings of the ACM SIGMOD International Conference on Management of Data, 2014: 1247-1258.

[8] 毛应爽.EXCEL到mongoDB数据迁移解决方案[J].信息通信,2013(7):87-88.

相关推荐

perl基础——循环控制_principle循环

在编程中,我们往往需要进行不同情况的判断,选择,重复操作。这些时候我们需要对简单语句来添加循环控制变量或者命令。if/unless我们需要在满足特定条件下再执行的语句,可以通过if/unle...

CHAPTER 2 The Antechamber of M de Treville 第二章 特雷维尔先生的前厅

CHAPTER1TheThreePresentsofD'ArtagnantheElderCHAPTER2TheAntechamber...

CHAPTER 5 The King'S Musketeers and the Cardinal'S Guards 第五章 国王的火枪手和红衣主教的卫士

CHAPTER3TheAudienceCHAPTER5TheKing'SMusketeersandtheCardinal'SGuard...

CHAPTER 3 The Audience 第三章 接见

CHAPTER3TheAudienceCHAPTER3TheAudience第三章接见M.DeTrévillewasatt...

别搞印象流!数据说明谁才是外线防守第一人!

来源:Reddit译者:@assholeeric编辑:伯伦WhoarethebestperimeterdefendersintheNBA?Here'sagraphofStea...

V-Day commemorations prove anti-China claims hollow

People'sLiberationArmyhonorguardstakepartinthemilitaryparademarkingthe80thanniversary...

EasyPoi使用_easypoi api

EasyPoi的主要特点:1.设计精巧,使用简单2.接口丰富,扩展简单3.默认值多,writelessdomore4.springmvc支持,web导出可以简单明了使用1.easypoi...

关于Oracle数据库12c 新特性总结_oracle数据库12514

概述今天主要简单介绍一下Oracle12c的一些新特性,仅供参考。参考:http://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NEWFT...

【开发者成长】JAVA 线上故障排查完整套路!

线上故障主要会包括CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题...

使用 Python 向多个地址发送电子邮件

在本文中,我们将演示如何使用Python编程语言向使用不同电子邮件地址的不同收件人发送电子邮件。具体来说,我们将向许多不同的人发送电子邮件。使用Python向多个地址发送电子邮件Python...

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

linux常用系统命令_linux操作系统常用命令

系统信息arch显示机器的处理器架构dmidecode-q显示硬件系统部件-(SMBIOS/DMI)hdparm-i/dev/hda罗列一个磁盘的架构特性hdparm-tT/dev/s...

小白入门必知必会-PostgreSQL-15.2源码编译安装

一PostgreSQL编译安装1.1下载源码包在PostgreSQL官方主页https://www.postgresql.org/ftp/source/下载区选择所需格式的源码包下载。cd/we...

Linux操作系统之常用命令_linux系统常用命令详解

Linux操作系统一、常用命令1.系统(1)系统信息arch显示机器的处理器架构uname-m显示机器的处理器架构uname-r显示正在使用的内核版本dmidecode-q显示硬件系...

linux网络命名空间简介_linux 网络相关命令

此篇会以例子的方式介绍下linux网络命名空间。此例中会创建两个networknamespace:nsa、nsb,一个网桥bridge0,nsa、nsb中添加网络设备veth,网络设备间...