1 / 31

Distributed Travel Reservation System

Distributed Travel Reservation System. (Part Ⅰ). Client1. Client 2. Client n. Resource Manager. 基本框架结构 (Part I) :C/S. Flights, Hotels, Cars, Customers. 设计时可能遇到的问题 (1-1). 1. 运行环境 操作系统 Solaris VM or Windows or Linux (Unix) 开发语言 JAVA JDK1.2.2 以上版本

kylee-vang
Download Presentation

Distributed Travel Reservation System

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Distributed Travel Reservation System (Part Ⅰ)

  2. Client1 Client 2 Client n Resource Manager 基本框架结构(Part I) :C/S Flights, Hotels, Cars, Customers

  3. 设计时可能遇到的问题(1-1) 1.运行环境 • 操作系统 Solaris VM or Windows or Linux (Unix) • 开发语言 JAVA JDK1.2.2以上版本 (Windows下需要Make工具)

  4. 设计时可能遇到的问题(1-2) • JAVA环境变量设置 Set path = …………;C:\j2sdk1.4.0_01\bin\ CLASSPATH = .;C:\j2sdk1.4.0_01\lib\tools.jar;C:\j2sdk1.4.0_01\lib\dt.jar;C:\j2sdk1.4.0_01\jre\lib\rt.jar;D:\project\

  5. 设计时可能遇到的问题(1-3) • 怎样运行 javac *.java 生成 *.class 文件 rmic transaction.ResourceManagerImpl make runreg 注册端口号 make runserver 运行Server端 make runclient 运行Client端 Ctrl + c to kill the server

  6. 设计时可能遇到的问题(1-4) • Linux, Unix, Solaris VM下可以无须改动makefile(part1.rar中), 可正常运行,运行时不需要make runreg命令.

  7. 设计时可能遇到的问题(2-1) 2.RMI与Thread • RMI (Remote Method Invocation) rebind(name, obj) 和 bind(name, obj) lookup(name)

  8. 设计时可能遇到的问题(2-2) • Thread run() 定义线程体 sleep(long millis) 睡眠millis毫秒 start() 启动线程

  9. 设计时可能遇到的问题(3-1) 3.Lock Manager (lockmgr包) • lock(xid, thingBeingLocked, read|write) throws DeadlockException • unlockAll(xid)

  10. 设计时可能遇到的问题(3-2) • lock()方法对于重复上锁的thing,第二次的上锁被视为无效,只是返回,并不加入到锁表中. • unlockAll(xid)方法一次性释放xid事务所拥有的全部资源.

  11. 设计时可能遇到的问题(4) 4.ITE和TAE • ITE ------ InvalidTransactionException 记录可用的事务号 • TAE ------ TransactionAbortedException e.g.,deadlock

  12. 设计时可能遇到的问题(5) 5.事务可以挂起吗? • 挂起 ------ 不commit,也不abort • 可以挂起,真正的RM用超时机制强制abort此类事务 • 程序中可以不考虑

  13. 设计时可能遇到的问题(6) 6.怎样实现多粒度锁? • 粒度 tables和tuples • 意向锁(IS和IX) lm不直接提供,但建议实现: read – S,S update – S,X insert/delete – X,X

  14. 设计时可能遇到的问题(7) 7.读/写磁盘 • readObject() • writeObject(Object) e.g. public class FlightsItem implements java.io.Serializable{ ………… }

  15. 设计时可能遇到的问题(8) 8.Customers和Reservations表可以合并吗? • 可以合并 • Reservations不含主键,但通常按custName查询 • Reservations(String custName, List resv) • resv(int resvType, String resvKey)

  16. 设计时可能遇到的问题(9-1) 9.测试与异常 • 测试(Test) shutdown(), dieNow(), dieBeforePointerSwitch(), dieAfterPointerSwitch()

  17. 设计时可能遇到的问题(9-2) • 异常处理 InvalidTransactionException, TransactionAbortedException, DeadlockException IOException和RemoteException可以暂时不考虑

  18. 设计时可能遇到的问题(10) 10.原子性的实现 • Shadow思想 • Log日志方法

  19. Distributed Travel Reservation System (实现细节)

  20. Part1中的主要数据结构 • 1.硬盘上: • (1)数据库主指针:masterpointer • 指向最新版本的满足完整性的一组数据库 • (2)数据库: • Flights1 Flights2 • Hotels1 Hotels2 • Cars1 Cars2 • Reservations1 Reservations2 • 两组数据库,一组保存最新版本的满足完整性的数据库,另一组保存上一个版本的满足完整性的数据库(少提交一个事务),两者轮换

  21. Part1中的主要数据结构 • 2.内存中: • (1)内存中当前活动的表: • FLIGHTS,HOTELS,CARS,RESERVATIONS • (2)内存中当前不活动的表: • FLIGHTSBAK,HOTELSBAK,CARSBAK,RESERVATIONSBAK • (3)当前活动的事务的事务号的集合: • TransactionXidSet • (4)记录被事务弄脏数据的表: • TransactionList

  22. Part1中事务执行的过程 • 1.start • 2.执行对表的操作,如addFlight • 3.commit或abort

  23. Part1中事务执行的过程 • 1.start • 调用start函数,得到一个事务号tid • 将得到的tid加到TransactionXidSet中

  24. Part1中事务执行的过程 • 2.addFlight • 修改活动的表FLIGHTS • 将此操作记录到TransactionList中,以备commit或abort时使用

  25. Part1中事务执行的过程 • 3.commit或abort • (1)commit: • 根据TransactionList中事务号为tid的事务的脏数据列表,对不活动的表FLIGHTSBAK进行相应的修改,使其与FLIGHTS一致 • 将FLIGHTSBAK写到硬盘上主指针没有指向的数据库,假设是Flights2 • 修改主指针 • 将事务号为tid的事务的相关内容从TransactionXidSet 和TransactionList中删除

  26. Part1中事务执行的过程 • 3.commit或abort • (2)abort: • 根据TransactionList中事务号为tid的事务的脏数据列表,对活动的表FLIGHTS 进行相应的修改,使其与FLIGHTSBAK一致 • 将事务号为tid的事务的相关内容从TransactionXidSet 和TransactionList中删除

  27. 元组操作类型的状态转换 • 一个事务对一个元组进行的操作共有以下4种类型: 0:此事务没有操作过此元组 1:此事务修改了此元组 2:此事务新建了此元组 3:此事务删除了此元组

  28. 1 0 1 1 3 3 3 2 2 3 2 1 元组操作类型的状态转换 • 4种更新类型的转换关系如下:

  29. 元组操作类型的状态转换 • 状态转换图中的转换关系如右表所示(“/”表示该情况不会出现):

  30. 元组操作类型的状态转换 • 先“修改”再“删除”等于“删除” • 先“新建”再“修改”等于“新建” • 先“新建”再“删除”等于“没有操作” • 先“删除”再“新建”等于“修改”

  31. 谢谢!

More Related