基于SQL SERVER的分布式数据库设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于SQL SERVER的分布式数据库设计与实现

刘竞,初文科

青岛农业大学信息科学与工程学院,山东青岛(266109)

E-mail:liuj@

摘要:提出了如何充分利用MS SQL Server 2000的数据库管理特性,采用链接服务器、分布式分区视图和存储过程构建分布式数据库,以及基于数据库复制技术实现混合式的数据分布。实验实现了分布式数据库的水平分片、垂直分片和混合式数据分布。

关键词:分布式数据库;分布式分区视图;链接服务器;存储过程

中图分类号: TP392

1.引言

随着网络与数字通信技术的飞速发展,应用的数据再也不是存储在一个单一的场地,而是可能分布在全球的任何位置。对这样由多个分散数据库组成的管理信息系统,如何以最小代价将其整合成分布式数据库系统也就成为了迫切需要解决的问题[1]。

MS SQL Server 2000分布式数据库功能[2]允许用户把多个不同场地的数据库当作一个完整的数据库看待,允许用户透明地查询和操作远程数据库实例的数据,并使应用程序看起来只有一个大型的集中式数据库,用户可以在任何一个场地执行全局应用,具有数据分布透明性和逻辑整体性等特点。

2.分布式数据库系统的设计

1.创建和使用数据库链接(链接服务器)

数据库链接是定义一个从某一数据库服务器到另一数据库服务器的单向通信路径指示器。可以使用企业管理器或者T-SQL代码来建立链接服务器。链接服务器可以是SQL Server 或者任何其他的OLE DB和ODBC数据源,只要相应的驱动程序支持,分布式查询就可以检索和修改相应数据源中的数据。使用创建好的链接服务器,对用户来说,数据分布就是透明的,用户就好像使用本地集中式数据库一样,同时使用链接服务器的查询代码具有更好的移植性,也更加易于维护。

2.采用分布式分区视图实现水平分片[3]

将表分区就是将表按照分区键划分为两个或两个以上更小的分段。分区键通常选择一个经常被用来选取特定范围的数据字段,这样分区的效率最高。通过创建分区视图合并所有分区表,实现对整个数据集的访问。

SQL Server支持两种类型的分区视图[2]:本地的和分布的。分布式分区视图,也称为联合数据库,将分区表分布在多个场地的服务器上。使用链接服务器和分布式分区视图方法可以构建以水平分片的分布式数据库系统。

3.采用存储过程实现垂直分片

SQL Server没有提供现成的技术实现垂直分片的分布式数据库系统,但可以使用链接服务器和存储过程相结合的方法,将用户提交的全局操作转变为对多个场地的垂直分片表的局部操作,使用存储过程可以保证分布式事务的ACID特性。

存储过程是存储在服务器上的预编译好的SQL语句集。使用存储过程将对多个场地的垂直分片表的操作放在一个分布式事务内,要么全部提交,要么全部回退,保证了分布式数据库系统数据的一致性。

4.采用数据库复制技术实现混合式数据分布[2,4]

分布式数据库系统必须以最小的代价保持各冗余副本的一致性,即对一个数据库的逻辑对象的修改,必须传播到该对象的所有副本,同时做相同的修改。SQL Server使用数据库复制技术来解决这一复杂问题。

SQL Server复制是按照出版业的运作模式来工作的,它包括3个代理——分发者、发布者和订阅者。本文采用事务复制保持各冗余副本的数据一致性。

3.使用SQL Server 2000构建分布式数据库

以学校计算机系(CS),外语系(FD),数理系(MP),教务处(JW)为例,具体构建水平和垂直分片的混合分布的分布式数据库系统。四个SQL Server数据库实例位于各个系处,前三个系各自保存本系的学生信息表,如计算机系info_student_cs,教务处保存三个系的学生信息副本。

1.创建数据库和表

(1)计算机系数据库dbcs,学生信息表info_student_cs,分区键sdept,分区键必须是主键的一部分。

create database dbcs

go

use dbcs

create table info_student_cs

(

sno nvarchar(10) not null,

sname nvarchar(40) not null,

sdept nvarchar(2) not null,

sex nvarchar(2) not null,

age int not null,

constraint pk_info_student_cs

primary key(sno,sdept),

constraint uq_info_student_cs_sno

unique(sno),

constraint chk_info_student_cs_sdept

check(sdept='CS')

)

(2)在外语系、数理系数据库实例上分别创建数据库dbfd,dbmp,学生信息表info_student_fd,info_student_mp,分区键仍是sdept,检查约束分别改为check(sdept='FD')和check(sdept='MP')。在教务处数据库实例上创建dbjw。

2.创建链接服务器

分别在四台服务器上建立双向的数据库链接,以创建计算机系到外语系的链接服务器(CS_FD)为例。

EXEC sp_addlinkedserver

@server='CS_FD',

@datasrc='tred',

@srvproduct='',

@provider='SQLOLEDB';

EXEC sp_addlinkedsrvlogin

@rmtsrvname='CS_FD',

@useself='false',

@locallogin='cupliuj\administrator',

@rmtuser='sa',

@rmtpassword='***';

3.采用分布式分区视图实现水平分片

分别在三个系服务器上创建分布式分区视图,以计算机系为例。

create view info_student

as

select * from info_student_cs

union all

select * from cs__student_fd

union all

select * from cs__student_mp;

到这里,整个水平分片的分布式数据库系统已经建立完毕。现在可以在三个系的任何位置,只要访问本地info_student分布式分区视图,就实现了所有分布式数据库的操作。此时,对数据库的全局操作和局部操作就如同操作本地集中式数据库一样。

①插入数据。若当前客户端连接在外语系服务器上,执行insert into info_student values('S006128','LIUJ','CS','F','20'),由于sdept=’CS’,所以系统会自动将这条记录插入到计算机系的学生信息表info_student_cs中。

②修改数据。若客户端连接在数理系服务器上,执行update info_student set sdept='FD' where sno='S006128',由于执行前sdept=’CS’,执行后sdept=’FD’,所以系统会自动将这条记录从计算机系移动到外语系的学生信息表info_student_fd中,实现了学生改专业、换院系的功能。

③删除数据。若客户端连接在计算机系服务器上,执行delete from info_student where sno=’S006128’,由于这条记录sdept=’FD’,所以系统会自动将这条记录从外语系服务器上删除。

4.采用存储过程实现垂直分片

设表info_student存储学校所有学生信息,进行垂直分片后生成两张表info_student1(sno,sname,sdept)保存在A服务器的数据库DB1上,info_student2(sno,sex,age)保存在B 服务器的数据库DB2上,在A与B上建立存储过程add_student,并相互建立数据库链接。下面仅以插入数据为例,介绍如何保持分布式事务的一致性。在A上建立存储过程add_student,执行

create proc add_student

(

@sno char(10),

@sname char(40),

@sdept char(2),

@sex char(2),

@age int

)

as

相关文档
最新文档