22、数据库的乐观锁和悲观锁是什么?怎么实现的?

数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时满足ACID原则。

乐观锁和悲观锁是并发控制主要采用的技术手段

1、悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。

实现方式:使用数据库中的锁机制

2、乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定。

实现方式:乐观锁一般会使用版本号机制或CAS算法实现。

3、两种锁的使用场景

从上面对两种锁的介绍,我们知道两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于读多写少对场景,即冲突较少对场景,这样可以省去了锁的开销,加大了系统的整个吞吐量。

但如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。

相关推荐
等....12 小时前
Minio使用
数据库
win x13 小时前
Redis 使用~如何在Java中连接使用redis
java·数据库·redis
迷枫71214 小时前
DM8 数据库安装实战:从零搭建达梦数据库环境(附全套工具链接)
数据库
XDHCOM14 小时前
PostgreSQL 25001: active_sql_transaction 报错原因分析,故障修复步骤详解,远程处理解决方案
数据库·sql·postgresql
卤炖阑尾炎15 小时前
PostgreSQL 日常运维全指南:从基础操作到备份恢复
运维·数据库·postgresql
daad77716 小时前
wifi_note
运维·服务器·数据库
xixingzhe216 小时前
Mysql统计空间增量
数据库·mysql
程序员萌萌17 小时前
Redis的缓存机制和淘汰策略详解
数据库·redis·缓存机制·淘汰策略
不剪发的Tony老师17 小时前
SQLite 3.53.0版本发布,重要更新
数据库·sqlite
Bczheng117 小时前
九.Berkeley DB数据库 序列化和钱包管理(1)
数据库