distributed travel reservation system n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Distributed Travel Reservation System PowerPoint Presentation
Download Presentation
Distributed Travel Reservation System

Loading in 2 Seconds...

play fullscreen
1 / 31

Distributed Travel Reservation System - PowerPoint PPT Presentation


  • 126 Views
  • Uploaded on

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 以上版本

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Distributed Travel Reservation System' - kylee-vang


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
part i c s

Client1

Client 2

Client n

Resource

Manager

基本框架结构(Part I) :C/S

Flights, Hotels,

Cars, Customers

slide3
设计时可能遇到的问题(1-1)

1.运行环境

  • 操作系统

Solaris VM or Windows or Linux (Unix)

  • 开发语言

JAVA JDK1.2.2以上版本

(Windows下需要Make工具)

slide4
设计时可能遇到的问题(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\

slide5
设计时可能遇到的问题(1-3)
  • 怎样运行

javac *.java 生成 *.class 文件

rmic transaction.ResourceManagerImpl

make runreg 注册端口号

make runserver 运行Server端

make runclient 运行Client端

Ctrl + c to kill the server

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

2.RMI与Thread

  • RMI (Remote Method Invocation)

rebind(name, obj) 和 bind(name, obj)

lookup(name)

slide8
设计时可能遇到的问题(2-2)
  • Thread

run() 定义线程体

sleep(long millis) 睡眠millis毫秒

start() 启动线程

slide9
设计时可能遇到的问题(3-1)

3.Lock Manager (lockmgr包)

  • lock(xid, thingBeingLocked, read|write)

throws DeadlockException

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

4.ITE和TAE

  • ITE ------ InvalidTransactionException

记录可用的事务号

  • TAE ------ TransactionAbortedException

e.g.,deadlock

slide12
设计时可能遇到的问题(5)

5.事务可以挂起吗?

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

6.怎样实现多粒度锁?

  • 粒度

tables和tuples

  • 意向锁(IS和IX)

lm不直接提供,但建议实现:

read – S,S update – S,X

insert/delete – X,X

slide14
设计时可能遇到的问题(7)

7.读/写磁盘

  • readObject()
  • writeObject(Object)

e.g.

public class FlightsItem implements java.io.Serializable{

…………

}

slide15
设计时可能遇到的问题(8)

8.Customers和Reservations表可以合并吗?

  • 可以合并
  • Reservations不含主键,但通常按custName查询
  • Reservations(String custName, List resv)
  • resv(int resvType, String resvKey)
slide16
设计时可能遇到的问题(9-1)

9.测试与异常

  • 测试(Test)

shutdown(), dieNow(),

dieBeforePointerSwitch(),

dieAfterPointerSwitch()

slide17
设计时可能遇到的问题(9-2)
  • 异常处理

InvalidTransactionException,

TransactionAbortedException,

DeadlockException

IOException和RemoteException可以暂时不考虑

slide18
设计时可能遇到的问题(10)

10.原子性的实现

  • Shadow思想
  • Log日志方法
part1
Part1中的主要数据结构
  • 1.硬盘上:
    • (1)数据库主指针:masterpointer
          • 指向最新版本的满足完整性的一组数据库
    • (2)数据库:
          • Flights1 Flights2
          • Hotels1 Hotels2
          • Cars1 Cars2
          • Reservations1 Reservations2
          • 两组数据库,一组保存最新版本的满足完整性的数据库,另一组保存上一个版本的满足完整性的数据库(少提交一个事务),两者轮换
part11
Part1中的主要数据结构
  • 2.内存中:
    • (1)内存中当前活动的表:
          • FLIGHTS,HOTELS,CARS,RESERVATIONS
    • (2)内存中当前不活动的表:
          • FLIGHTSBAK,HOTELSBAK,CARSBAK,RESERVATIONSBAK
    • (3)当前活动的事务的事务号的集合:
          • TransactionXidSet
    • (4)记录被事务弄脏数据的表:
          • TransactionList
part12
Part1中事务执行的过程
  • 1.start
  • 2.执行对表的操作,如addFlight
  • 3.commit或abort
part13
Part1中事务执行的过程
  • 1.start
    • 调用start函数,得到一个事务号tid
    • 将得到的tid加到TransactionXidSet中
part14
Part1中事务执行的过程
  • 2.addFlight
    • 修改活动的表FLIGHTS
    • 将此操作记录到TransactionList中,以备commit或abort时使用
part15
Part1中事务执行的过程
  • 3.commit或abort
    • (1)commit:
      • 根据TransactionList中事务号为tid的事务的脏数据列表,对不活动的表FLIGHTSBAK进行相应的修改,使其与FLIGHTS一致
      • 将FLIGHTSBAK写到硬盘上主指针没有指向的数据库,假设是Flights2
      • 修改主指针
      • 将事务号为tid的事务的相关内容从TransactionXidSet 和TransactionList中删除
part16
Part1中事务执行的过程
  • 3.commit或abort
    • (2)abort:
      • 根据TransactionList中事务号为tid的事务的脏数据列表,对活动的表FLIGHTS 进行相应的修改,使其与FLIGHTSBAK一致
      • 将事务号为tid的事务的相关内容从TransactionXidSet 和TransactionList中删除
slide27
元组操作类型的状态转换
  • 一个事务对一个元组进行的操作共有以下4种类型:

0:此事务没有操作过此元组

1:此事务修改了此元组

2:此事务新建了此元组

3:此事务删除了此元组

slide28

1

0

1

1

3

3

3

2

2

3

2

1

元组操作类型的状态转换
  • 4种更新类型的转换关系如下:
slide29
元组操作类型的状态转换
  • 状态转换图中的转换关系如右表所示(“/”表示该情况不会出现):
slide30
元组操作类型的状态转换
  • 先“修改”再“删除”等于“删除”
  • 先“新建”再“修改”等于“新建”
  • 先“新建”再“删除”等于“没有操作”
  • 先“删除”再“新建”等于“修改”