技术开发 频道

应用系统优化之DM垂直分区

  【IT168 技术文档】随着数据库应用规模的扩展,需要管理的数据规模也越来越大,普通的数据库查询优化机制在某些情况下已不能满足性能要求了。利用数据库分区技术,可以有效减少I/O量,提升系统查询性能。文章描述了DM(达梦)数据库管理系统垂直分区的实现原理和使用限制,并举例说明了垂直分区的使用,为应用系统的优化提供参考。

  1.垂直分区简介

  数据库分区是一种物理数据库设计技术,其主要目的是为了在特定的SQL操作中减少数据读¬写的总量以缩减响应时间。垂直分区通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。

  DM数据库管理系统提供了垂直分区功能,供数据库管理员和应用开发人员使用,以优化系统的性能。本文主要目的是解释DM数据库管理系统垂直分区的实现思路,以及使用限制的说明,供数数据库管理员和应用开发人员参考。

  2. DM垂直分区实现说明

  DM数据库管理系统中,垂直分区的实现方式是:将垂直分区表分拆成多个表,每个表包含较少的列。定义一个垂直分区表,系统将自动为其创建一个分区基表和若干个分区子表。分区基表不保存实际数据,只保存表定义、分区信息,实际数据保存在分区子表中。

  每个分区子表包含定义的分区子表列和CLUSTER PK列。并且,在所有的分区子表上建立了CLUSTER PK索引。这样拆分后,每个子表只包含较少列数据,通过CLUSTER PK列进行行匹配,各个分区子表中的每个逻辑行与其他分区子表的相同逻辑行匹配,可以方便的还原主表定义的完整数据。

  2.1 数据修改的实现

  分区子表,对用户是透明的,用户操作的对象是分区基表,但实际数据是存放在分区子表中的。因此,系统内部必须将用户对分区基表的数据修改,映射到各个分区子表上。

  数据插入,由于分区子表只包含部分列,因此,系统在插入数据过程中,为每个分区子表从输入的分区基表数据中提取出需要的数据,并重新构造符合分区子表格式的记录,插入到每个分区子表。

  数据更新,如果被更新列是CLUSTER PK列,那么系统将在所有分区子表中删除对应的数据行,并根据新值构造相应的记录,重新插入分区子表。如果被更新列不是CLUSTER PK列,那么系统首先确定更新列对应的分区子表,并只对相应的分区子表做修改。

  数据删除,删除分区基表的一行数据,需要将其所有分区子表上对应的行删除。

  2.2 数据还原实现

  实现垂直分区表,还要考虑的一个问题是,如何保证垂直分区表的数据完整性和一致性。由于实际数据是存放在各个分区子表中的,基表中并没有任何数据,因此存在一个数据还原的过程――根据分布在不同分区子表中的数据,重新组织出与基表定义一致的数据。

  为了还原基表数据,DM数据库管理系统,使用了虚表技术――根据垂直分区表的定义,系统内部为垂直分区基表构造了一个虚表。虚表实现上类似于视图,包含表的列信息、约束信息以及分区信息,还包含类似于视图的查询SQL脚本,对分区子表上的CLUSTER PK列做等值查询,从各个分区子表获取数据,以重新构造出基表的数据行。

  2.3 分区指定实现

  垂直分区的主要目的是,使查询得以扫描较少的数据,减少I/O量,从而提高查询性能。例如,某个表包含七列,通常只引用该表的前三列,那么将该表的后四列拆分到一个单独的表中将有利于提高查询性能。

  一旦查询中使用到垂直分区表,系统判断查询需要的数据是否只涉及某个分区子表,如果是,直接使用分区子表替代分区基表,进行查询优化。系统只需以较少的I/O代价,即可获得需要的数据。如果数据是分布在多个分区子表中,系统使用2.2数据还原实现描述的虚表,替换分区基表,进行查询优化。这样的处理对用户来说是完全透明的。

  通过分区指定,系统可自动选择代价较少的查询路径,提高系统性能。

0
相关文章