实时数据库领域中有关数据压缩的认识误区

来源:互联网 发布:mlb淘宝代购是真的吗 编辑:程序博客网 时间:2024/06/01 07:48

为了便于理解,以问题反问的形式来叙述:

1.实时数据库中的数据压缩技术很高深很神秘?

  现在的数据压缩理论和技术已经很成熟,在不同的应用领域,又可以针对不同的数据应用特征,引用不同的数据压缩技术,比如,图形处理领域的JEPG压缩技术,声音处理中的MP3压缩技术等。在流程工业行业中,工业实时数据也有一定的变化规律,可以针对这些规律,研究特定的数据压缩算法。

下面是工业实时数据的一些特征:

a. 工业实时数据的数据变化具有一定波形规律;
b. 工业实时数据中只有一小部分测点的值经常发生改变;
c. 工业实时数据中很多测点的数值都具有慢变化的特征;
d. 数值变化与时间变化具有共同变化特性;

e. 用户在一定范围内,能够允许数据的精度损失;

在工业应用领域中,常用的压缩算法分为三类:

(1) 无损压缩;【无损压缩一般以通用压缩理论为基础,采取哈佛曼算法等经典的压缩算法;】
(2) 有损压缩;【有损压缩而更多地考虑了工业实时数据的特征,而采取的一些特殊舍点算法;】
(3) 二级压缩;【二级压缩技术,则是同时利用了这两种数据压缩技术。】

  实时数据库的无损压缩以通用压缩理论为基础,随便找一本大学教材就能看懂,在此不再多说。

  目前比较著名的有损压缩算法,有PI中使用的旋转门压缩算法,IH中使用的死区压缩算法,以及一些变通压缩算法(如在旋转门算法基础上改用二次均方 差作为偏差比较,以提高数据还原精度),这些算法原理都比较简单。

总而言之,实时数据库的压缩算法真的不难理解,只是实时数据库重多技术中的一种而已。


2.只要搞清楚数据压缩算法,就能编写好的实时数据库了?

这个问题要从两方面来分析。
(1)首先要说明,数据压缩只是实时数据库中一个技术点,这个技术点相对于实时数据库其它技术点而言,难度和工作量是非常小的,只搞清数据压缩算法,是不能编写良好的实时数据库的。
(2)另一个方面,只从数据压缩这个角度来看,只考虑算法也是不行的。
在实时数据库的数据压缩模块中,除了要考虑压缩算法之外,还要考虑以下内容:
(1)变量ID、时间戳、质量戳、值四个字段在压缩算法中的数据组织,包括逻辑组织和空间组织;
(2)压缩算法与内存缓冲区的配合;
(3)压缩算法与磁盘文件的配合;

(4)特殊情况的数据处理,如,启动、停止、备份、恢复等时的数据压缩状态。


3.实时数据库中,数据压缩的压缩率越高越好?
刚才提到,实时数据库中的数据压缩算法都是非常简单,这是由实时数据库的应用特点决定的。要考虑一个实时数据库的数据压缩技术技术,需要从以下几方面考虑:
(1)数据压缩率;
(2)压缩数据的检索和定位速度;
(3)数据压缩时间;
(4)数据解压时间;
(5)压缩数据在内存和磁盘的组织结构,以便更方便地利用内存和磁盘的特性;
(6)数据解压后的还原精度;
数据压缩率只是其中一个指标,实时数据库追求的是综合性能指标,不能只看某一项指标。

从某个角度而言,在实时数据库的应用中,数据的压缩和解压时间的指标,要优先于数据压缩率指标。但是,在设计良好的系统中,这两个指标之间并不矛盾。


