分布式数据库系统课程设计说明书

上传人:缘*** 文档编号:252352428 上传时间:2022-02-10 格式:DOCX 页数:18 大小:625.74KB
返回 下载 相关 举报
分布式数据库系统课程设计说明书_第1页
第1页 / 共18页
分布式数据库系统课程设计说明书_第2页
第2页 / 共18页
分布式数据库系统课程设计说明书_第3页
第3页 / 共18页
分布式数据库系统课程设计说明书_第4页
第4页 / 共18页
分布式数据库系统课程设计说明书_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《分布式数据库系统课程设计说明书》由会员分享,可在线阅读,更多相关《分布式数据库系统课程设计说明书(18页珍藏版)》请在金锄头文库上搜索。

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

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

3、&E2白巴必上(?上():Futurefuture-threadPool,submit(newReserveThread(xld.custMame,fllglitMujn.locaticm,2ieedCar,ne&dR&om);图1主server开启预定线程Registryregistry+127.0.0.lf10002);弓耳二*匚心=(CacKeruQte)xeigxry.lockup(,FcarServeu,F);registry=LDc&teRegiarry.retJ?cficzstxy(,r127.0.0.lr10000);flightStuto=(FlightRemotejreQi

4、strv.Icokxip(tTtlightServerff);registry=LQcateflegz3.3t.ry.3fetJiegist_ty(*r12*?.0.0.1M1CD01);hotelSrub=(HoteIREmore)匚亡gij七匚y,ImcilmphciCRIBerv已匚J;registry=LocatsRegisrrygetRgi.stry(,r1270.lr,10004);r5serStuls=(Re?srRewflte)registry,leaJcup(35rServerrr);图2ReserveThread类中实现服务器分布pultllrstaticvoidmain(

5、Stringargs)trydCerServercm工工yu匚=事evCarSecvcc();CarFemetesfub*(CarRemote)111110!且31:1e加口匚以口13邑仁匚,色乂口口上1匕口灯_18已t1白刍中ee.0)Registryreisruy=LocabeReg-iatrY*crsdteReff-istrrt10C03);registry.toindtcrcarServerrr,stuL):图3carServer类的main函数图2是各各站点在主server里登记IP和端口,图1是主server启动预定线程。图3是carServer开启线程的代码段。在启动预定线程时,

6、先执行代码3,即要先运行carServer、flightserver、hotelServer、customerServer、reseverServer,然后再运行主server.jjuljl-iclogin()fHashSset=nuU.;try(izegistcy=LocateRegistisy.gfsiKegcisijy(Fr127-0.0.1*,9955;stub=tServerReitiote)registryloolup(rr5erverrrJ;sec=stub.getF1iglicNums():图4客户端请求和server建立TCP!接保持server启动时,客户端请求和serve

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

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

9、系统采用slq2005,把每个站点上的数据、操作日志存贮到sql上。以备实现故障恢复。数据表FLIGHTS(StringflightNum,intprice,intnumSeats,intnumAvail)HOTELS(Stringlocation,intprice,intnumRooms,intnumAvail)CARS(Stringlocation,intprice,intnumCars,intnumAvail)CUSTOMERS(StringcustName)RESERVATIONS(StringcustName,intresvType,StringresvKey)2、概要设计分布式事务

10、分布式事务管理:1) 一个事务可能要访问分布存储在多个站点上的数据,该事务将被划分成多个子事务,每个子事务负责对一个数据存储站点进行访问2) 协调在各站点子事务工作以达到全局任务的原子性。子事务不仅要与相应站点上并发执行的其他本地事务相互协调,还要与分布式系统中全局事务所产生的其他子事务相互协调publicbooleanreserveItinerary(StringcustName,StringflightNum,Stringlocation,booleanneedCar,booleanneedRoom)throwsRemoteException,RuntimeException.线程执行ru

11、n(),在run()里面实现了事物的划分、各站点对子事物并发执行和本地事物协调以及主server的事物的裁决。本地事物管理:保证本地事务的特性,把用于分布式事务执行和恢复的信息记入日志,接收并听从本站点上DTM弋理发来的LOGM语,记入日志并执行。本地需要保存2份数据,一个是data,用于保存原始初始化和commit、rollback处理后的数据。一个是back,用于保存正在被处理的数据。当commit、roolback后,只需要用back来修改data.分布式事务结构图分布事务处理协议-集中式2PC协议由协调者质问所有的参与者是否准备好提交事务。如果有一个参与者投了“终止”票或在规定时间内未

12、对协调者作出响应,则协调者将命令所有的参与者终止事务。如果所有的参与者投了“提交”票,则协调者决策所有的参与者提交事务。if(flightFlag&carFlag&hotelFlag&reserFlag)*flag由*server的fix*处理结果,在投票表决阶段,协调者作出全局裁决,然后命令传输给参与者,参与者做出相应的处理2PC恢复机制故障所采用的基本做法是:根据协议的执行进程,考虑可能出现的各种故障,提出预防措施并作故障处理。1)站点故障参与者在Log中记录Ready前发生故障,可能原因是子事物失败,因超时导致协调者发出Abort命令。当发生故障的参与者恢复时,重启动过程简单撤销该事务即

13、可,不需过问其他站点的情况。(已处理)参与者在Log中记录Ready后发生故障,可能是本地已经commit了或者rollback了,这时候需要向协调者查询:若是Commit,则redo;若是Abort,则undo。从而对该结点上的子事务作出正确处理。(已处理)分布式事务加锁并发事务的冲突,丢失更新,破坏完整性约束,不一致读,所以要考虑分布式加锁,严格按照分布式加锁准则。1)采用主站点加锁法:选一站点定义为“主站点”,负责系统全部加锁管理。所有站点都向这个主站点提出加锁请求,然后由主站点去处理加锁事宜,读锁一个,写锁全部,更新数据时必须保证所有站点上该数据的副本同样更改,更新结束才能释放X锁。p

14、rivatefinalReentrantReadWriteLockrwl=newReentrantReadWriteLock();privatefinalLockr=();privatefinalLockw=();2)加锁点:在server的线程reseverThead类在run()里对所需要的数据资源加写锁,采用一次性资源分配的方法,所以才预定之前,需要查询数据资源是否可用。如果其他事物需要访问被锁住的数据,必须等待锁释放。在各资源站点的fix函数中加入写锁。如果其他事物需要访问被锁住的数据,必须等待锁释放。在各资源在commit()处理中,要把执行data=(xid),需要加写锁。在查询数据的时候,需要读数据。插入数据和预定commit()操作要加锁。在插入数据后,可能会执行commit(),这样使得新增饿数据被覆盖了。publichooLeanfFLighttintxld,3trinqf(Hashtableteitip=newHashtable1 car coimiiiCted, B

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号