服务热线:
您当前的位置:首页 > 世纪星月刊 > 第7期 (2010年7月)

【技术前沿】高速数据存储的仿真

2011/10/11 10:58:44

 

作者:研发部 孙辉

 

简介

 

  最近做了一个关于数据高速采集、存储的测试程序,重点测试压缩算法的压缩比以及所选文档结构是否合理。设定的测试条件是假定有1000个测试点,1毫秒采样一次,这样在不采取任何压缩的条件下1小时产生的数据需要的存储空间是

   1000*1000*60*60*16 = 57.6G

  其中16表示一个数据信息占用16个字节,包括变量ID占用4个字节,值占用4个字节,时间(包含毫秒)占用8个字节。这些数据中包含了大量的重复性信息,如果全部保存下来是无法容忍的。只要选择合适的压缩算法及文件存储结构,数据量将会有很大的下降。

  在测试程序中需要处理的事务主要分为以下几个部分:
   1 从设备获取原始数据;
   2 对原始数据进行分拣,分别存入对应测试点的缓存中;
   3 循环扫描各测试点的缓冲区,当达到半满时,对数据进行压缩,之后存入待存储缓冲区;
   4 当待存储缓冲区半满时,执行文档IO操作,把数据保存到磁盘中。

 

 

 

图 1

 

获取原始数据

 

  高速采集卡一般都采用直接存储器存取(DMA)方式,采集卡直接把数据送到内存中的指定区域,不需要CPU进行管理,减小了CPU的负载。但内存区域的大小通常都是指定的,如果数据不能及时被取走,新到的数据就会把原有的数据覆盖,造成数据的丢失。因此获取原始数据优先级较高,由单独一个线程来实现,缓冲区大小由测试点个数及需要缓存的时间决定,上图中的16M由1000个变量缓存1秒钟所需空间确定的。

 

数据处理

 

  数据处理单元主要完成的任务包括:对数据进行第一次有损压缩,并对数据信息中的时间戳进行处理只保留起点时间及各个数据的时间差值。这样时间戳由原来的8个字节减小为4个字节,数据量缩小了一倍。有损压缩采用目前比较流行的旋转门压缩算法。

 

存储单元

 

  存储单元执行真正的文件IO操作,这个过程是最耗费时间的,是整个系统的瓶颈。经过前期的数据处理单元,数据量已经大大的减少,实际测试显示,以标准的正弦波作为输入,数据压缩比大约30倍,减少了操作文件的次数。

在文件存储方面,每个测试点的数据都保存在一起,数据分块存储,每个块占4K字节,与磁盘的页大小保持一致,这样检索数据时减少了磁头寻道的时间。数据在保存之前经过二次无损压缩,数据量进一步减小。每个压缩块建立一个索引,记录压缩块中数据的起点时间、终点时间、数据长度等信息。索引信息单独保存一个文件,文件结构如下:

 

 

图 2

 

结论


  经测试,在保证不丢失数据的情况下,数据压缩比达到40倍左右,在实际应用中可以采用这种结构。■

 

 


企业邮箱  |  法律公告  |  隐私保护  |  联系我们  |