4.无损压缩比有损压缩要好?
在两个国外品牌PI和eDNA之间,经常会就无损压缩和有损压缩哪个更好这个问题产生争执。
基本上,在此争执中,eDNA的无损压缩处于攻势,而PI则见招折招处处守势。总的来说,eDNA的市场宣传做得很不错,很多用户都是这样评价:eDNA比PI相比有很多优点,它采用了无损压缩技术,还有......,而且,它的价格比PI便宜多了。
客观地讲,无损压缩有其好处,它在某些方面保证了数据的精度,但是,这并不能说,无损压缩一定比有损压缩好。
采用无损压缩算法的实时数据库厂家,不能回避以下两个问题:
(1)采用无损压缩算法的压缩率比采用有损压缩算法要低得多,针对工业实时数据的特征信息提取的无损压缩,是不可能达到10:1的。
(2)采用无损压缩算法的实时数据库,单机总处理点数会存在性能瓶颈,以目前主流的计算机而言,采用无损压缩算法的实时数据库,平均只能处理2万左右的历史点。
另外,无损压缩所宣称的100%保持数据不丢失,只是一句话宣传词,在计算机上处理工业实时数据,本身就存在大量的数据信息丢失:
(1)数据采集传感器存在采集误差;
(2)数据采集是实时数据趋势变化的采样和数字化的过程,采集周期之间的特征波型已经丢失;
(3)计算机处理和网络传输造成的延时和不确定,也会造成采集波型的失真;
(4)传感器和计算机的数据类型字节限制,也会造成数据的失真。
在存在多处无法控制的失真环节的情况下,只强调保存数据的完全不失真,是没有意义的,只是商务宣传的需要,只要是数字化和计算机化处理,所有的数据就是近似的处理过程。

有人会说,这也失真、那也失真,还处理个屁呀。这其实是一种处女情结,是在无意义地追求某个特定的指标而不考虑系统整体性能。如果实时数据库在采用 无损压缩的同时,还能保证很快的解压缩速度和较高的压缩率,当然无可厚非,但目前的理论和技术条件下,这些指标是矛盾的。而采取有损压缩技术,是在不影响 整体精度情况下的性能指标的综合平衡。


5.实时数据库中,数据压缩不重要,要不要数据压缩没关系?
关于这一论点,有两种不同的观点。
  第一种观点认为,现在的计算机硬盘很便宜了,磁盘容量不够,大不了多买几块磁盘。
  第二种观点认为,实时数据库的重点是上层功能和应用,在工业应用中,数据压缩费力又不讨好,还不如将精力放在其它功能上。
  这两种观点都不正确,实时数据库的市场存在意义,是因为现在的其它数据库产品,不能地处理大量工业实时和历史数据。这里说不能处理,包括处理速度和磁盘容量。

用关系数据库保存10000个每秒钟变化一次的双精度数,同时建立一个索引,保存一年需要磁盘空间为:12922G,而用实时数据库保存,则只需103G,大家可以换算一下,12922G,需要多少块磁盘?磁盘容量只是问题的一个方面,另一方面,数据的高压缩率意味着整个系统的数据处理速度更快,这体现在几个方面:

 (1)高压缩率的数据,占用磁盘空间小,

 (2)将 数据从磁盘读入内存的速度快,

 (3)网络传输的速度快,

 (4)数据在内存中占用的空间小。

而这几个因素,是实时数据库提高系统整体运行速度很重要的几个因素。

一个良好的实时数据库,必须要处理好实时压缩问题,只有处理好数据压缩问题,才能使系统的整体性能达到某个可用性指标。
以下有一个对是否选用实时数据库和数据压缩技术的简单判断:
(1)关系数据库只能处理5000点每秒变化的工业实时数据,在此范围内,可以不考虑选用实时数据库。
(2)在5000点至10000点的系统内,需要抛开关系数据库,重新设计自己的数据存贮系统,但是,在这个领域,是不太需要考虑数据压缩技术的。
(3)当系统的历史点数在10000点以上时,必须要考虑数据压缩技术和专门的实时数据库了。

很多朋友告诉我,他们的系统不采用数据压缩技术,他们也不关心数据压缩技术,他们认为,良好的上层应用软件比数据压缩更重要。我要对他们说:不同的 行业,不同的系统规模,对实时数据库的性能指标要求是不一样的。实时数据库系统是一个综合性的应用系统,设计良好的底层模块是其它模块良好运行的基础,数 据压缩技术与其它数据库技术一起,对整个系统的运行提供了很底层但很重要的环境,大型实时数据库系统中,数据压缩技术是必须考虑的,另一方面,实时数据库 中,数据压缩技术只是实时数据库系统中一个重要的技术点,但不是全部。

【文章摘自:http://bbs.51cto.com/thread-438245-1.html,非常感谢前辈的素材】


1 0
原创粉丝点击