2009年5月4日星期一

JavaEEDesign_012:数据层(持久化层)面临的四大问题之二:并发性问题(摘录+整理)

并发性问题指的是多个用户要更新同一记录,用户1提交修改后,用户2也提交修改,用户2覆盖了用户1的修改。
要避免这个问题,可以采取锁的机制。

1. 悲观锁策略 (pessimistic locking strategy)
用户1读取记录后,其他用户都不能访问这个记录,即使只是读取记录。
悲观锁策略是最安全的事务隔离级别,但在事务量较大的应用中,会使性能大大下降。

2. 乐观锁策略 (pessimistic locking strategy)
记录中带有版本信息,可以允许多个用户同时读取,但更新时,会比较读取的版本信息和数据库中的版本信息,如果两者一致,则允许更新,否则不允许更新。
乐观锁策略特别适合在事务量较大的应用中读取和迅速更新少量数据。乐观锁策略的实现方法有:
(1)在表中增加一个字段 row_version。
UPDATE title SET title_name=?, row_version=? WHERE title_id=? AND row_version=?
(2)在表中增加一个上次更新的时间戳字段。
建议使用第一种,比较清楚。
乐观锁代码应该放在DAO模式中,不要利用数据库触发器来完成这个工作,因为会有移植性问题。

没有评论: