分布式数据库系统的优化研究
2018-10-10石永超任利峰
石永超,任利峰
1 分布式数据库系统的定义
分布式数据库系统有两种,一种是一个逻辑上完整而物理上分散的多个数据库的集群,通过网络将多台数据库进行连接,依靠专业的数据库管理软件进行管理的分布式系统。这种系统只适用于一个用途比较单一的,不太大的单位或部门;另一种是在物理上和逻辑上都是分布的,这种系统可容纳多个不同用途、差异较大的数据库,适宜较大的数据库系统的集成。物理上分布指的是各个数据库可以单独存在于不同的地理位置,通过网络将各个数据库连接起来; 逻辑上完整指的是各个数据库通过网络连接起来后,可以调整配置,使用统一的数据库管理软件进行整体的操纵,同时各个单独的数据库也具有自制能力。
2 分布式数据库查询优化技术的现状
分布式数据库查询优化通常可以从两个方面考虑: 一个是减少响应时间,另一个是减少网络数据的传输量。从传统的分布式数据库系统来看,计算机内部处理数据的速度和网络传输的速度有和很大的悬殊。但是大量的数据传输会使网络承受的压力太大,这个就是目前分布式数据库查询优化所要面临的主要问题,所以分布式数据库查询优化目标的一个方面就是减少网络数据的传递量。 另一方面,数据库之间的数据传输的速度是不一样的,单独的一个数据库内部查询数据的速度也是不一样。同时,单个数据库查询的时间也不是确定的,这就会影响整体的查询效率。在这种情况下,不应该将数据的传输数量作为查询数据质量的标准,应该更多的去研究每一条请求的响应时间。 在一些特殊情况下,我们也得同时考虑响应时间和传输速度。 这就需要设计的算法去权衡这两点。 虽然分布式数据库技术如此复杂,算法设计需要考虑的因素很多,但是并没有能停止人们对他探索的脚步, 也正是因为他的复杂性和多样性才使这种技术不断地被修改创新,这种灵活性也决定它会被广泛应用。基于分布式架构所具有的优点和可靠性、灵活性、可用性,吸引着越来也多的人对它进行不断的探索,使之成为如此热门的技术。 许多研究所、大学的专家学者经过不懈努力,使这种技术越来越成熟。
3 分布式数据库查询优化的技术方案
研究数据库系统的一个方面就是要向用户尽可能多的封装数据库的操作,使数据库系统更具有通用性[1]。另一方面,分布式数据库系统还得向用户隐藏系统内部的一些细节,使得系统用起来更加安全,方便。关系型数据库可以为用户集中的提供一个数据接口,所有的数据都通过这个接口传送。使用SQL语句进行数据查询时,只需简单的描述所要查询的数据,无需知道系统内部如何获得数据的。当用户发来请求时,分布式系统会先检查访问的数据库是否存在于本地,如果存在则运行命令;如果没有存在,将请求广播给其他数据库,根据查询信息选择一个最优的查询节点(单独的数据库)进行查询,即选择一个有查询信息所需的数据的数据库进行查询,并且保证查询所需资源最少。然后将查询命令按地址发送到该数据库上,返回该数据库的IP地址,客户端接受到返回信息,马上与该数据库建立连接。当数据库内部查询结束后,将查询的信息发回客户端。如图1所示。但是通过这种方式进行信息的更改与查询时,需要使用SQL语句,所以更好的查询算法也正在发展和讨论。我们所说的查询优化,就是要保证在查询结果准确的前提下,最大程度的减少网络数据传递量,最快的查询出结果。
图1 分布式数据库系统数据查询
4 分布式查询优化算法的研究
分布式查询就是将一个分布式数据库上的整体查询转换成可以被单个数据库节点识别的查询。转换之后要使得整体的数据库系统和单独的数据库都可以识别,并通过代数运算优化这个过程[2]。全局查询优化是通过优化算法来操作数据库间的数据移动顺序从而形成的一个优化方案, 主要是决策选择操作的顺序。选择连接顺序是分布式数据库优化的一个重要的问题,但是由于数据冗余的特点,传统的查询会关联到多个节点,十分浪费资源。在传统数据库的发展过程中,虽然已经不断优化这个问题,但是还没得到很好的解决。 对于多表查询这个问题,必须很好地考虑如何搜索,才能知道近似最优解。
4.1 粒子群优化算法(pso)
粒子群优化算法是一种全局随机优化算法。 与一般算法不同的是,粒子群优化算法是将一个个数据库抽象为粒子,从而进行整体的排列,而不是传统的单点的操作。 “学习”和“记忆”是粒子自身所具有的能力,基于这个特性,可以通过粒子间的学习帮助,使整个粒子群不断搜索最优的区域,从而找到最优解。 通过这种手段,可以使数据库找到最优算法或者近似最优的算法,从以往的研究来看,粒子群优化算法能很好地解决一些问题。
4.2 分片复制优化算法
一个良好的分布式数据库系统的设计,一般包括一些关联: 整个分布式系统可以被分成多少个分片; 这些分片里有多少分片的副本; 如何确定这些分片在哪个站点。 这些问题使数据库设计变得复杂,甚至还要分析每一个单独的站点,这也是一个问题。 为了简化以上的问题,我们找到一个接近最优解的算法,分片复制算法。 此算法的核心思想是: 先将参加查询的关系进行分片化,然后在分布式系统中选择一组站点,将分片放到这个站点上,每个单独的站点都可以与其他站点进行连接,最后再将查询的结果做并集,即得到最优解。
4.3 Partition 算法
在处理多表关系连接的问题时, Partition算法可以抽取两个或者多个关系共有的属性,然后进行片段的划分,这样处理后可以进行并集运算,从而提高查询效率。基于分布式数据库系统独有的特征,这种查询方式可以在多个数据库同时操作,从而提高数据查询的速度[3]。 但是对于大量数据的处理以及对要求复杂的查询任务来说,这种查询方式还不是最好的。因此,在下面我们将结合查询图划分改进原有的Partition算法。在传统的Partition算法中,人们通常只用到其中一种的划分方案,仅对一种方案进行研究,而忽略其他的划分方案。就此问题,我们通过查询图划分的思想,将一个完整的查询图划分成多个子图,这样再通过 Partition算法将这些子图连接起来,就可以大大解决数据冗余的问题。为了方便,我们为改进的算法进行了一个构思: 每一个查询子图对应分布式系统的一个站点,那么改进的算法就有一下几步:
划分查询图:借助查询图划分的思想,对整体进行划分,得到多个子图。
Partition算法操作:每一个子图都进行Partition算法运算,再将每个子图上所有节点的结果进行并集运算,就可得到结果。但经过Partition算法运算后,每个子图的节点数不会有任何变化。
循环:循环执行(1)(2)步的操作,直到将所有的子图合并为一个图,在将此图上所有结果取并集就可得到查询结果。
5 总 结
通过以上对分布式数据库系统的优化,我们解决了一部分分布式系统查询的问题。可以根据不同的需求,选择不同的方案进行处理,从而提高数据的检索速度,满足当今对数据查询效率的需求,提升用户体验。