我想知道达到事务隔离级别的最佳方法是什么?可用隔离级别的This is a good link。
如果有人能解释事务的各种隔离级别,那就太好了。
发布于 2009-07-07 18:53:11
更新:澄清并更正了解释。
隔离级别只表示有多少事务受到其他并发事务的影响。隔离级别越高,受影响越小。
这一努力将在cpu负载、内存负载以及可能的提交延迟中表现出来。此外,在更高的隔离级别中,写冲突的可能性更大,这可能意味着您必须中止事务并重试整个事务。(这只影响执行更新或插入的事务,而不影响只执行selects的事务。)
一般来说,经验法则是使用为应用程序提供所需一致性的最低级别。
由Read Committed模式提供的部分事务隔离对于许多应用程序来说已经足够了,并且该模式使用起来既快速又简单;但是,它并不能满足所有情况。执行复杂查询和更新的应用程序可能需要比Read Committed模式提供的更严格一致的数据库视图。
Serializable模式提供了严格的保证,确保每个事务都能看到完全一致的数据库视图。然而,当并发更新使得不能维持串行执行的假象时,应用程序必须准备好重试事务。由于重做复杂事务的成本可能很高,因此仅当更新事务包含足够复杂的逻辑时才建议使用可序列化模式,以便在读提交模式下可能会给出错误答案。最常见的情况是,当一个事务执行几个连续的命令,而这些命令必须看到相同的数据库视图时,序列化模式是必需的。
( http://www.postgresql.org/docs/8.4/interactive/transaction-iso.html非常好。)
发布于 2009-07-07 19:04:43
如果您不确定隔离级别之间的差异,那么请坚持默认设置。更改级别可能会产生特殊的副作用。99%的应用程序可以接受默认设置。
我认为每个JDBC驱动程序的默认设置都有所不同,尽管像JPA这样的一些框架可能会强制执行它,但我不能立即回忆起它。最常见的默认值是read_committed,因为它在事务安全性和并发性之间提供了最佳的通用平衡。如果您选择不同的隔离级别,您将牺牲安全性或并发性,并且您必须意识到折衷。
发布于 2009-07-07 22:04:20
到底是什么问题?!
隔离级别定义DBMS使用的锁类型和锁粒度。锁定在DBMS的上下文中是必不可少的,因为事务是由潜在的许多用户并发执行的。更高的事务隔离--比如SERIALIZABLE--更安全--您可以潜在地消除脏读和幻影更新--但会带来一定的损失,因为序列化的事务限制了并发性,从而妨碍了可伸缩性。
该怎么办呢?构建应用程序,以便逻辑通过在绝对需要时明智地使用序列化事务来限制“坏数据”的可能性,但不会造成不必要的并发阻碍。
https://stackoverflow.com/questions/1094006
复制相似问题