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

下载本文档

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

文档简介

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

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

3、Poo 1 = Em白也. 日8展工*字1 mTkx8*&E2白巴必上(?上(): Future future - threadPool,submit(new ReserveThread (xld. custMame, f llglitMujn. locaticm, 2ieedCar, ne&dR&om);图1主server开启预定线程Registry registry +127.0.0. lf10002);弓耳二*匚心 = (CacKeruQte) xeigxry . lockup (,FcarServeu,F);registry = LDc&teRegiar

4、ry. £retJ?cficzs txy (,r127.0. 0. lr 10000);flightStuto = (FlightRemotej reQistrv. Icokxip (tTt lightServerff);registry = LQcateflegz3.3t.ry. 3fe tJiegis t_ty (*r 12*? .0.0.1 M 1CD01);hotelSrub = (HoteIREmore)匚亡gij七匚y , Imcilmp'hciCRIBerv已匚"J ;registry = LocatsRegisrry« getRgi.s t

5、ry (,r 127 »0 . lr, 10004);r5serStuls = (Re?srRewflte) registry, leaJcup (3 5r Server rr);图2 ReserveThread类中实现服务器分布pultllr static void main (Str ing args) try d CerServer cm工工yu匚=事ev CarSecvcc();Car Feme te sfub * (CarRemote ) 111110!且31:1<e加口匚以口13邑仁匚,色乂口口上1匕口灯_18已t1 白刍中ee . 0) Registry reis

6、ruy = LocabeReg-iatrY* crsdteReff-istrrt 10C03); registry .toind tcr car Serve rrr, stuL):图3 carServer 类的main函数图2是各各站点在主server里登记IP和端口,图1是主server启 动预定线程。图3是carServer开启线程的代码段。在启动预定线程 时,先执行代码3,即要先运行carServer、flightserver 、 hotelServer 、customerServer、reseverServer , 然后再 运行主 server.jjuljl-ic login () f

7、 HashSset = nuU.; try (izegistcy = LocateRegistisy. gfs iKegcis i jy (Fr 127-0.0.1*,9955 ; stub = tServerReitiote) registry loolup (rr5erverrrJ;sec = stub.getF 1 iglicNums ():图4客户端请求和server建立TCP!接保持server启动时,客户端请求和 server建立TCP连接,如上图4.每个服务器按照总体的设计结构图,分别实现数据的存储、数据的更新、数据的插入、预定对应的数据。同时,每个服务器实现本地的事务管理、工作

8、流管理、并发控制。主服务器实现把一个事物划分成多个子事物, 对各个站点处理子事物结果进行裁决,工作流的控制,并发控制,实现分布式的事物处理。原子性 : 客户端向主服务器端发出预订申请时, 主服务器分别从每个服务器取得数据并进行交互进行试预订, 如果每个服务器返回成功信息,则再由Server统一进行Commit操作,否则如果有至少一个服务器返回预订失败的信心,则由 Server 统一将每个服务器上试预订的信息 rollback 。并发性: 由 java 的 Lock 包进行控制, 对每个操作服务器数据的线程进行并发控制,对每一个读操作进行readLock ,可以与其他读线程同步进行, 但是在释放

9、读锁之前写操作无法执行。 在对数据的每一个写操作前进行writeLock, 同时等待其他线程释放读锁。其他写操作必须等到该线程释放写锁之后才能进行。一致性: 由于事物的并发、通信传输故障、站点故障会导致数据的不一致性。针对事物并发,可以对数据资源加读写锁。网络通信问题本系统中暂未考虑。站点故障通过读取操作日志觉得redo 或 undo、commit 或 rollback 。持久性:经过commit或者rollback之后的数据存放在每一个 Server 上,可以将其入数据库或者 XM戊件,本系统采用slq2005,把每个 站点上的数据、操作日志存贮到 sql 上。以备实现故障恢复。数据表FLI

10、GHTS (String flightNum, int price, int numSeats, intnumAvail)HOTELS (String location, int price, int numRooms, int numAvail)CARS (String location, int price, int numCars, intnumAvail)CUSTOMERS( String custName)RESERVATIONS(String custName, int resvType, String resvKey)2、概要设计分布式事务分布式事务管理:1) 一个事务可能要访问

11、分布存储在多个站点上的数据,该事务将被划分成多个子事务,每个子事务负责对一个数据存储站 点进行访问2) 协调在各站点子事务工作以达到全局任务的原子性。子事务不仅要与相应站点上并发执行的其他本地事务相互协调,还要与分布式系统中全局事务所产生的其他子事务相互协调public boolean reserveItinerary(String custName, String flightNum,String location, boolean needCar, boolean needRoom) throws RemoteException,RuntimeException.线程执行run(),在ru

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

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

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

