分布式数据库系统课程设计说明书_第1页
分布式数据库系统课程设计说明书_第2页
分布式数据库系统课程设计说明书_第3页
分布式数据库系统课程设计说明书_第4页
分布式数据库系统课程设计说明书_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、分布式数据库系统课程设计说明书题目:分布式旅行订票系统院 (系):计算机与控制学院专业:计算机应用技术学生姓名:何伟贤童学斌李明珍蒋美君学号 092031115/09211207 /092031118/0920311062010年 6月 10日分布式数据库课程设计说明1、课程设计分析1.1 项目目标: 用 java 组建一个分布式应用系统,它用来实施一个简单的旅行预定系统1.2 总体设计主要根据 分布式旅行预定系统中所表述的内容,使用 java 语言建立了一个建议的分布式的旅行预订系统,系统采用 C-S 结构,主要用到了 java 语言中的 RMI(远程方法调用 )实现不同的计算机之间通信,

2、以及采用包中的方法控制程序的并发性。用户1用户2用户3协调器包装器包装器包装器数据源 1数据源2数据源 3总体设计结构图1.3 功能描述系统的功能是用户通过在客户端的操作访问服务器资源, 并进行资源的增加查看以及修改(预订)。数据库采用分布式的结构将机票信息,宾馆信息,出租车信息以及顾客信息分布在不同的服务器上,并通过一个主Server(协调者)进行总体上的控制。系统分为主服务器 (Server),航班服务器 (FlightServer),宾馆服务器 (HotelServer), 出租车服务器(CarServer),用户服务器 (CustomerServer) 以及预订服务器 (ResverS

3、erver)。图 1 主 server 开启预定线程图 2 ReserveThread 类中实现服务器分布图 3 carServer 类的 main 函数图 2 是各各站点在主 server 里登记 IP 和端口,图 1 是主 server 启动预定线程。 图 3 是 carServer开启线程的代码段。 在启动预定线程时, 先执行代码 3,即要先运行 carServer、flightServer 、 hotelServer 、 customerServer 、reseverServer ,然后再运行主 server.图 4 客户端请求和 server 建立 TCP连接保持 server 启动

4、时,客户端请求和server 建立 TCP连接,如上图4.每个服务器按照总体的设计结构图,分别实现数据的存储、数据的更新、数据的插入、预定对应的数据。同时,每个服务器实现本地的事务管理、工作流管理、并发控制。主服务器实现把一个事物划分成多个子事物, 对各个站点处理子事物结果进行裁决, 工作流的控制,并发控制,实现分布式的事物处理。原子性 :客户端向主服务器端发出预订申请时,主服务器分别从每个服务器取得数据并进行交互进行试预订,如果每个服务器返回成功信息,则再由Server 统一进行Commit 操作,否则如果有至少一个服务器返回预订失败的信心,则由Server 统一将每个服务器上试预订的信息

5、rollback 。并发性: 由 java 的 Lock 包进行控制,对每个操作服务器数据的线程进行并发控制,对每一个读操作进行readLock,可以与其他读线程同步进行,但是在释放读锁之前写操作无法执行。在对数据的每一个写操作前进行writeLock, 同时等待其他线程释放读锁。其他写操作必须等到该线程释放写锁之后才能进行。一致性: 由于事物的并发、通信传输故障、 站点故障会导致数据的不一致性。针对事物并发,可以对数据资源加读写锁。网络通信问题本系统中暂未考虑。站点故障通过读取操作日志觉得 redo 或 undo 、commit 或 rollback 。持久性: 经过 commit 或者 r

6、ollback 之后的数据存放在每一个Server 上,可以将其入数据库或者 XML 文件,本系统采用slq2005,把每个站点上的数据、操作日志存贮到sql 上。以备实现故障恢复。1.4 数据表FLIGHTS(String flightNum, int price, int numSeats, int numAvail)HOTELS(String location, int price, int numRooms, int numAvail)CARS(String location, int price, int numCars, int numAvail)CUSTOMERS(String

7、custName)RESERVATIONS(String custName, int resvType, String resvKey)2、概要设计2.1 分布式事务分布式事务管理:1)一个事务可能要访问分布存储在多个站点上的数据,该事务将被划分成多个子事务,每个子事务负责对一个数据存储站点进行访问2)协调在各站点子事务工作以达到全局任务的原子性。子事务不仅要与相应站点上并发执行的其他本地事务相互协调,还要与分布式系统中全局事务所产生的其他子事务相互协调publicbooleanreserveItinerary(String custName, String flightNum,String

8、location,booleanneedCar,booleanneedRoom)RemoteException,RuntimeException/主 server启动预定事物stName, flightNum,location, needCar, needRoom)/启动预定的线程if(flightFlag && carFlag && hotelFlag && reserFlag) .throws线程执行 run() ,在 run() 里面实现了事物的划分、各站点对子事物并发执行和本地事物协调以及主 server 的事物的裁决。本地事物管理:保证

