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

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

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

摘 要: 针对传统关系数据库处理海量数据效率低下的问题,提出了一种基于键值数据库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.

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...