15、主站点去处理加锁事宜, 读锁一个,写锁全部,更新数据时必须保证所有站点上该数据的副本同样更改,更新结束才能释放X 锁。private final ReentrantReadWriteLock rwl = newReentrantReadWriteLock();private final Lock r = ();private final Lock w = ();2)加锁点:在 server 的线程 reseverThead 类在 run() 里对所需要的数据资源加写锁,采用一次性资源分配的方法,所以才预定之前,需要查询数据资源是否可用。 如果其他事物需要访问被锁住的数据, 必须等待锁释放。 在

16、各资源站点的 fix 函数中加入写锁。如果其他事物需要访问被锁住的数据,必须等待锁释放。在各资源在commit ()处理中,要把执行data = (xid),需要加写锁。在查询数据的时候,需要读数据。插入数据和预定commit()操作要加锁。在插入数据后,可能会执行commit(),这样使得新增饿数据被覆盖了。public ho oLean f F Light tint xld, 3trinq f(Hashtable<Strin. FLLht-> teitip = new Hashtable<Strringf() jlock(); try (3)预防死锁:一次加锁法,要求每个

17、事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。3.操作界面两个用户同时订一张票 两个客户同时订一张票的时候,在订票成功的情况下,服务器将显示是哪个客户订了什么票,而客户端也会显示操作成功。如下图所示:CarServfrr Java Applkation D:Program FilcazrServe zready定出租成功cax conmiting- - ,»Q car comml'tted. . .»0 0* conuriu定出租成功car coramting. .>>1 car coimiii'Cted, B ->>1

18、 commieResJtv* Jippli cti mi I: IJreserServer ready 美君illght CJL13 15 success 院君car上海success 美君hotel上海success 0cotntnir小章flight Ckl3 15 success 小量car上海s uc c e a £ 小童hotel上海 success1 .coinwit1*. Problems Java do c 1 建 Dech ration 目 Cor td e 泾 格 DebugServer Java ApplicjtiorJ C:Program FilesJavaj

19、re6birrJavavrexe (Jun lld 2010 8:03:08 PM)writing fIni shed >>>0 writing £inished>>1 true Erne预定和插入 在一个客户预定成功,而另一个站点在插入一个航班的情况下, 服务器将增加一个航班以及一个客户预定的情况。如下图所示:日航筋系境就定ky (HashtaE ie<3trir;gf riignt> 口就宛 = 打工口哂ata nev Suingdat&9i 3i&e() 4使客出根本3查问-0回M版班亲侑3曲剌K庄忙CA1313SO30

20、CA1312,202020CA1311101010d1 111534CA131&5。5 口4&CA131440如39际班用户城市价格到手本辆广州2002020芝加再200010 0 0100口北京200109上海1503025南宁8004040壮就5(JOO55由和午价。房间利家房同Utt101010北中3d3029上霹3。汕25广州3030第南宁加70卯骂官数据恢复flightStut. ccinmi t (xid.);If (needRooin '= tnue) hotelStub. coinnit (xid.) ; Teser5tTib. coimit (xid.);it匚且="tru ( carSrui). cdkilie (Kid, lacaclon ;川苣同.三回一呈I航班出租车宾洎重启后:1 f (3t. 3,sCrFLa.g

温馨提示

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

评论

0/150

提交评论