搜索
热搜: 活动 交友 discuz
查看: 3186|回复: 14
收起左侧

[技术求助] 求读取超大XML数据思路、方案以及各种有助于解决问题的...

[复制链接]

该用户从未签到

发表于 2016-3-11 18:08:23 | 显示全部楼层 |阅读模式
本帖最后由 TigerJiang 于 2016-3-11 20:32 编辑

第一次来鱼儿这,遇到一个棘手的问题,各种尝试而不得解决,求助论坛的码农帮助集思广益,帮助我找到解决问题的方法以及思路,谢谢大家。
问题是这样:
一条流水线四台机器,贴片机——》印刷机——》炉前——》炉后,每台机器大致会在极短的时间内(大致30秒左右)产生一个,关于机器本身以及通过机器处理的PBC板的XML文件数据(文档大致约有500MB上下),数据大致超过30万条,XML的结构深度一般有四五级。
现在要在这块PBC板进入下一个机器处理流程之前解析这个XML数据,并导入数据库以供外网的前台依据这些数据做出预警或是迫使生产流程部分闭环或整体闭环。这个XML整体数据都导入库表视为合法数据,丢失或是任何情况下发生异常都视为异常数据回滚。整套数据读取、导入以及计算、发起预警必须在90秒内完成,否则PBC板已经进入下一个流程产生的数据已经没有意义。


我有一很糙的构思,构思来源快播播放器,一个视频可以从任何一个地方截取上传并且可以播放。
那么我这个XML可以不可以把它像据木头一样截取成很多个小等分转换成二进制,然后再用多线程读取这些截取的小等分。
最后将读取的小等分数据合成一个完整的数据,再用多线程写入多个临时表。当所有的线程跑完后,将这些临时表的数据
一股脑儿导入到正式表中。当然这只是我的构思,具体怎么截取这个XML文件,然后又怎么读取这些不完整的二进制数据
我不得而知,但是我想这样应该是可以的,如果有对断点续传熟悉的朋友请指点我。今天有一些朋友说了很多种方式我十分
谢谢你们的帮助,但是我认为只要用XML对象来读取这个XML文件在有限的里应该是行不通的,不是说XML对象性能不优
而是在这样级别和如此的时间内要做到我想是比较困难的。

  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2016-3-11 18:12:19 | 显示全部楼层
    30秒产生一个数据包,为啥是90秒内报警可以?入库为什么会失败?

    点评

    数据包是由第三公司公司的设备产生,第三公司没有提供可以实施数据传送功能,所以需要自己解析数据。90秒内预警有效是因为PBC板在传送带上从前一台机器到下一台机器所需要的时间在105秒,所以必须在90秒预警剩余15有  详情 回复 发表于 2016-3-11 18:18

    该用户从未签到

     楼主| 发表于 2016-3-11 18:18:38 | 显示全部楼层
    木魚 发表于 2016-3-11 18:12
    30秒产生一个数据包,为啥是90秒内报警可以?入库为什么会失败?

    数据包是由第三公司公司的设备产生,第三公司没有提供可以实施数据传送功能,所以需要自己解析数据。90秒内预警有效是因为PBC板在传送带上从前一台机器到下一台机器所需要的时间在105秒,所以必须在90秒预警剩余15有操作人员查看预警信息以及是否闭环。判断入库失败是为了要保证数据完整性,长时间数据读写会超时,还有一种情况是XML数据错误,一般情况不会出现,所以读取XML过程中有必要判断数据的完整性。
  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2016-3-11 18:22:46 | 显示全部楼层
    所以说,核心就是在90秒内完成文件读取+数据库入库?

    点评

    对,数据在这时间段入库才是最重要的。  详情 回复 发表于 2016-3-11 18:46
    对,最核心就是在90秒入库,前台计算几十万的数据不是问题。  详情 回复 发表于 2016-3-11 18:44

    该用户从未签到

    发表于 2016-3-11 18:36:10 来自手机 | 显示全部楼层
    XML是写入什么地方,以及实际读取方式是?

    该用户从未签到

     楼主| 发表于 2016-3-11 18:44:47 来自手机 | 显示全部楼层
    木魚 发表于 2016-3-11 18:22
    所以说,核心就是在90秒内完成文件读取+数据库入库?

    对,最核心就是在90秒入库,前台计算几十万的数据不是问题。

    该用户从未签到

     楼主| 发表于 2016-3-11 18:46:27 来自手机 | 显示全部楼层
    木魚 发表于 2016-3-11 18:22
    所以说,核心就是在90秒内完成文件读取+数据库入库?

    对,数据在这时间段入库才是最重要的。
  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2016-3-11 18:54:20 | 显示全部楼层
    XML 文件是怎么写入硬盘的?有没有直接连接端口发送数据的?

    点评

    硬件设备厂商不会提供实时数据传送的接口,所以需要自己解析。  详情 回复 发表于 2016-3-11 18:59

    该用户从未签到

     楼主| 发表于 2016-3-11 18:59:30 来自手机 | 显示全部楼层
    木魚 发表于 2016-3-11 18:54
    XML 文件是怎么写入硬盘的?有没有直接连接端口发送数据的?

    硬件设备厂商不会提供实时数据传送的接口,所以需要自己解析。
  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2016-3-11 19:12:36 | 显示全部楼层
    我只能说入库的时候用SqlBulkCopy,性能不差的机器应该是可以完成入库要求的。数据库索引会影响写入速度。

    点评

    如果用Load读取XML感觉内存是数量级递增。页面直接假死,接着系统就假死什么都做不了了。一直等待,完整读取超过半个小时。  详情 回复 发表于 2016-3-11 19:17
    数据写入肯定用它了,其实最大的瓶颈来自于对XML读取,解析。我如果用Load对象,直接内存溢出。  详情 回复 发表于 2016-3-11 19:14
    您需要登录后才可以回帖 登录 | 入住

    本版积分规则

    申请友链| Archiver| 手机版| 鱼·后花园

    GMT+8, 2024-11-21 16:35 , Processed in 0.029397 second(s), 23 queries , Redis On.

    Powered by Discuz! X3.4

    © 2005-2024 鱼·后花园

    快速回复 返回顶部 返回列表