技术开发 频道

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

  高可用性

  1. 快速的自动故障恢复

  DM7服务器始终只是一个进程,无论采用何种保护措施,总是不可能完全避免系统故障的情况,如操作系统崩溃、机器掉电等。当外部故障消除后,DM服务器重新启动,需要快速消除当机造成的破坏,恢复到故障前状态,重新为客户端提供数据服务。而帮助数据库系统从故障中恢复,避免数据丢失和完整性破坏的工具,就是DM7的REDO日志系统。

  DM7改造了REDO日志的管理策略。采用逻辑LSN值替代了原有的物理文件地址映射到LSN生成机制,极大简化了REDO日志的处理逻辑,从而也提高了日志自身的稳定性与可靠性。REDO日志可以压缩存储,有效减少IO代价。

  在故障恢复时采用了并行处理机制执行REDO日志,有效减少重做花费的时间。

  2. 基于redo日志的主备系统

  主备系统是DM数据库管理系统提高容灾能力的重要手段。系统由一台主机与一或多台备机构成。主机提供正常的数据处理服务,备机则时刻保持与主机的数据同步。一旦主机发生故障,备机中的一台立刻可以切换成为新的主机,继续提供服务器。主备机的切换是通过服务器、观察器与接口自动完成的,对客户端几乎完全透明。

  DM7的主备系统基于优化后的REDO日志系统开发,功能更加稳定可靠。主备机间传递压缩的日志数据,通信效率大大提升。

  DM7主备环境搭建非常简单。首先在主机生成完全备份,还原到备机上。然后连接主备机器。主机就可以利用归档日志自动与备机同步数据。主备系统搭建就此完成。利用备份文件与归档日志,主备环境的搭建不再需要繁琐的操作或冗长的时间等待。

  服务器新增了配置模式,DM7服务器系统可以在不停机状态下在单机系统与主备系统间平滑变换,其在特殊环境下的实用性不言而喻。

  借助改进的字典缓存机制,DM7的主备系统可以提供全功能的数据库支持。客户端访问主机系统没有任何的功能限制,而备机同样可以作为主机的只读镜像,支持客户端的只读查询请求。

  3. 可靠的备份与恢复

  DM数据库系统可以提供数据库或整个服务器的冷/热备份以及对应的还原功能,达到数据库数据的保护和迁移。

  DM7在原有数据库级备份/还原功能基础上,新增了表级物理备份功能。

  表级备份操作将指定表B树的所有数据页保存在备份文件中,并在控制页中记录其关联信息。还原时,从目标数据段中逐个分配新页,复制内容,并按照记录中关联信息重新构造还原出新的B树。

  表级物理备份兼具了物理备份的快速性和逻辑备份的针对性,具有很强的实用性。表级备份可以作为特定对象数据迁移与快速装载的解决方案。基于表级备份技术的进行数据库的备份还原,还可以达到数据库文件的重组与收缩目的。

  4. 逻辑日志

  DM7在物理的REDO日志之外,又添加了逻辑日志。逻辑日志记录数据库表上的所有插入、删除、更新等数据变化。可以指定部分表记录逻辑日志,也可以设置所有表记录。借助逻辑日志,DM7系统可以提供操作分析、数据重演以及数据复制等高级功能。

  5. 高级复制

  DM7的复制功能基于逻辑日志实现。主机将逻辑日志发往从机,而从机根据日志模拟事务与语句重复主机的数据操作。相对语句级的复制,逻辑日志可以更准确地反映主机数据的时序变化,从而减少冲突,提高数据复制的一致性。

  海量数据分析

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

  1. 列式存储

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

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

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

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

  2. 分段式数据压缩

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

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

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

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

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

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

  3. 批量数据处理

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

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

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

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

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

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

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

0
相关文章