首页 理论教育分布式数据库技术更新操作分析

分布式数据库技术更新操作分析

【摘要】:显然,更新操作比只读应用要复杂得多。Student1Student2一旦实施这个操作,这个学生归属系的系别编号就会修改为14,关于学号20080833的记录会迁移到另外两个数据片Student3和Student4中。由上可以发现,由于分布透明性的要求,使得普通的用户查询在实施时变得很复杂,而且会有多种实施方式,因此,对查询优化提出了新的需求。

显然,更新操作比只读应用要复杂得多。

下面来看一个数据分片模式:

Student1sno,dno,class,credit,entry_dateσdno≤10 Student

Student2sno,name,birthday,birthplace,sexσdno>10 Student

Student3sno,name,credit,entry_dateσdno≤10 Student

Student4sno,name,birthday,birthplace,sex,dno,classσdno>10 Student

由上可见,首先将学生关系(Student)水平分片,按系别编号分成两部分(dno≤10和dno>10);然后分别将这两部分垂直分片。这样就构成了四个子关系:Student1、Student2、Student3和Student4

所以,Student1和Student2的学生都属于系别编号在10(包括10)以内的。Student3和Student4的学生都属于系别编号在10以上。

考虑一个操作:把学号为20080833的学生转学到系别编号为14(如数学)的系。

假设这个学生原来在系别编号为9的系里(如物理系)。这样,这个学生的信息记录在Student1和Student2内,因为其系别编号9小于10。详情如下所示。

Student1

Student2

一旦实施这个操作,这个学生归属系的系别编号就会修改为14,关于学号20080833的记录会迁移到另外两个数据片Student3和Student4中。

Student3

Student4

值得注意的是,虽然水平分片将一个学生关系分成对称的两部分,但这两部分的垂直分片方式有差异,因此,一次更新引起的数据迁移相当复杂。

这个应用的各层次形态如下。

1.分片透明性(level 1)

第一层面,这个更新应用的形态如下所示:

Update Student

set dno=14

where sno=20080833

2.分配透明性(level 2)

第二层面,可以将更新应用看成是将老的数据对象删除,再添加新的数据对象。这个更新要施加到不同的数据片上,也就是要删除的对象和要插入的对象不在同一数据片上。因此,形态如下所示:

●Select class,credit,entry_date into $class,$credit,$entry_date from Student1 where sno=20080833;

●Select name,birthday,birthplace,sex into$name,$birthday,$birthplace,$sex from Student2(www.chuimin.cn)

where sno=20080833;

●Insert into Student3(20080833,$credit,$entry_date);

●Insert into Student4(20080833,$name,$birthday,$birthplace,$sex,14,$class);

●Delete Student1 where sno=20080833;

●Delete Student2 where sno=20080833。

3.本地映射透明性(level 3)

这里假定数据的分配如下。

●Student1在节点1和节点5;

●Student2在节点2和节点6;

●Student3在节点3和节点7;

●Student4在节点4和节点8。

当映射到本地时,这个查询的形态就演变成如下形态:

●Select class,credit,entry_date into$class,$credit,$entry_date from Student1@SITE1 where sno=20080833;

●Select name,birthday,birthplace,sex into$name,$birthday,$birthplace,$sex from Student2@SITE2

where sno=20080833;

●Insert into Student3@SITE3:(20080833,$credit,$entry_date);

●Insert into Student3@SITE7:(20080833,$credit,$entry_date);

●Insert into Student4@SITE4:(20080833,$name,$birthday,$birthplace,$sex,14,$class);

●Insert into Student4@SITE8:(20080833,$name,$birthday,$birthplace,$sex,14,$class);

●Delete Student1@SITE1 where sno=20080833;

●Delete Student1@SITE5 where sno=20080833;

●Delete Student2@SITE2 where sno=20080833;

●Delete Student2@SITE6 where sno=20080833。

由上可以发现,由于分布透明性的要求,使得普通的用户查询在实施时变得很复杂,而且会有多种实施方式,因此,对查询优化提出了新的需求。