首页 理论教育分布式数据库技术-数据定位

分布式数据库技术-数据定位

【摘要】:要在并行数据库系统中查找数据,首先要确定数据由哪些处理器管理,放在哪里,这就是数据定位。因为希望在数据所在处执行程序,所以数据定位就是判断系统性能好坏的一个重要因素。有round-robin分割、哈希分割和归类分割三种基本分割方法,如图14.14所示。图14.14不同的分割模式round-robin分割是最简单的一种分割方法,它能保证均匀分配。图14.15Teradata DBC的数据分布由图14.15可知,Teradata DBC采用的策略是将数据均匀地分布到其存储设备中。

要在并行数据库系统中查找数据,首先要确定数据由哪些处理器管理,放在哪里,这就是数据定位。并行数据库系统中的数据定位(data placement)和分布式数据库系统中的数据分片相似。显然数据分片也是可以增加并行性的。下面会使用分割(partition)这个词来代替分片,以示区别(有些文献中使用declustering这个词汇)。

与分布式数据库方法相比,并行数据库中需要指出两个重要区别:首先,不存在将本地运算最大化的问题;其次,负载均衡在大量处理器情况下也很难实现。现在的问题是如何避免竞争资源(即有的节点忙不过来,有的节点闲着没事干)。因为希望在数据所在处执行程序,所以数据定位就是判断系统性能好坏的一个重要因素。

恰当的数据定位必须能让系统性能最大化,这可以用要做的工作总量和各个查询的响应时间的综合因素来量度。

数据的全分割也是一种替代解决方案,即把关系分片后分配到各个节点中去。大多数系统使用全分割(full partitioning),如Teradata公司的DBC/1012和Tandem公司的NonStop SQL等。

有round-robin分割、哈希分割和归类分割三种基本分割方法,如图14.14所示。

图14.14 不同的分割模式

round-robin分割是最简单的一种分割方法,它能保证均匀分配。令系统有n个分割,第i个元组的分配是按照i mod n来实施的。这个策略使得对一个关系的顺序存取可并行处理。但是在要求按照一个谓词随机存取一个元组时,就要访问整个关系。

哈希分割(hash partitioning)是对某个属性应用哈希函数,产生分割号。按这个分割号将数据分配到相应的节点上,这可以方便随机查找。(www.chuimin.cn)

归类分割(range partitioning)是将元组按其值的区间来分配。例如,按字母序区间来分配。

不管怎么分割,为了提高负载均衡,需要定期进行数据重组。这种重组对编译好的程序来说应当是透明的。这些程序无需再由于数据重组而重新编译。为了解决这个问题,提出了在每个节点上建立一个全局索引机制的方法。全局索引指示出关系在节点上的定位情况。这个全局索引可以构造成两级机制,一级记录关系的主聚合(major clustering),另一级是关于属性的子聚合(minor clustering)。索引结构既可以使用哈希函数也可以使用B树。

数据定位中涉及的一个严重问题是如何处理数据分布不均匀的问题,这是由于数据初次分配(此时是均匀的)后数据的多次删(除)、(添)加导致的。它会导致分割不一致,伤害负载均衡。归类分割时问题更严重。解决方法是将大的分割继续分割以达到基本均衡。分离逻辑节点和物理节点也是一个解决办法,这样一个逻辑节点可以对应于几个物理节点。

为了达到高可用性,采取数据复制也是一个办法。解决问题的一个简单办法是为同一数据提供两个副本,一个为原本,另一个为副本,分别放在不同的节点上。这其实是一种镜像磁盘结构。不过,当一个节点发生故障时,有副本的那个节点的负载就要加倍,负载均衡就受到损害。为了解决这个问题,学术界为并行数据库系统提出了一些高可用的数据复制策略。一个很有趣的解决方案是Teradata公司采用的叠加分割技术,即分割副本放到几个节点上。一个节点有故障时,它的负载就分摊给几个有副本的节点。

我们再讨论Teradata DBC的数据分布示例。Teradata DBC的数据分布如图14.15所示。由图可知,假设有一批数据(块)分别表示为6,2,5,12,8,11,3,1,9,10,4,7,…,有四个AMP分别各由一个DSU存放数据,则这些数据会均匀分配给这四个DSU。例如,从左往右,第一个DSU存放12,1,7;第二个DSU存放5,3,4;第三个DSU存放2,11,10;第四个DSU存放6,8,9;等等。

图14.15 Teradata DBC的数据分布

由图14.15可知,Teradata DBC采用的策略是将数据均匀地分布到其存储设备中。round-robin是一种典型的算法