今天咱另换一个话题,谈谈在实时数据库领域中,有关数据压缩的一些认识误区。
我曾答应liyaoer123(实时数据库阵地的博主)同学,与他讨论一下数据压缩技术。另外,我经常收到一些朋友的来信,他们对实时数据库及数据压缩的认识有一些误区,今天,我便收到三封讨论实时数据库的邮件。
数据压缩是实时数据库中一个很重要的概念和技术,只要接触过实时数据库,都应该听说过数据压缩。同时,很多人对实时数据库中数据压缩存在误解,我们就一条一条地解说吧。
1.实时数据库中的数据压缩技术很高深很神秘。
现在的数据压缩理论和技术已经很成熟,大家可以看看我转摘的博文《数据压缩技术简史》,该文章浅显易懂,是一篇很好的关于数据压缩的科普文章。
在不同的应用领域,又可以针对不同的数据应用特征,引用不同的数据压缩技术,比如,图形处理领域的JEPG压缩技术,声音处理中的MP3压缩技术等。在流程工业行业中,工业实时数据也有一定的变化规律,可以针对这些规律,研究特定的数据压缩算法。
下面是工业实时数据的一些特征:
在工业应用领域中,常用的压缩算法分为三类:
其中,无损压缩一般以通用压缩理论为基础,采取哈佛曼算法等经典的压缩算法;而有损压缩而更多地考虑了工业实时数据的特征,而采取的一些特殊舍点算法;二级压缩技术,则是同时利用了这两种数据压缩技术。
实时数据库的无损压缩以通用压缩理论为基础,随便找一本大学教材就能看懂,在此不再多说。
目前比较著名的有损压缩算法,有PI中使用的旋转门压缩算法,IH中使用的死区压缩算法,以及一些变通压缩算法(如在旋转门算法基础上改用二次均方差作为偏差比较,以提高数据还原精度),这些算法原理都比较简单。网上有很多相关的文章,我在前几篇文章中提到的变化压缩算法,是死区压缩算法的简化变种,而liyaoer123同学在他的博客上帖出了osisoft关于旋转门压缩的技术文章,大家有兴趣可以去看看。
总而言之,实时数据库的压缩算法真的不难理解,只是实时数据库重多技术中的一种而已。
2.只要搞清楚数据压缩算法,就能编写好的实时数据库了。
这个问题要从两方面来分析。
首先要说明,数据压缩只是实时数据库中一个技术点,这个技术点相对于实时数据库其它技术点而言,难度和工作量是非常小的,我在《实时数据库的理论与技术》中,列出了实时数据库需关心的技术点,大家可以看看。只搞清数据压缩算法,是不能编写良好的实时数据库的。
另一个方面,只从数据压缩这个角度来看,只考虑算法也是不行的。
在实时数据库的数据压缩模块中,除了要考虑压缩算法之外,还要考虑以下内容:
3.实时数据库中,数据压缩的压缩率越高越好。
刚才提到,实时数据库中的数据压缩算法都是非常简单,这是由实时数据库的应用特点决定的。
要考虑一个实时数据库的数据压缩技术技术,需要从以下几方面考虑:
数据压缩率只是其中一个指标,实时数据库追求的是综合性能指标,不能只看某一项指标。
从某个角度而言,在实时数据库的应用中,数据的压缩和解压时间的指标,要优先于数据压缩率指标。但是,在设计良好的系统中,这两个指标之间并不矛盾。
4.无损压缩比有损压缩要好
在两个洋品牌PI和eDNA之间,经常会就无损压缩和有损压缩哪个更好这个问题产生争执。
基本上,在此争执中,eDNA的无损压缩处于攻势,而PI则见招折招处处守势。总的来说,eDNA的市场宣传做得很不错,很多用户都是这样评价:eDNA比PI相比有很多优点,它采用了无损压缩技术,还有......,而且,它的价格比PI便宜多了。
客观地讲,无损压缩有其好处,它在某些方面保证了数据的精度,但是,这并不能说,无损压缩一定比有损压缩好。
采用无损压缩算法的实时数据库厂家,不能回避以下两个问题:
采用无损压缩算法的压缩率比采用有损压缩算法要低得多,针对工业实时数据的特征信息提取的无损压缩,是不可能达到10:1的。
采用无损压缩算法的实时数据库,单机总处理点数会存在性能瓶颈,以目前主流的计算机而言,采用无损压缩算法的实时数据库,平均只能处理2万左右的历史点。
另外,无损压缩所宣称的100%保持数据不丢失,只是一句话宣传词,在计算机上处理工业实时数据,本身就存在大量的数据信息丢失:
在存在多处无法控制的失真环节的情况下,只强调保存数据的完全不失真,是没有意义的,只是商务宣传的需要,只要是数字化和计算机化处理,所有的数据就是近似的处理过程。
有人会说,这也失真、那也失真,还处理个屁呀。这其实是一种处女情结,是在无意义地追求某个特定的指标而不考虑系统整体性能。如果实时数据库在采用无损压缩的同时,还能保证很快的解压缩速度和较高的压缩率,当然无可厚非,但目前的理论和技术条件下,这些指标是矛盾的。而采取有损压缩技术,是在不影响整体精度情况下的性能指标的综合平衡。
5.实时数据库中,数据压缩不重要,要不要数据压缩没关系。
关于这一论点,有两种不同的观点。
第一种观点认为,现在的计算机硬盘很便宜了,磁盘容量不够,大不了多买几块磁盘。
第二种观点认为,实时数据库的重点是上层功能和应用,在工业应用中,数据压缩费力又不讨好,还不如将精力放在其它功能上。
这两种观点都不正确,实时数据库的市场存在意义,是因为现在的其它数据库产品,不能地处理大量工业实时和历史数据。这里说不能处理,包括处理速度和磁盘容量。
在我的文章《实时数据库历史数据容量的计算方法》中计算得出,用关系数据库保存10000个每秒钟变化一次的双精度数,同时建立一个索引,保存一年需要磁盘空间为:12922G,而用实时数据库保存,则只需103G,大家可以换算一下,12922G,需要多少块磁盘?
磁盘容量只是问题的一个方面,另一方面,数据的高压缩率意味着整个系统的数据处理速度更快,这体现在三个方面:高压缩率的数据,占用磁盘空间小,将数据从磁盘读入内存的速度快,网络传输的速度快,数据在内存中占用的空间小。而这三个因素,是实时数据库提高系统整体运行速度很重要的几个因素。
一个良好的实时数据库,必须要处理好实时压缩问题,只有处理好数据压缩问题,才能使系统的整体性能达到某个可用性指标。