刷盘,还是不刷盘,是一个问题 | 架构师之路重启

news2024/11/19 1:27:37

前几个有个朋友留言,问我说最近两年公号发读书感悟,职场感悟,AI实践居多了,发架构思路类的内容少了。

最近准备重启架构思路类的内容,且会保持一如既往的风格:

1. 希望引发大家思考,多讨论,多互动;

2. 核心原理通俗化描述,目标是让所有人搞懂;

3. 思路,比结论重要;

本篇源自我去年看到的一篇关于ARIES算法的论文,作为重启后的第一篇,算是一个引子,希望大伙多多支持。

画外音:去掉了论文里复杂的概念、算法及公式,加入了相关概念的补充解释说明与架构思考与补充。

让我们来看数据库中一个典型的读写事务的场景。

事务T1:

1. 开始事务

2. 读取记录A的值(假设A=1)

3. 修改记录A的值(假设修改为2)

4. 提交事务

这里面可能涉及哪些技术问题呢?

问题一,数据库如何读取记录A的值?

8edbddf6460de8389c8518d9e1c3220b.png

相关技术点:

1. 数据库使用缓冲池(buffer pool)机制提升读写效率;

2. 数据库以数据页(page)为单位管理缓冲池;

3. 如果被读取的数据在缓冲池中,直接从缓冲池中读取数据;

4. 否则,先将磁盘上的数据复制到缓冲池,再从缓冲池中读取数据;

2a7376d7460b3c1d130278db85734e9b.png

此例中,假设记录存储在一个单页上,且事先不在缓冲池中,故数据页会被复制到缓冲池。

问题二,数据库如何写入记录A的值?

相关技术点:

1. 数据库直接修改缓冲池中的数据;

2. 缓冲池中的数据不能实时刷回磁盘,毕竟事务还没有提交;

7ff3cb5814682cb1d61a94f4028815c9.png

此例中,缓冲池中的数据被修改为2,磁盘上的数据仍是1(如上图)。

那么,问题来了,如果缓冲池满了,要将哪些数据刷回磁盘呢?

原则上,得做到:

1. 如果事务未提交,“脏”数据不会被刷回磁盘;

2. 如果事务已提交,数据会被刷回磁盘。

数据库的故障恢复系统(crash recovery system)也会面临类似的问题,在数据库崩溃,内存中数据丢失的时候,未提交的事务和已提交的事务,如何保证ACID特性?

再来看一个并发的事务T1和T2的复杂场景:

T1.1. 开始事务

T1.2. 读取记录A的值(假设A=1)

T1.3. 修改记录A的值(假设修改为2)

    T2.1开始事务

    T2.2读取记录B的值(假设B=3)

    T2.3修改记录B的值(假设修改为7)

    T2.4提交事务

T1.4.回滚事务

假设,记录A和记录B都在一个数据页上。

b701bdcbe0b62ae5774465606d94733e.png

事务T1读取记录A的值,会将磁盘上的数据页复制到缓冲池,再进行读取(如上图)。

6fae618891cc6ec374aaef1292160744.png

事务T1修改记录A的值,会直接修改缓冲池中的数据(如上图)。

好,这个时候,事务T2启动了。

事务T2先读取记录B的值,缓冲池中已经存在记录B所在的页,所以无需进行磁盘访问。

画外音:缓冲池的核心作用,提高读写性能。

da8c2b83388f36e37a0b08dded93efc5.png

接下来,事务T2修改记录B的值,会直接修改缓冲池中的数据(如上图)。

接下来,事务T2提交了。

这个时刻,我们面临一个巨大的难题:在数据库返回应用程序事务成功之前,要不要将数据刷回磁盘?

如果不将数据刷回磁盘,就返回应用程序事务成功,那么万一数据库故障,缓冲池中的数据丢失,事务T2的ACID特性就会被破坏。

反之,如果将数据刷回磁盘,但此时事务T1还没有提交/回滚,事务T1的脏数据刷回磁盘,事务T1的ACID特性也会被破坏。

我们似乎陷入了一个两难的境地。如果是你,你会考虑用什么思路解决这个问题呢?

总结与思考

1. 数据库使用缓冲池(buffer pool)机制提升读写效率;

2. 数据库以数据页(page)为单位管理缓冲池;

3. 数据库直接读写缓冲池中的数据;

4. 此情况,刷盘,还是不刷盘?

欢迎评论区讨论:思考,比阅读更重要。

下一篇聊解决思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker安装与入门使用(适用于小白)

总结:Docker 是一个开源的容器化平台,旨在使开发、部署和运行应用程序的过程更加简单和高效。Docker 使用操作系统级虚拟化在单个主机上运行多个独立的容器。每个容器包含应用程序及其所有依赖项,确保在不同环境中具有一致的运行表现。 下面…

贪心算法——加工木棍(C++)

上大学,一天是一天,两天也是一天。 ——2024年6月27日 之前考试周断更了,今天重新开始! 题目描述 有n根木棍,已知每根木棍的长度和重量。这些木棍在木工机器上加工,机器准备加工木棍需要一些时间&#xf…

ABB机器人示教器死机时如何重置?

ABB机器人示教器死机时如何重置? 若遇到机器人示教器死机或卡顿现象时,可尝试将示教器重置,具体方法可参考以下内容: 如下图所示,首先将机器人控制柜断电关机, 如下图所示,同时按住快捷键&…

2024年水利工程与交通运输国际学术会议(ICWCET 2024)

