面试官:数据库的隔离是什么意思?

科技   2024-09-23 17:26   河北  

欢迎加入华仔的星球,你将获得: 专属的中间件专栏 / 1v1 提问 / 简历修改指导/ 学习打卡 / 每月赠书 / 社群讨论

截止目前,累计输出 500w+ 字,讲解图 2000+ 张,还在持续爆肝中.. 后续还会上新更多项目和专栏,目标是打造地表最强中间件星球,戳我加入学习,已有420+小伙伴加入电商实战项目火热更新中,结束时会有简历指导包装,需要的抓紧来

这里说几点,解答一些疑惑,可以认真看下:

1、星球内容只会越来越完善,价格越来越贵,一年时间从69元开始发售到现在已经涨到了189元,下个月会涨价一波,所以需要抓紧来,越早越受益,别错过

2、只筛选认可且支持我的老铁,我不喜欢白嫖怪,尊重别人就是尊重自己。

3、对于星球年费说下,只是到期后新内容看不到,已经更完的内容相当于一次付费永久看,所以认可我内容的可以放心来,有疑问文末加我好友进行答疑

4、除专栏外,我会提供专属的一对一答疑服务,包括不限于工作中、专栏中遇到的问题,简历修改指导、职业规划服务等。这也是星球的特色服务。

数据库隔离级别定义了一个事务中的操作与其他并发事务之间相互隔离的程度。在多用户环境中,它们在管理事务之间的交互、维护数据的完整性和一致性方面至关重要。

隔离级别的重要性在于它平衡了数据一致性和性能。较高的隔离级别可以确保更好的数据完整性,但可能会降低性能;而较低的隔离级别则提高了性能,但可能会引发异常。

如果没有适当的隔离,可能会发生以下问题:

  • 脏读:一个事务读取了另一个未提交事务写入的数据,而这些数据可能会被回滚。
  • 不可重复读:一个事务两次读取同一行数据,发现值不同,因为另一个事务在两次读取之间修改并提交了该行数据。
  • 幻读:一个事务检索满足某个条件的一组行,但在后续检查时发现这一组行已经发生变化,因为另一个事务插入或删除了行。

下图说明了四种隔离级别。

  • 可序列化(Serializable):最高的隔离级别,事务之间完全隔离,仿佛事务是串行执行的而非并发执行的。提供最一致的结果,但在高并发下可能导致性能瓶颈。

  • 可重复读取(Repeatable Read):事务期间读取的数据与事务开始时保持一致。一致性较好,性能略有降低。

  • 已提交读取(Read Committed):只有在事务提交后才能读取修改的数据。一致性与性能之间的良好平衡。

  • 未提交读取(Read Uncommitted):在事务提交之前,其他事务可以读取修改的数据。速度快,但数据一致性风险高

隔离由 MVCC(多版本一致性控制)和锁来保证

图中以可重复读取为例,演示了 MVCC 的工作原理:

  • 每一行有两个隐藏列:transaction_id 和 roll_pointer。当事务 A 开始时,会创建一个事务 ID = 201 的新读视图。不久后,事务 B 开始,又创建了一个新的读取视图,transaction_id=202。

  • 现在,事务 A 将余额修改为 200,日志中创建了一条新记录,roll_pointer 指向旧记录。在事务 A 提交之前,事务 B 读取了余额数据。事务 B 发现事务 ID 201 没有提交,于是读取了下一条提交记录(事务 ID=200)。

  • 即使事务 A 提交了,事务 B 仍会根据事务 B 启动时创建的读取视图读取数据。因此,事务 B 总是读取余额=100 的数据。

为什么隔离级别很重要?

  • 数据一致性:确保事务结束后,数据库处于一致状态。
  • 数据完整性:防止出现丢失更新、脏读或冲突更改等问题。
  • 并发控制:在访问数据的用户或操作数量与数据库一致性之间找到平衡。
  • 性能优化:帮助在性能和严格的事务规则之间进行权衡和优化。

在生产环境中,我们要避免错误地设置隔离级别,这会造成不可预计的后果。

-------- 往期好文 --------

快速分析日志的小抄

10 个系统设计中的取舍

面试官:为什么需要使用分布式锁?

万字长文详解低时延股票交易系统的设计

最后最后推荐下两个不错的产品感兴趣的可以
上车了,这里只吸引同频的人,如果加入几分钟
就直接退出的就不要来了,浪费我的名额。

第一个来自码哥的小报童,仅需 19 元,刚开始更新,需要的可以扫码加入。

本专栏内容涵盖 Java 基础、Java 高级进阶、Redis、MySQL、消息中间件、微服务

架构设计等面试必考点、面试高频点。本专栏不只是单纯教大家学会背八股文知识,

更多是结合实际大厂高并发项目的场景,去学习面试技术要点。从面试官的角度去出

发,介绍互联网 Java 流行技术体系各个面试要点。

本专栏适合于准备进阶 Java 后端技术、有面试或提升技术需求,希望学习互联网大

厂 Java 流行技术体系的程序员和面试官,助你拿到名企高薪 Offer。






第二个是我的知识星球,仅需 189 元,限时特惠
赠送老徐避坑星球(139元)+ 我的副业我陪伴
群(39.9),需要的可以扫码加入。

关于星球介绍点击:

超 500 万字详解,从零到一带你彻底吃透 Kafka + RocketMQ

小红书实战



加入星球的会赠送老徐的副业避坑星球(价值
139),还会送我的副业陪伴群一年(价值
39.9),相当于免费加入我的技术星球。

需要的加入后文末加我好友来领取福利。


(副业是未来必须要做的事情,
可以趁现在早点布局)


需要续费的扫这个,优惠15元


另外必须要注意的是上车的老铁一定要加我微信
好友,拉你们加入星球专属交流群。

华仔聊技术
聊聊后端技术架构以及中间件源码
 最新文章