首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快照、悲观和乐观事务之间的差异

问快照、悲观和乐观事务之间的差异
EN

Stack Overflow用户
提问于 2016-09-25 07:01:39
回答 2查看 292关注 0票数 0

我一直在尝试理解这些类型的数据库事务。根据我的理解,快照事务通过发送相对较少的时间较旧的数据库快照来保持并发。当有许多调用时,悲观会阻塞事务的操作,其中乐观允许您在没有锁的情况下调用多个数据库调用。我对这些的理解正确吗?快照是如何处理锁的?

有人能解释一下这些是如何影响一致性、可用性甚至网络分区(CAP定理)的吗?

EN

回答 2

Stack Overflow用户

发布于 2016-09-25 15:30:09

数据库锁

在其他系统中,数据库锁用于保护共享资源或对象。这些受保护的资源可以

  1. Table.
  2. Data行。
  3. 数据块。

锁可以是读锁或写锁,在多个用户需要并发访问数据库时使用。这可以防止数据被损坏或失效。当多个用户尝试读取或其他用户尝试写入数据库时,会发生此类问题。

任何单个用户都可以修改数据库记录,即他们应用了锁的数据库中的项,该锁为他们提供对记录的独占访问,直到锁被释放。

悲观锁定

在悲观锁定中,当请求锁定时,立即锁定记录或页。

悲观锁定是指将记录锁定为独占使用,直到完成为止。它比乐观锁定具有更好的完整性,但要求您小心应用程序设计以避免死锁。要使用悲观锁定,您需要一个到数据库的直接连接(在两层客户机服务器应用程序中通常就是这种情况),或者需要一个可以独立于连接使用的外部可用事务ID。

乐观锁定

  • Begin - time stamp marking.
  • Modify.
  • Validate
  • Commit/rollback

乐观锁定是一种策略,在这种策略中,您可以读取记录,记录版本号(其他方法包括日期、时间戳或校验和/散列),并在写回记录之前检查版本是否未更改。当您写回记录时,您可以过滤版本上的更新,以确保它是原子的。(即,当您检查版本并将记录写入磁盘时尚未更新),然后一次性更新版本。

如果记录是脏的(即与您的版本不同),则中止事务,用户可以重新启动它或回滚。

快照

快照是数据库的只读静态视图。

希望这篇文章能帮助你理解!

票数 0
EN

Stack Overflow用户

发布于 2021-10-10 19:20:17

并发控制是关于控制可能导致问题的不同现象,例如脏读/不可重复读/幻影读/丢失更新。你既可以乐观地认为这些问题很少发生,也可以悲观地认为它们会更频繁地发生。()

当您乐观时,首先允许发生更改并在检测到问题的情况下回滚是有意义的。回滚的代价很高,但如果很少发生,也没问题。快照隔离和可串行化快照隔离是两种乐观的并发控制算法。

悲观的并发控制是由锁完成的。

更多细节在https://www.interdb.jp/pg/pgsql05.html中:

主要有三种并发控制技术,即多版本并发控制、严格两阶段锁定(S2PL)和乐观并发控制(OCC)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39681748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档