论文部分内容阅读
由于日益庞大的业务处理,许多决策系统和OLAP系统的数据正在朝着TB数量级发展。面对各种存储了海量数据的巨型表,如何充分利用存储空间,节省系统维护成本,在查询海量数据时取得更好的性能,引起了数据库研究者们越来越多的关注。而将数据压缩技术引进数据库系统,成为了解决大数据量环境下数据库性能问题的有效手段之一。在传统的关系型数据库中,数据均是按行存储的(行存数据库),即关系表中同一条记录的不同属性值被依次顺序存放在物理磁盘上。遗憾的是,由于记录中不同的属性值通常取值于不同的值域,彼此间的相关性很小,导致按行存储的数据存储方式并不利于数据压缩的实现。列存数据库消除了行存数据库在数据压缩领域的不利条件。在列存数据库中,连续存储的数据均来源于同一个值域,而对同一个值域内的数据进行压缩正是各种经典数据压缩算法实现的前提和关键。为此,本文对如何将各种经典的数据压缩算法融入列存数据库进行了研究。首先,本文阐述了列存环境下数据压缩的重要意义,并对数据压缩技术的发展历程和国外主流列存商业数据库的现状进行了分析;其次,综述了数据压缩的相关概念以及列存数据库在数据压缩领域的巨大优势,并详细讨论了各种经典的数据压缩算法,具体包括了赫夫曼编码、算术编码、LZ77算法、LZW算法、RLE算法和空值压缩算法等。随后,本文深入研究了列存压缩运算库的结构设计。列存压缩运算库由压缩数据物理存储机制、压缩模块和数据源模块三个部分构成。其中,物理存储机制描述了不同压缩数据在列存数据库中同时存储的合理方案,是列存环境下各种压缩算法实现的必要保证;压缩模块则封装了具体压缩算法的细节,并负责对外提供统一的解压接口;而数据源模块扮演着通信媒介的角色,为压缩模块与数据库存储层之间的消息和数据传递提供服务。此外,通过归纳各种压缩数据的属性,本文对传统的数据库执行器算子进行了相应的改进,从而实现了压缩数据在压缩态下的直接查询。最后,本文以国产数据库神舟OSCAR为平台,具体实现了上述各项关键技术。通过对相关的性能测试结果进行对比分析,验证了本文所述内容的正确性和有效性,在减少列存数据库存储规模的同时,进一步自动优化了数据库系统的性能。