将4个数据库合并并解析为一个

时间:2014-01-09 19:21:30

标签: c# database dataset ms-access-2010 visual-studio-express

为了更好地定义我的问题,我将逐步解释:

  • 我需要将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,逐个单元解析...我想这要处理很多,对吗?

我的想法是:

  1. 与4个源DB建立连接(它们位于一个固定目录中)
  2. 选择要从每个数据库中提取的数据(基于UI开始和结束日期时间字段)并将其放在一个大型DataTable(SourceData)中
  3. 填充SourceData后,关闭与源DB的连接
  4. 使用算法创建3个输出DataTables(OutputData),该算法逐步解析SourceData中的每一行,并将其放在右侧行/列中(基于timestamp和point_id源列) - 如果有的话没有任何给定时间点的数据,重复前一秒的值
  5. 打开与输出数据库的连接(假设为空),或者创建一个,如果可能的话
  6. 检查是否有任何表格并删除它们,如果为真
  7. 创建3个表以包含所有cols(时间戳是所有3个表的主要时间)
  8. 使用OutputData
  9. 中的数据填充这些表
  10. 优化表格以减小尺寸
  11. 将数据库保存到备份文件夹,并提示用户将数据库保存在其他位置,并显示最终文件大小
  12. 清除SourceData和DataTable以清除RAM使用情况
  13. 是否有更强大的高效/轻松方式来实现我的目标?起初我是要立即读取/写入DB,但我认为使用可执行文件中的变量会比文件I / O快很多...
    提前谢谢大家!

0 个答案:

没有答案