独立事务、开放式锁定、和保守式锁定只能用在单个数据库事务上的,然而,许多的程序需要 长时间的 在多个数据库事务之间 读取或者更新 共享数据。比如,有一种情况描述的是 怎样实现 用户编辑命令,这和很多的进程有关,这些进程可能会运行 很长的时间,而且它由 多个数据库事务组成。因为数据可能会被 一个数据库事务 读取,而又被 另外一个数据库事务 修改了,那么程序必须对 共享数据的并发访问 进行不同的处理。这样就必须使用 开放式锁定设计模式或 者保守是锁定设计模式,关于这两种模式会在Fowler的 Patterns of Enterprise Application Architecutre中详细介绍。
开放式脱机锁定
模式一种选择是开放式锁定机制的扩展,它会从第一次读取数据开始,在编辑进程执行后检查数据是否已经被修改了。例如,你可以在数据库的共享数据的表中使用版本号来实现。在编辑进程开始的时候,程序将版本号存储到会话状态中,然后每次用户要存储数据时,应用程序都要进行检查,保证数据库中的版本号和会话状态中的版本号一致。
因为开放式脱机锁定模式只有在用户进行保存修改过的数据时才可以检测,所以它只有在不成为客户的累赘的时候,才可以很好的运行。但如果情况是:客户必须要撤销几个操作的话,那么就会因为这种锁定模式而非常苦恼,那么更好的一种选择是用保守式脱机锁定。
保守式脱机锁定
模式在编辑进程开始时,保守式脱机锁定方式通过锁定 共享数据,来解决 多个数据库事务 同时更新共享数据的问题,这样,这个编辑进程就可以防止 其他的用户来修改数据了。这种方式和保守式锁定机制一开始描述的很类似,但它是靠程序来实现的,而不是数据库。因为同一时间内,只有有权利编辑共享数据的用户,才有权利去保存这些修改。
文章来源于领测软件测试网 https://www.ltesting.net/