数据库访问中的锁定策略
2009-10-21 00:00:00 来源:WEB开发网核心提示: 悲观会话锁定是一种序列化形式,会严重地影响系统的可用性,数据库访问中的锁定策略(6),须小心使用,它只能用于以下情况:常常出现冲突时且乐观会话锁定会引起严重的用户争用问题时,理想的方式是能锁定资源、确认其可用性并在不再使用时解除其锁定,但是,或业务会话中并发访问数据会导致完整性问题时,粗粒度锁定
悲观会话锁定是一种序列化形式,会严重地影响系统的可用性,须小心使用。它只能用于以下情况:常常出现冲突时且乐观会话锁定会引起严重的用户争用问题时,或业务会话中并发访问数据会导致完整性问题时。
粗粒度锁定
如前面所提到的,会话锁定模式中的一个特例是需要对表集合施加单一的锁。这在 Fowler (op. cit.) 中被称为粗粒度锁。允许在同一父表上存在多个粗粒度锁集合。例如,在财务系统中的客户级别上:一个粗粒度锁会锁定该客户的所有帐户,另一个锁则可锁定全部保险策略。在此情况下,为每个数据行添加额外列用于锁定目的会产生额外的开销,而更有效的方式是,将锁表与父表的粗粒度锁集合关联并为此表添加列来保存会话锁定信息。
粗粒度锁定可以是乐观的,也可以是悲观的。
插入锁定(名称空间锁定)
锁定的另一个特例是需要锁定当前数据库行中不存在的项目。例如,在医院计划中,某些极其复杂的计划过程中可能需要协调多种资源(医生、护士、病房等)以在相同时间期间可用。一种乐观计划方法可使用户选择资源,然后尝试在单个事务中对它们全部进行安排。如果出现错误(例如键重复),事务将需要回滚,用户将获得有关事务失败部分的信息,然后根据需要重新选择资源。这种方法也可用于解决航空订票系统中的类似问题。
如果出现大量冲突或冲突恢复过于复杂,可使用悲观方法,系统通过独立的分布式锁定机制来锁定可用于创建数据行的键。一种解决方法是数据库中的锁表,允许用户插入引用其他项的锁。采用以数据库为中心进行计划的一个问题是,在事务内部无法解锁项目(在提交或回滚处理之前)。理想的方式是能锁定资源、确认其可用性并在不再使用时解除其锁定。但是,存在这些限制,下面显示了实现以数据库为中心的锁定方法的模式:
更多精彩
赞助商链接