导读:对实时数据库而言,数据压缩可以带来两方面的好处:占用硬盘容量减小、系统整体处理速度提高。随着计算机硬件水平的提高,硬件成本在整个系统投入的比重逐步下降,硬盘容量不再是实时数据库中最主要的矛盾,但对系统整体处理速度及性能的追求,还是非常重要的。下文中就是实时数据库中二级压缩技术的讲解。
压缩比例的提高,对实时数据库的整体性能的提高有很大的推动作用(但不一定成正比),因此,有必要分析一下,能否对已经进行有损压缩处理的数据进行二级压缩。
如何进行二级压缩?
从刚才分析的情况,大家很可能就得出结论,行呀,先通过有损压缩,将点数由52个变成6个,再对剩下的6个点进行编码,再进行哈佛曼压缩或别的什么压缩,不就行了?
哈佛曼压缩的特点是,将那些经常使用的字母用较小长度的字节表示,这在文本和字符串压缩中会有比较大的效果,比如英文那个e就是用得很多的,而汉字中的五笔字型也有一级编码、二级编码等,也就是说,它们具有可压缩的余地。
如果大家对随机的数据点,比如刚才6个数据点,采用哈佛曼或其它无损压缩试验,会发现压缩率不会特别地高,也就是说,再次进行无损压缩的意义已经不是特别地大。 难度就没有别的办法了?办法还是有的,要完整地表达测点的一个数据,需要包括以下四个字段:
测点ID
时间戳
质量戳
值
其中,同一测点的多个数据可以保存在一起,因此,测点ID可以不考虑。还剩下三个字段,仔细分析一下这三个字段的特性,还是有很多文章可做的。
值
先考虑“值”字段,我们采用8字节的双精度数来表示一个模拟量,这里就存在一个由低精度值来表示高精度值的可能。如果一批数据中,全部(或大部分)数据都可以由4个字节(或2个字节)来表示精度误差范围内的8字节双精度数,便可以节省下很多空间了。
当然,如果我们能明确地知道某数据的精度范围,便可直接在配置环境下选择最合适的数据类型,而不必要一定要选择双精度数。
对于值,还有另一种压缩思路,在流程工业中,某值的绝对值可能非常大,但如果该值在某时间段时的变量范围在某个精度范围内,也可以采用基准值+变化值的方式保存值,其中基准值只保存一次,而变化值用低精度值表示。
质量戳
质量戳是慢变化量,如果不与值共同保存,则可以有很高的压缩比。但如果不共同保存,则需要考虑查找的索引方式,这是一笔额外的空间开销。
时间戳
对于时间戳,也可以按照值相类似的方式来考虑。
首先,那个毫秒字段,不一定是每个系统每个测点都需要的。再者,两个时间之间的相差值,在大部分情况下,不会超过1天的,这个就可以采用简化表示。还有,现在的系统,肯定不需要再处理时间为2000年以前的时间了。
以上只是分析,在实际系统中,还需要考虑这些因素的制约关系,解压的难度和时间度,索引建立的方便性,以及编程的复杂度。希望上文中涉及到的内容对大家能够有所帮助。
【编辑推荐】