技术开发 频道

DM7数据库管理系统总体构架解析(下)

  海量数据分析

  在数据分析型应用中,查询往往需要连续扫描较多行数据。这对数据的快速处理提出了新的要求。在DM7系统中,采用列存储加快数据的IO装载,而后,数据的批量处理则成为快速处理的利器。

  1. 列式存储

  列存储表是相对普通的行存储表而言的,其间主要的不同就是列存储表的每一个列的数据都是存储在一起的,它不再是以记录为单位存储。一批数据存储在一个区中,区中记录有最大值,最小值。

  列存储的存储特点,最明显的重要好处之一,就是由于查询中的选择规则是通过列来定义的,每个区描述项中都存储了区数据中的最大值及最小值,并且每个列的数据都是连续存储,因此整个列存储表的每个列是自动索引化的。

  使用列存储表组织数据的另一个优点就是,列存储在压缩方面比传统的关系型数据库更加有效。

  使用列存储表组织数据的另一个重要优势是读取的数据量以及其吞吐量。基于列来读取数据,仅仅需要读出想要了解的数据。

  2. 分段式数据压缩

  传统的普通行存储表数据不能以一种通用的方式进行压缩,主要是由于存在以下两个问题:

  1) 按行存储的数据存储方式不利于压缩。这是因为行存储的每一个列的数据类型一般不相同,如果一起压缩时,重复并不多,压缩效率非常低,所以一般情况下是每个列单独做压缩,但我们还是发现,即便这样,行存储数据的压缩,压缩率最多能有5-10%;

  2) 在OLTP 环境中,大量读取和更新混杂在一起。每一次更新需要进行压缩操作,而读取只需解压缩操作,大多数的数据压缩算法在压缩时比解压缩时慢4 倍。这一开销将明显降低OLTP 数据库引擎的事务处理效率而使得数据压缩的代价昂贵到几乎不能忍受。

  在数据仓库应用中,数据压缩可以用小得多的代价换取更大好处。其中包括减少对于存储量的要求;增大数据吞吐量,这相当于减少查询响应时间。

  DM7列存储支持了数据压缩。这是由于每列的数据按列并且连续存储,相邻接的字段值具有相同的数据类型,其二进制值的范围通常也要小得多,所以压缩更容易,压缩比更高。经过我们长期试验及总结,对按列存储的数据通常能得到大于50%的压缩。这使得达梦数据库的列存储表在获得查询的优良性能的同时,减少了对于存储空间的需求。

  DM7列存储表的实现方式是每一个列都分成若干个区,这样方便存储对应数据的统计信息,提高对数据的查询速度,更重要的是这样有效的将每个列的数据分片处理,分片管理,这样就可以在扫描数据时不一定进行全表扫描,同时在压缩数据时,将每一个区做为一个压缩包进行处理(分段压缩机制),而不是将整个数据列做为压缩数据(如此管理困难并且效率太低),这种分段压缩很有效的提高了系统效率,因为如果一个区需要进行扫描,则将这个区载入内存并解压,后面处理时这个区的所有数据都存放在内存中,这不仅减少了IO量,同时还提高了查询速度。

  3. 批量数据处理

  当数据读入内存后,按照传统策略,需要经过逐行过滤、连接、计算等操作处理后,才能生成最终结果集。在海量的数据处理场景下,必然产生大量重复的函数调用及数据的反复拷贝与计算代价。

  在DM7中引入了数据的批量处理技术,即读取一批,计算一批,传递一批,生成一批。数据批量处理,具有显而易见的好处:

  l 内存紧靠在一起的数据执行批量计算,可以显著提升操作系统CACHE命中率,从而提升内存处理效率。

  l 数据成批而非单行地抽取与传递,可以显著减少在上下层操作符间流转数据的函数调用次数。

  l 采用优化的引用方式在操作符间传递数据,可以有效降低数据复制的代价。

  l 系统标量函数支持批量计算,可以进一步减少函数调用次数。

  采用批量数据处理策略后,大批量数据查询的效率可以成倍提升。

0
相关文章