快照,悲观和乐观交易之间的区别

时间:2016-09-24 23:01:39

标签: database transactions relational-database

我一直在努力了解这些类型的数据库事务。从我的理解快照事务通过发送相对少量的旧数据库快照来维护并发性。当存在大量调用时,悲观阻止事务的操作,其中乐观允许您在没有锁的情况下调用对数据库的多个调用。我能正确理解这些吗?快照如何处理锁?

有人可以解释这些如何影响一致性,可用性甚至网络分区(CAP定理)?

1 个答案:

答案 0 :(得分:0)

  

数据库锁

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

  1. 表。
  2. 数据行。
  3. 数据块。
  4. 锁可以是读锁或写锁,当多个用户需要同时访问数据库时使用。这可以防止数据被破坏或失效。当多个用户尝试读取或其他用户尝试编写数据库时,会出现此类问题。

    任何一个用户都可以修改数据库记录,数据库中的项目已经应用了一个锁定,使他们可以独占访问记录,直到锁定被释放。

      

    悲观锁定

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

    悲观锁定是指在您完成操作之前锁定专用的记录。它具有比乐观锁定更好的完整性,但要求您小心应用程序设计以避免死锁。要使用悲观锁定,您需要直接连接到数据库(通常是双层客户端服务器应用程序中的情况)或外部可用的事务ID,可以独立于连接使用。

      

    乐观锁定

    • 开始时间戳标记。
    • 修改。
    • 验证
    • 提交/回滚

    乐观锁定是一种策略,您可以在其中读取记录,记下版本号(执行此操作的其他方法涉及日期,时间戳或校验和/哈希),并在编写之前检查版本是否已更改记录回来。当你写回记录时,你过滤版本的更新,以确保它是原子的。 (即在检查版本并将记录写入磁盘之间没有更新)并在一次点击中更新版本。

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

      

    快照

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

    希望这会帮助你理解!