为了更好地定义我的问题,我将逐步解释:
- 我需要将4个数据库中的选定数据合并为一个。
- 每个数据库记录从工业系统(主要是传感器和交换机)获得的数据。
- 数据库采用加密的.accdb格式
- 每个源数据库有3列:
- 时间戳(日期时间格式)
- point_id(变量名称 - 文本格式)
- _VAL(变量值 - 两个DB中的文本格式,另外两个DB中的字节)
- 每次更改(1秒分辨率)时,变量值都记录在一行中,并且每15分钟记录一次所有变量(以便每隔一段时间获取一次系统快照)。例:
- 1/9/2014 1:35:54 AM - Tank_Volume - 5,763
- 1/9/2014 1:35:54 AM - Line_Pressure - 14,325
- 1/9/2014 1:35:55 AM - Tank_Volume - 5,121
- 1/9/2014 1:35:56 AM - Tank_Volume - 4,911
- 我正在记录总共511个变量
- 输出DB要求是:
- 每行必须包含所有变量的一秒数据,按顺序且不跳过秒
- 每个变量必须有自己的列(511个变量+ 1表示时间戳),最好使用适当的格式保存空间(输出DB必须通过电子邮件发送)
- 如果变量值在给定秒内没有变化,则可以采用该变量的最后记录值
- 它必须仅包含选定时间段内的数据(例如:从2014年1月1日1:30:00到1月8日3:45:00 AM) - 我有要选择的字段用户界面
- 必须提示用户保存此合并数据库
- 应优化数据库,以便在复制所有数据后缩小其大小
我知道这不是太复杂,但我想就处理所有这些数据的最佳方式提出意见。源数据库每个可能超过1 GB(许多天的日志)。我通常只会将3到4个小时的数据输入到输出数据库中,但是它将是14000+行(每秒一个),512个cols,逐个单元解析...我想这要处理很多,对吗?
我的想法是:
- 与4个源DB建立连接(它们位于一个固定目录中)
- 选择要从每个数据库中提取的数据(基于UI开始和结束日期时间字段)并将其放在一个大型DataTable(SourceData)中
- 填充SourceData后,关闭与源DB的连接
- 使用算法创建3个输出DataTables(OutputData),该算法逐步解析SourceData中的每一行,并将其放在右侧行/列中(基于timestamp和point_id源列) - 如果有的话没有任何给定时间点的数据,重复前一秒的值
- 打开与输出数据库的连接(假设为空),或者创建一个,如果可能的话
- 检查是否有任何表格并删除它们,如果为真
- 创建3个表以包含所有cols(时间戳是所有3个表的主要时间)
- 使用OutputData
中的数据填充这些表
- 优化表格以减小尺寸
- 将数据库保存到备份文件夹,并提示用户将数据库保存在其他位置,并显示最终文件大小
- 清除SourceData和DataTable以清除RAM使用情况
醇>
是否有更强大的高效/轻松方式来实现我的目标?起初我是要立即读取/写入DB,但我认为使用可执行文件中的变量会比文件I / O快很多...
提前谢谢大家!