9、本地事务的特性,把用于分布式事务执行和恢复的信息记入日志,接收并听从本站点上DTM 代理发来的LOG原语,记入日志并执行。本地需要保存2 份数据,一个是data,用于保存原始初始化和commit 、rollback 处理后的数据。一个是back,用于保存正在被处理的数据。当commit 、 roolback 后,只需要用back 来修改 data.分布式事务管理器DTM命令命令命令回答回答回答局部事务局部事务局部事务管理器管理器管理器局部 LTM之间所需信息不能直 接传送数据库数据库数据库分布式事务结构图2.2 分布事务处理协议-集中式2PC 协议由协调者质问所有的参与者是否准备好提交事务。如

10、果有一个参与者投了 “终止 ”票或在规定时间内未对协调者作出响应,则协调者将命令所有的参与者终止事务。如果所有的参与者投了 “提交 ”票,则协调者决策所有的参与者提交事务。if(flightFlag && carFlag && hotelFlag && reserFlag) .*flag由*server的 fix* 处理结果, 在投票表决阶段,协调者作出全局裁决,然后命令传输给参与者,参与者做出相应的处理2.3 2PC 恢复机制故障所采用的基本做法是:根据协议的执行进程,考虑可能出现的各种故障,提出预防措施并作故障处理。1)站点故障参与者在Log

11、 中记录 Ready 前发生故障 ,可能原因是子事物失败,因超时导致协调者发出 Abort 命令。当发生故障的参与者恢复时,重启动过程简单撤销该事务即可,不需过问其他站点的情况。 (已处理)参与者在Log 中记录 Ready 后发生故障 ,可能是本地已经commit 了或者 rollback 了,这时候需要向协调者查询:若是Commit ,则 redo;若是Abort ,则 undo 。从而对该结点上的子事务作出正确处理。(已处理)2.4 分布式事务加锁并发事务的冲突,丢失更新,破坏完整性约束,不一致读,所以要考虑分布式加锁,严格按照分布式加锁准则。1)采用主站点加锁法:选一站点定义为 “主站

12、点 ”,负责系统全部加锁管理。 所有站点都向这个主站点提出加锁请求,然后由主站点去处理加锁事宜, 读锁一个, 写锁全部, 更新数据时必须保证所有站点上该数据的副本同样更改,更新结束才能释放X 锁。privatefinalReentrantReadWriteLockrwl= new ReentrantReadWriteLock();privatefinalLock r = rwl.readLock();privatefinalLock w = rwl.writeLock();2)加锁点:在 server 的线程 reseverThead 类在 run() 里对所需要的数据资源加写锁,采用一次性资

13、源分配的方法, 所以才预定之前, 需要查询数据资源是否可用。 如果其他事物需要访问被锁住的数据,必须等待锁释放。 在各资源站点的fix 函数中加入写锁。 如果其他事物需要访问被锁住的数据,必须等待锁释放。 在各资源在commit ()处理中,要把执行data=back .get(xid),需要加写锁。在查询数据的时候,需要读数据。插入数据和预定commit()操作要加锁。在插入数据后,可能会执行commit(),这样使得新增饿数据被覆盖了。3)预防死锁:一次加锁法,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。3. 操作界面3.1 两个用户同时订一张票两个客户同时订一张票的时候, 在订票成功的情况下, 服务器将显示是哪个客户订了什么票,而客户端也会显示操作成功。如下图所示:3.2 预定和插入在一个客户预定成功, 而另一个站点在插入一个航班的情况下, 服务器将增加一个航班以及一个客户预定的情况。如下图所示:3.3 数据恢复重启后 :

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论