Qia's LabVIEW Station Virry Test & Control

We talk about LabVIEW and HVAC

大数据量的文件的保存与读取(一)

最近我花了很多时间研究LabVIEW中对于大数据量文件的存储与读取的.

过去翁老师的办法是通过使用保护,也就是使用semaphore技术来对同一文件的同时读取的情况进行先后排序,先操作的先获得控制权, 后面的必须等到前面的对该文件控制结束后,才能对其进行操作.这样处理在对数据量较小的文件来说,不会出现什么问题,在很短的时间内,先获得控制权的命令很快结束,下面的命令不用等待较长的时间.但如果是大数据量的文件在读取文件时间就会出现很大的问题,后面的命令也许会等上很长的时间,这对于采集数据在每两秒一组的数据采集率来说这是绝对应该避免的.因为这样很可能因为对大数据量文件读取导致后面存取命令长时间等待,势必出现有些数据无法保存的情况出现.

实验1

TestSpeed Whirlpool1

从上图可以看出对于读取单个数据量在888200的文件的,所用时间是可以不计的.
但如果对于多个文件的同时读取,会不会出现时间延迟的情况呢,接着我们进行了下面的实验

实验2
TestSpeed Whirlpool2

从上图可以看出三个数据量为888200的文件同时读取的时间在198ms,可见还是可以忽略不计的.但我们是否就可以用这样的方式来进行存储和读取呢,答案还得继续分析,我们最多使用到的是48台工位同时保存,但不需同时读取48台工位的数据,因为显示给用户始终是某一台工位的历史数据(数据量较大)或者当前数据.

实验3
把数据量从888200增加到27534200,一次性读出来所用时间为18080ms,也就是18.08s,可以看出所用时间远远超出了可以承受的范围,所以对于一次读取大数据量文件是不行的.

我们提出一种数据结构, 因为在读取小数据量文件的时候所用时间是我们能够承受的.我们把数据按照特定数据大小进行存储.比如86400个数据为一个单位.超过大小的,以另外一个文件存储. 在读取的时候,首先判断是否需要读取时间区域的文件是否在正在保存.如果是历史数据(这里指当前数据的历史数据,因为我们使用了分段存储技术), 直接读取,不需要使用semaphore技术. 这样的话,文件照写,数据照读,不会导致存储的数据的丢失现象出现. 所有我们要做的是:

1.数据按照每两秒保存一组(10组假定),总共48台工位,所以总数据量为48*10=480个数据需要在同一时刻追加到文件中
2.保存单个文件时候,需要为其保存一个数据头,数据头的内容为开始保存该文件的时间值,保存到数据库中.
3,需要显示以前数据(历史数据和当前数据未显示部分),首先读取该工位数据库中数据保存时间,并判断读取的内容属于哪一断.首先把不属于正在保存的文件的数据读出来.然后使用semaphore,对读取文件进行保护.未读写文件时,读取文件(时间应该在保持在100ms之内,从上面的实验可以看出时间并不用花多少,因为数据量不大),release semaphore,数据可以照常写入文件.
4.把所有读出的数据进行显示.

明天按照这个步骤来做,看能不能实现预期的目标

posted on 2005-03-05 22:33  LabVIEW开发者  阅读(9249)  评论(0编辑  收藏  举报

导航