文献数据库优化设计的探讨,本文主要内容关键词为:优化设计论文,文献论文,数据库论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
文献数据库良好的性能是建立在数据库设计基础上的。文献数据库的设计以及是否规范化与文献数据库的性能紧密相关。而文献数据库的性能好坏直接影响情报检索系统的性能,因此,优化文献数据库的设计,不是仅仅提高个别查询速度。本文针对文献数据库的特点,探索其优化设计的方法与策略、技术与对策。
1 文献数据库性能标准
如果没有一个目标则不可能设计物理模型。基于同一概念模型可以设计出多种物理模型,这些物理模型会由于性能目标的不同而不同。事实上,对于同一需求,两个设计者也会设计出不同的物理模型,但只要它们都能提供所需的性能则都是正确的模型。
在最初的概念模型到物理模型的映射阶段,需要遵从下列标准:
·单条记录的更新应当在1秒钟之内;
·多条记录的更新不超过10秒;
·对于少于4个表的、数据有一定限度的查询,响应时间应在5秒钟之内;
·对于其它的数据有一定限度的多表查询应在10秒内完成;
·整个表的查询时间应在30秒之内完成。
在这一阶段,不要采用“越快越好”的设计思想。在以后的系统设计和实现阶段(通常是在系统完成之后,监测性能之时),用户可能会提出更为特殊的要求。在这种情况下,可以采用尽可能快的设计。在实践中,写成SQL语句之前不可能有完全恰当的索引,这是因为优化器的决策是基于SQL语法的。由于优化器进行估计时需要考虑很多因素,因此,即使是最简单的单表查询命令也会表现出不同的性能。因此,在设计初期不必浪费时间去建立复杂的索引,因为到后来必须重做。同时,不要盲目地接受性能标准。对单个记录的处理在1秒钟之内完成一般是可以接受的。如果达不到这一要求,很可能是由于设计中存在一些基本的错误,但多表或多条记录的处理依赖于数据量的大小。例如两个表的接连查询,1,000,000行与10,000行的笛卡儿乘积一般需要5秒钟,这可能有些极端,但应尽早向用户说明这一现实。
2 文献数据库的规范化
对于一个规范的表,非键列依赖于键列,并且只依赖于键列。从关系模型的角度来看,标准的表应当满足第三范式(3NF)。这样的表结构最容易维护,而且最具有可维护性。
规范化的程度存在一种包含关系。例如,如果一个表属于第二范式,则它一定属于第一范式。在需要判断规范化的程度时,首先应假设这个关系不是规范化的,然后用每一级的定义去进行判断。进行规范化处理可以使表变小,从而减少访问表中数据所需的I/O时间。对文献数据库进行规范化处理具有以下优点:
·因为表的列数减少了,所以搜索、排序、创建索引的速度可以加快;
·因为表减小了,所以按照索引查询的速度加快了;
·可以更好地使用段来控制数据的物理存储;
·每个表可以只有很少的索引,因此可以加快更新速度;
·可以减少空值和冗余,使文献数据库更紧凑;
·因为减少了冗余的数据,可以使触发器的执行速度更快;
·减少数据的不规则性;
·规范化使文献数据库的维护和修改变得更容易。
文献数据库经过规范化以后,数据的查询虽然需要更多的连接操作,但对于具有索引的列,连接速度是比较快的。
2.1 第一范式
满足以下条件的关系称为第一范式:
·每一列必须是原子的、不可再分的;
·每一个表中不能有重复的列;
·每一行列位置上只能有一个值。
2.2 第二范式
对于一个关系,每一个非键属性都完全依赖于主键,没有部分依赖,则该关系属于第二范式。如果一个表只有一个单个的主键列,则该表必然属于第二范式。
2.3 第三范式
对于一个关系,如果属于第三范式,则非键属性不能依赖于另一个非键属性。
然而,全部采用规范化的设计可能达不到最佳的性能。因此,虽然推荐尽量采用第三范式的设计,但是在性能得不到满足的情况下,需用非规范的方法提高性能。
3 文献数据库的非规范化设计
规范化理论是进行文献数据库设计的指南和工具,根据规范化理论进行的设计借助于数据依赖的概念分析表示了各数据之间的联系,消除了数据冗余、数据更新异常问题。但是,由于客观世界复杂多变,影响最终设计结果的因素很多,并不是一个模型的规范化程度越高越好。随着规范化程度的提高,进行查询时的连接操作也会增加,从而会影响查询速度。因此,在进行实际的文献数据库设计时,为了提高效率,需要考虑对规范化的文献数据库物理设计进行非规范化。
3.1 非规范化的原因
在进行文献数据库设计时,出于文献数据库执行效率的考虑,可以适应采用非规范化的方法。所谓非规范化的方法,就是在文献数据库的设计中适当地降低文献数据库的范式。
在数据库理论中有1NF、2NF、3NF、BCNF、4NF多种范式,但一个完全规范化的设计往往并不会产生最佳的性能。因此,在文献数据库设计中,推荐采用3NF,在性能问题较严重的情况下,还要进一步降低规范化的程度。在下列情况下,通常要考虑进行非规范化处理:
·大量频繁的查询过程所涉及的表都需要进行连接;
·主要的应用程序在执行时要将表连接起来进行查询;
·对数据的计算需要临时表或进行复杂的查询。
3.2 非规范化技术
对文献数据库进行非规范化处理的目的在于提高情报检索系统的效率,但非规范化处理毕竟会增加数据冗余,会带来相应的数据完整性问题。因此,在决定是否进行非规范化处理时,必须仔细分析情报检索系统对数据访问的需求以及文献数据库性能的实际影响。在大多数情况下,良好的索引设计或其它一些方法可以使文献数据库的性能大为提高。在考虑非规范化处理时,要慎重考虑下面的几个问题:
·哪些是比较紧急的事务,哪些事务对响应时间有要求;
·这些事务的执行频率有多高;
·这些紧急的事务要操作哪些表以及表中的哪些列,每次要访问多少行;
·哪种类型的事务执行频率最高,查询、插入、删除还是更新;
·通常的排序顺序是什么;
·哪些工作会并发执行;
·经常访问的表有多大;
·哪些需要进行统计计算;
·数据的物理位置在哪里。
如果决定了要进行非规范化处理,常用的非规范化技术有增加冗余列,增加派生列,合并表。
3.2.1 增加冗余列
增加冗余列可以避免频繁地执行连接操作。当所有的更新或查询都不得不在两个表中进行时,可以在表中增加一个冗余的列。例如,对于下面的三个表:
其中作者编码有7位,前四位为作者代码,后三位为论文代码。
如果在应用程序中需要频繁连接作者表和题名表以便查询作者的姓名及其题名,那么,为了提高检索的速度,可以在题名表中加入一列作者姓名。虽然在题名表中出现了冗余列,但是查询时只需查询题名表,而无须进行连接操作,加快了检索的速度。
但是,尽管增加冗余列避免了许多查询时的连接操作,但带来了下列问题:
·需要对新的列进行维护,所有涉及该列的更新操作都必须在两个表中进行;
·由于列的冗余,需要更多的磁盘空间,因此这是一种以空间换取效率的方法。
3.2.2 增加派生列
派生列与冗余不同,不是直接从另一个表中获得的列,而是对另一个表中的数据进行一些计算的结果。增加派生列可以使统计计算减少连接操作,从而减少执行时间。
例如,对于下面的两个表。
如果在应用程序中需要频繁连接作者表和版面表以便查询作者的姓名及其交纳版面费的情况,则可以在作者表中增加一列版面费(版面金额×版面数)。
这样,版面费就成为作者表的派生列。查询时,则不必进行连接操作和统计计算。但应注意,这种处理增加了对磁盘空间的需求,并且在进行数据更新时需要对派生列进行维护。
3.2.3 合并表
如果有许多用户需要查看几个表连接在一起的集合,则可以将这几个表合并为一个表,避免查询时的连接操作,从而改善性能。
例如,对于下面的三个表:
如果应用需求要查看作者的基本情况及其著作情况,则应将这三个表合并为一个表,以加快检索速度。如下图所示。
合并表的方法避免了连接操作,但是失去了数据间概念上的分割。如果仍有某些应用程序只需要检索其中的一部分数据,则可以通过带条件的查询语句或视图来实现。
除了上面三种基本方法以外,还有重复表和分割表两种方法。严格地讲,重复表和分割表已不属于非规范化技术,但它们与非规范化技术具有相同的目的,并需要相同的保护机制。
3.2.4 重复表
如果一组用户经常要用到一组数据,可以把这些常用的数据子集组成一个表,这个表中的数据可能和其它表中的数据是重复的。
例如,对于下面的表:
如果要求一组用户能查询其中的作者编码、作者姓名、性别,则可以建立下面的重复表:
这么做的结果是将用户组的查询分散到了不同的对象上,有效地减少了竞争。但是,这种处理会带来严重的维护问题。
3.2.5 分割表
有时,分割一个规范化的表也可以改善性能。分割的方法有两种:垂直分割(把主键和某些列建成一个表,再把主键和另一些列建成一个表。)和水平分割(根据某几列中的数据将一个表按行分隔成两个表),如图1所示:
(1)水平分割
如果一个表中的数据量非常大,分割后可以减少需要读取的页数。通常在进行分割时往往要依据一定的分割规则,例如,根据地理位置将一个表按照地点的不同分割为几个表。
例如,假如下面的作者情况表的行数据量非常大:
在进行分割时,可以根据作者所在省份的不同分割为几个不同的表,查询时,也按照省份分别查询不同的表。
分割表会增加应用程序的复杂性(因为在查询时可能涉及大量的表名),因此,使用这种方法必须慎重考虑它对性能的影响程度。在一般情况下,仅当表中数据量非常大的情况下才考虑这种方法。
(2)垂直分割
当表中的某些列使用频率远远高于其它的列且每一行又非常宽的情况下可以考虑这种方法。
例如,对于下面的表:
其中作者编码前四位为作者编号,后三位为论文序号。
假设要经常访问作者的姓名和论文情况,而全文则很少访问,则可以进行垂直分割:
如果一个表中的较长的列并不被频繁访问,则将它们分割到另一个表中将极大地提高性能,如论文表1、全文表2所示。
4 小结
非规范化处理是建立在对应用的非常彻底的了解的基础上的,而且只应在性能问题确实提出这种要求的前提下进行。在进行非规范化处理时,应当注意可能存在的数据完整性问题。总之,文献数据库进行非规范化处理,存在以下优缺点:
因此,在决定是否进行非规范化处理时,必须仔细分析情报检索系统对数据访问的需求以及文献数据库性能的实际影响。在大多数情况下,良好的索引设计或其它一些方法可以使文献数据库的性能大为提高。如果确有进行非规范化的必要,则在进行非规范化处理时应当注意,无论使用哪种规范化技术,都必须注意保证数据的完整性,为此,可以采用下列措施:
·建立触发器,保证冗余、派生的以及重复的数据和基本数据保持一致;
·通过应用程序中的事务逻辑来保证非规范化数据在更新时保持一致;
·批命令,在适当的时间间隔运行批命令或存储过程来保证数据的完整性。