资源描述:
《分布式数据库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、分布式数据库一、实验目的:(1)通过实验加深对课程的理论部分的理解,培养学生理论联系实际的能力。(2)在实验系统的设计与实现上给学生留有较大的自由发挥空间,鼓励与培养学生的创新能力。(3)通过合作完成一个实验系统,培养学生的团队精神与协同工作的习惯。二、实验内容:(1)第一部分:建表及数据量要求Student(SIDchar(4)primarykey,SNamechar(20)notnull,Classchar(20)notnull);1000Course(CIDchar(3)primarykey,CNamechar(20)notnu
2、ll);30Teacher(TIDchar(4)primarykey,TNamechar(20)notnull,CIDchar(3),Classchar(20)notnull);30Exam(SIDchar(4)primarykey,CIDchar(3)primarykey,Markdouble);2000设一个教师只上一门课,一门课可由多个教师上。(2)第二部分:数据分布要求:垂直和水平划分Student表:根据某种规则,将Student表水平分片:S1,S2,S3,分别存放在三个不同的站点SITE1,SITE2,SITE3。Tea
3、cher表:根据某种规则,将Teacher表垂直分片:T1,T2,分别存放在两个不同的站点SITE1,SITE2。Exam表:根据某种规则,将Exam表水平分片:E1,E2,E3,分别存放在三个不同的站点SITE1,SITE2,SITE3。Course表:不划分,分配到site1(3)第三部分:数据查询、插入、删除和更新要求在任意站点可实现以上功能。(4)第四部分:系统性能讨论讨论你所采用DBMS的分布式特性,以及本系统的安全性、可靠性、数据一致性措施和效果。三、设计基本思想1.拟采用MSSQLServer数据库实现本系统,数据库的分
4、片的透明性在数据库的层次上实现,建立一个全局视图,尽量避免使用各个表的分片。2.在SQLServer内部水平分片透明主要利用分区视图来实现。分区视图在一个或多个服务器间水平连接一组成员表中的分区数据,使数据看起来就象来自一个表。在实现分区视图之前,必须先水平分区表。原始表被分成若干个较小的成员表。每个成员表包含与原始表相同数量的列,并且每一列具有与原始表中的相应列同样的特性(如数据类型、大小、排序规则)。如果正在创建分布式分区视图,则每个成员表分别位于不同的成员服务器上。3.垂直分片的透明性的实现:可以为这些表建立视图,为了保证数据的
5、可更新,再针对此视图建立相关的触发器。3.在SQLServer内部为了远程服务器的访问可以通过sp_addlinkedserver建立连接服务器,然后用sp_addlinkedsrvlogin建立此服务器的登录。四、实现步骤1.首先安装三个SQLServer服务器,分别命名为site1,site2,site3,在其上面建立数据库对应为db1,db2,db3。2.在site1的db1数据库中建立如下个表:createtableS1(SIDchar(4)notnull,SNamechar(20)notnull,Classroomchar(
6、20)notnullCHECK(Classroom='计0201'),primarykey(SID,Classroom))createtableCourse(CIDchar(3)notnull,CNamechar(20)notnull,Primarykey(CID))createtableT1(TIDchar(4)notnull,TNamechar(20)notnull,primarykey(TID))createtableE1(SIDchar(4)notnull,CIDchar(3)notnull,MarkfloatnotnullC
7、HECK(Mark<60),primarykey(SID,CID,Mark))其中S1为Student的水平分片1,其中存放‘计0201’的学生,为了保证使用分区视图时的数据可以更新,将Classroom分片的字段设置为主键。T1为Teacher的垂直分片1,E1位Exam的水平分片1,其中存<60的成绩。在site2的db2数据库中建立如下个表:createtableS2(SIDchar(4)notnull,SNamechar(20)notnull,Classroomchar(20)notnullCHECK(Classroom='计
8、0202'),primarykey(SID,Classroom))createtableT2(TIDchar(4)notnull,CIDchar(3)notnull,Classroomchar(20)notnull,pr