全称:2024年水利工程与交通运输国际学术会议(ICWCET 2024) 会议网址: http://www.icwcet.com 会议时间: 2024/6/25 截稿时间:2024/6/15 会议地点: 天津 投稿邮箱:icwcetsub-conf.com 投稿标题:ICWCET 2024ArticleTEL。 ★会议简介…

目标检测系列(二)yolov1的全面讲解

目录 1、网络结构 2、检测原理 3、制作训练正样本方法 4、损失函数 5、前向推理 6、模型缺限 YOLO的全称是you only look once,指只需要浏览一次就可以识别出图中的物体的类别和位置。YOLO被称为Region-free方法,相比于Region-based方法&#xff0…

GNU、Unix、Linux、Makefile、GCC、GDB、GPL、CentOS 7、Ubuntu之间的关系

全文总结 早期,Unix系统作为一类强大的操作系统,在计算领域奠定了基础。然而,出于对软件自由的追求,Richard Stallman在1983年发起了GNU项目,旨在创建一个完全自由的、与Unix兼容的操作系统。GNU项目不仅倡议软件自由…

Web自动化元素定位之xpath定位【超详细】

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Web自动化常见的定位方式 为什么要学习定位 1.让程序操作指定元素,就必须先找到此元…

金升阳电源被制裁,广州顶源电源模块可以完美替换

广州顶源电子科技股份有限公司,座落于国家高新技术开发区---广州科学城,是一家集研发、生产、销售及服务于一体的DC-DC,AC-DC电源的生产厂家。 公司通过了IATF16949汽车认证及ISO9001:2015质量管理体系认证。拥有专家级研发团队,产品研发经过…

农村经济与科技杂志社农村经济与科技编辑部2024年第8期目录

视点 数字经济驱动农业产业链升级路径研究——以河南省为例 王媛媛; 1-4 城乡融合视角下农村集体产权制度改革研究 齐建丽; 4-7 农业生态系统结构美建设内涵及实现路径 张鹏程; 8-13《农村经济与科技》投稿:cnqikantg126.com 农户宅基地退出政策加权…

2024 最新推广服务 API 推荐,助力业务腾飞

在数字化营销的浪潮中,API 服务正以其强大的功能和高效的特性,成为企业和开发者们实现精准推广、优化营销效果的得力助手。2024 年的今天,各种创新的 API 服务层出不穷,为广告投放、数据洞察等领域带来了前所未有的机遇。在接下来…

华为开发者调试工具使用介绍(MDC)

MDC的开发过程的三大工具:MMC、MDS、Mind Studio,这三个工具完成了开发过程中的配置文件编写、代码编写以及AI模型的开发三个任务。除了开发,MDC还准备了两个调试工具,用于使用过程中数据的查看等。这一些调试工具分别对映射MDC中…

简化部署流程——无线UWB如何实现自标定?

一.什么是UWB信标自标定? UWB(超宽带)自标定是指在UWB系统中,基站或节点能够自动识别和确定自己的位置,无需外部干预或手动输入其地理位置信息。这种技术主要利用系统内部的信号测量和算法来自动计算节点之间的距离以…

数据交换的桥梁:深入探索JSON序列化和反序列化

目录 JSON序列化 一、查看JSON文件,设置数据模板类 ​编辑 二、Newtonsoft.Json下载 三、代码理解 1.创建BatteryList的实例 2.初始化Batterys属性 3.添加Battery对象到Batterys列表中 4.完整的代码如下 四、运行结果展示 JSON反序列化 序列化是将对象或…

如何通过待办工具提升个人效率 减轻压力提升效率的待办app

在快节奏的现代社会中,工作任务繁重,人们的压力日益增大。为了减轻压力并提升工作效率,我们急需找到一种有效的方法来管理日常任务。幸运的是,随着科技的进步,各种新兴工具应运而生,为我们提供了便捷的解决…

企业内部运营常用的API服务有哪些?

企业内部运营常用的API服务是现代企业管理和协作的关键工具之一。这些API服务提供了丰富的功能和工具,帮助企业提高内部运营效率、优化业务流程和加强团队协作。首先,企业内部通信和协作API服务是不可或缺的。通过这些API服务,企业可以建立内…

LSH算法:高效相似性搜索的原理与Python实现II

局部敏感哈希(LSH)是一种高效的近似相似性搜索技术,广泛应用于需要处理大规模数据集的场景。在当今数据驱动的世界中,高效的相似性搜索算法对于维持业务运营至关重要,它们是许多顶尖公司技术堆栈的核心。 相似性搜索面…

基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 控制系统概述 4.2 ADRC基本框架 4.3 控制律设计 5.完整工程文件 1.课题概述 基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真,分别对YAW,PITCH,ROL…

WEB与低代码:B/S架构在开发中的应用与优势

在互联网迅猛发展的今天,WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化,开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构(Browser/Server Architecture)作为一种常见的WEB应用架构…

入门JavaWeb之 Response 下载文件

web 服务器接收到客户端的 http 请求 针对这个请求,分别创建一个代表请求的 HttpServletRequest 对象,代表响应的 HttpServletResponse 对象 获取客户端请求过来的参数:HttpServletRequest 给客户端响应一些信息:HttpServletRe…

vue2的待办事项案例

头部组件 <template><div class"todo-header"><input type"text" placeholder"请输入你的任务名称&#xff0c;按回车键确认" keyup.enter"add"/></div> </template><script>import {nanoid} fro…