分布式数据库系统课程设计说明书111049.docx
- 文档编号:1541172
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:13
- 大小:471.07KB
分布式数据库系统课程设计说明书111049.docx
《分布式数据库系统课程设计说明书111049.docx》由会员分享,可在线阅读,更多相关《分布式数据库系统课程设计说明书111049.docx(13页珍藏版)》请在冰豆网上搜索。
分布式数据库系统课程设计说明书111049
GUILINUNIVERSITYOFELECTRONICTECHNOLOGY
分布式数据库系统课程设
计说明书
题目分布式旅行订票系统
院(系):
计算机与控制学院
专业:
计算机应用技术
学生姓名:
何伟贤童学斌李明珍蒋美君
学号092031115/09211207/092031118/092031106
2010年6月10日
分布式数据库课程设计说明
1课程设计分析
1.1项目目标:
用java组建一个分布式应用系统,它用来实施一个简单的旅行预定系统1.2总体设计
主要根据《分布式旅行预定系统》中所表述的内容,使用java语言建立了一
个建议的分布式的旅行预订系统,系统采用C-S结构,主要用到了java语言中的RMI(远程
方法调用)实现不同的计算机之间通信,以及采用java.util.concurrent包中的方法控制程序的
并发性。
总体设计结构图
1.3功能描述
系统的功能是用户通过在客户端的操作访问服务器资源,并进行资源的增加查看以及修
改(预订)。
数据库采用分布式的结构将机票信息,宾馆信息,出租车信息以及顾客信息分布在不同的服务器上,并通过一个主Server(协调者)进行总体上的控制。
系统分为主服务器(Server),航班服务器(Flightserver),宾馆服务器(HotelServer),出租车服务器(CarServer)用户服务器(CustomerServer)以及预订服务器(ResverServer)。
ExecutorServicerhreadPool^Executors.上亡deiE即凸uu:
Futurefuture-threadPoo1,submit(
needRoom));
newReserveThread(xid,custFTaitie,flightNuiti,locacion,needCar,
图1主server开启预定线程
Registryregistry-LocateRegistry*^etRe^lstry(,r127.□・□*,1口口口2);
csirStub=(CarReiriQts)registry,lookup(T,car3erver,r);
registry=LocateRegistry.^etJEe^cistry(,r127.□►D*lf,,100DO);
flightStuto=(FlightRemote)registry,lookup(fF±1ightServer^);registry=Locat&Registry*getReg^ist_ry(fl127,0.0.I"f10001);hoteLStub=[HotelRemote)registry,lookup(F,hotelServerF,);registry=LocateRegistry.g-etJSegcist上『("12*7・口.0-1."尸10004);
reserStub=(ReserReitiote)registry^lookup("reserServer"^;
图2ReserveThread类中实现服务器分布
publicstaticvoidmain(String[]args){
try{
CarServercarServer=newCarServer(;
CarRemotestub=(CarReitioce)UnicastRemoteObject»e^portObject(carServier0);
Registryregistry=LocateRegistry.ore 图3carServer类的main函数 图2是各各站点在主server里登记IP和端口,图1是主server启动预定线程。 图3是carServer开启线程的代码段。 在启动预定线程时,先执行代码3,即要先运行carServer、flightserver、hotelServer、customerServer、reseverServer,然后再运行主server. pubXiclogin() ( Ha3hSet try { registry=LocateRegistry,gefReglstry(fF127,0-D.工F\9999);stub-(ServerRennot亡)zr亡發罗・J.ookui)("芳亡芝螢亡; set-=stub.getF1ightMums(; 图4客户端请求和server建立TCP连接保持server启动时,客户端请求和server建立TCP连接,如上图4. 每个服务器按照总体的设计结构图,分别实现数据的存储、数据的更新、数据的插入、预定对应的数据。 同时,每个服务器实现本地的事务管理、工作流管理、并发控制。 主服务器实现把一个事物划分成多个子事物,对各个站点处理子事物结果进行裁决,工作流 的控制,并发控制,实现分布式的事物处理。 原子性: 客户端向主服务器端发出预订申请时,主服务器分别从每个服务器取得数据并进行 交互进行试预订,如果每个服务器返回成功信息,则再由Server统一进行Commit操作,否 则如果有至少一个服务器返回预订失败的信心,则由Server统一将每个服务器上试预订的 信息rollback。 并发性: 由java的Lock包进行控制,对每个操作服务器数据的线程进行并发控制,对每一个读操作进行readLock,可以与其他读线程同步进行,但是在释放读锁之前写操作无法执行。 在对数据的每一个写操作前进行writeLock,同时等待其他线程释放读锁。 其他写操作必须等 到该线程释放写锁之后才能进行。 一致性: 由于事物的并发、通信传输故障、站点故障会导致数据的不一致性。 针对事物并发,可以对数据资源加读写锁。 网络通信问题本系统中暂未考虑。 站点故障通过读取操作日志觉 得redo或undo、commit或rollback。 持久性: 经过commit或者rollback之后的数据存放在每一个Server上,可以将其入数据库 或者XML文件,本系统采用slq2005,把每个站点上的数据、操作日志存贮到sql上。 以备实现故障恢复。 1.4数据表 FLIGHTS(StringflightNum,intprice,intnumSeats,intnumAvail)HOTELS(Stringlocation,intprice,intnumRooms,intnumAvail)CARS(Stringlocation,intprice,intnumCars,intnumAvail)CUSTOMERS(StringcustName) RESERVATIONS(StringcustName,intresvType,StringresvKey) 2、概要设计 2.1分布式事务 分布式事务管理: 1)一个事务可能要访问分布存储在多个站点上的数据,该事务将被划分成多个子事务,每个子事务负责对一个数据存储站点进行访问 2)协调在各站点子事务工作以达到全局任务的原子性。 子事务不仅要与相应站点上并发执行的其他本地事务相互协调,还要与分布式系统中全局事务所产生的其他子事务相互协调 publicbooleanreserveItinerary(StringcustName,StringflightNum, Stringlocation,booleanneedCar,booleanneedRoom)throws RemoteException,RuntimeException〃主server启动预定事物 stName,flightNum,location,needCar,needRoom)//启动预定的线程 if(flightFlag&&carFlag&&hotelFlag&&reserFlag){••: ..} 线程执行run(),在run()里面实现了事物的划分、各站点对子事物并发执行和本地事物协调以及主server的事物的裁决。 本地事物管理: 保证本地事务的特性,把用于分布式事务执行和恢复的信息记入日志,接收 并听从本站点上DTM代理发来的LOG原语,记入日志并执行。 本地需要保存2份数据,一个是data,用于保存原始初始化和commit>rollback处理后的数据。 一个是back,用于保存正在被处理的数据。 当commit、roolback后,只需要用back来 修改data: 分布式事务管理器DTM 2.2分布事务处理协议-集中式2PC协议 由协调者质问所有的参与者是否准备好提交事务。 如果有一个参与者投了终止”票或在 规定时间内未对协调者作出响应,则协调者将命令所有的参与者终止事务。 如果所有的参与者投了提交”票,则协调者决策所有的参与者提交事务。 if(flightFlag&&carFlag&&hotelFlag&&reserFlag){…...} *flag由*server的fix*处理结果,在投票表决阶段,协调者作出全局裁决,然后命令传输 给参与者,参与者做出相应的处理 2.32PC恢复机制 故障所采用的基本做法是: 根据协议的执行进程,考虑可能出现的各种故障,提出预防 措施并作故障处理。 1)站点故障 1参与者在Log中记录Ready前发生故障,可能原因是子事物失败,因超时导致协调者发 出Abort命令。 当发生故障的参与者恢复时,重启动过程简单撤销该事务即可,不需过问其他站点的情况。 (已处理) 2参与者在Log中记录Ready后发生故障,可能是本地已经commit了或者rollback了, 这时候需要向协调者查询: 若是Commit,则redo;若是Abort,则undo。 从而对该结点上的子事务作出正确处理。 (已处理) 2.4分布式事务加锁 并发事务的冲突,丢失更新,破坏完整性约束,不一致读,所以要考虑分布式加锁,严格按照分布式加锁准则。 1)采用主站点加锁法: 选一站点定义为主站点”负责系统全部加锁管理。 所有站点都向这个主站点提出加锁请求,然后由主站点去处理加锁事宜,读锁一个,写锁全部,更新数据时必须保证所有站点上该数 据的副本同样更改,更新结束才能释放X锁。 privatefinalReentrantReadWriteLockrwl=newReentrantReadWriteLock(); privatefinalLockr=rwl.readLock(); privatefinalLockw=rwl.writeLock(); 2)加锁点: 1在server的线程reseverThead类在run()里对所需要的数据资源加写锁,采用一次性资源 分配的方法,所以才预定之前,需要查询数据资源是否可用。 如果其他事物需要访问被锁住 的数据,必须等待锁释放。 2在各资源站点的fix函数中加入写锁。 如果其他事物需要访问被锁住的数据,必须等待锁 释放。 3在各资源在comm
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分布式 数据库 系统 课程设计 说明书 111049