【必会面试题】快照读、当前读是什么?如何理解

目录

    • 1. 当前读(Current Read)
    • 2.快照读(Snapshot Read)
    • 3.总结流程图

快照读和当前读是MySQL数据库的重要机制,也是高频的面试题。首先我们要知道以下几个概念。

  • 缓存机制:缓存是系统中用于存储经常访问的数据的内存空间,以减少对磁盘I/O的需求,提高数据读取的性能。
  • 当前读:当前读直接读取最新数据,并可能需要加锁来确保数据一致性。
  • 快照读:快照读基于事务开始时的一致性视图,不受其他事务影响,依赖MVCC机制。
  • MVCC:MVCC通过维护数据的多个版本来实现并发控制,为快照读提供支持。
  • 锁机制:锁机制用于确保数据一致性,避免并发事务导致的数据冲突。

1. 当前读(Current Read)

概念
当前读是指读取操作直接访问最新的数据,数据读取过程中会受到其他并发事务的影响。这意味着,如果在当前读过程中有其他事务修改了数据,那么当前读会读取到最新的修改。

原理
当前读依赖于数据存储系统的读写锁机制来保证数据一致性。在数据库系统中,当前读通常涉及锁机制,例如共享锁(S锁)和排他锁(X锁),以确保读取过程中的数据一致性。

应用场景
举个例子,在开发一个日志处理系统时,需要高效地读取大量日志文件。理解当前读的原理可以帮助我们优化读取性能,例如:

  • 使用缓冲读取(Buffered Read)来减少系统调用次数。
  • 利用内存映射文件(Memory Mapped File)来加速大文件的读取。
  • 实现异步 I/O 操作,提高并发读取的性能。
缓存命中
缓存未命中
程序调用read
操作系统检查缓冲区
返回数据
从磁盘读取数据
更新缓冲区

2.快照读(Snapshot Read)

快照读的主要挑战在于如何在缓存中维护多个数据版本,以及如何在读取操作时选择合适的版本。

实现原理
为了处理缓存机制,系统需要确保缓存中的数据与磁盘上的数据版本一致。以下是具体的实现策略:

  • 版本列表:每个数据项在缓存中有多个版本,每个版本对应一个快照。
  • 版本元数据:每个版本包含数据的具体值以及版本的时间戳或事务ID。
缓存
数据项1
数据项2
版本1
版本2
版本1
版本2

读取操作
当进行快照读时,系统会根据当前事务的快照时间戳或事务ID,从缓存中选择合适的版本进行读取。

  • 选择合适版本:读取操作时,根据事务的快照时间戳,从版本列表中选择最接近且不超过快照时间戳的版本。
  • 数据一致性:如果缓存中没有合适的版本,系统会从磁盘读取数据并将其版本添加到缓存中。

写入操作
写入操作需要更新缓存中的数据版本,同时确保不影响其他事务的快照读。

  • 更新最新版本:写入操作时,更新缓存中最新的数据版本,并为新版本分配新的时间戳或事务ID。
  • 保留旧版本:旧版本仍然保留在缓存中,以便进行快照读时使用。

应用场景

示例:

假设有一个高并发的订单系统,需要频繁读取和更新订单信息。通过使用快照读和缓存机制,可以确保在读取操作时获取一致性视图,同时提高系统的读取性能。

-- 创建表
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_status VARCHAR(20),
    update_time TIMESTAMP
);

-- 读取操作
START TRANSACTION;
-- 使用缓存读取,基于快照时间戳选择版本
SELECT order_status FROM orders WHERE order_id = 1;

-- 写入操作
START TRANSACTION;
-- 更新缓存中的最新版本,同时保留旧版本
UPDATE orders SET order_status = 'shipped', update_time = NOW() WHERE order_id = 1;
COMMIT;

3.总结流程图

MVCC机制
锁机制
缓存机制
当前读
快照读
基于快照读取
根据MVCC选择版本
从磁盘读取快照数据
加锁读取
数据是否已加锁?
加锁
从磁盘读取最新数据
等待或失败
处理锁冲突
从缓存读取数据
更新缓存
缓存中存储多个版本
读取请求
缓存命中?
选择读模式
返回最新数据
返回快照数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

照明物联网:基于网关的智能照明云监控系统解决方案

智能照明系统就是利用物联网技术,将同一空间的照明、空调、新风、排风等系统共同接入物联网平台,实现了“设备互联、数据互通”的智慧物联能力。照明数据、环境监测数据通过网关上传云端,在云端进行统计分析并将结果通过各种终端共享&#xf…

MySQL—常用的数据类型

数据类型 整型 1.创建一个含有无符号/有符号整型的字段的表 CREATE TABLE L1(id tinyint unsigned #无符号 ) CREATE TABLE L2(id tinyint #默认为有符号 ) 数值型(bit) 2.数值型(bit)的使用 小数 3.数值型(小数)的基本使用 字符串 4.字符串的基本使用 #演示字符串类型…

REGX52.H报错

keil cannot open source input file "REGX52.H": No such file or directory 选择下面这个目录 Keil\C51\INC\Atmel

AI绘画Stable Diffusion 新手入门教程:万字长文解析Lora模型的使用,快速上手Lora模型!

大家好,我是设计师阿威 今天给大家讲解一下AI绘画Stable Diffusion 中的一个重要模型—Lora模型,如果还有小伙伴没有SD安装包的,可以看我往期入门教程2024最新超强AI绘画Stable Diffusion整合包安装教程,零基础入门必备&#xff…

【软件测试】Selenium自动化测试框架 | 相关介绍 | Selenium + Java环境搭建 | 常用API的使用

文章目录 自动化测试一、selenium1.相关介绍1.Selenium IDE2.Webdriverwebdriver的工作原理: 3.selenium Grid 2.Selenium Java环境搭建3.常用API的使用1.定位元素2.操作测试对象3.添加等待4.打印信息5.浏览器的操作6.键盘事件7.鼠标事件8.定位一组元素9.多层框架定…

手把手家教你进行ChatGPT私有化部署

背景 随着AI技术的不断成熟,加上ChatGPT如火如荼的发布新版本迭代更新,人工智能的热度也升温到史无前例的高度。 我们有理由相信,现在身边还不愿主动去接触这项技术,深入了解的小伙伴,在不久的将来,一定会…

网络攻防——kali操作系统基本使用

1.阅读前的声明 本文章中生成的木马带有一定的攻击性,使用时请遵守网络安全相关的法律法规(恶意攻击操作系统属于违法行为)。 2.环境安装 生成木马主要需要如下工具:kali操作系统,VMware15(搭建kali操作…

用Python制作动态钟表:实时显示时间的动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame绘制钟表函数主循环 完整代码 引言 动态钟表是一种直观且实用的UI元素,能够实时显示当前时间。在这篇博客中,我们将使用Python创建一个动态钟表,通过利用Pygame库来实…

无线物联网题集

测试一 未来信息产业的发展在由信息网络向 全面感知和 智能应用两个方向拓展、延伸和突破。 各国均把 物联网作为未来信息化战略的重要内容,融合各种信息技术,突破互联网的限制,将物体接入信息网络。 计算机的出现,开始了第四次工业革命,开始了人机物的高度融合(&…

LVS负载均衡群集部署之——DR模式的介绍及搭建步骤

一、LVS-DR集群介绍1.1 LVS-DR 工作原理1.2 数据包流向分析1.3 LVS-DR 模式的特点1.4 LVS-DR中的ARP问题1.4.1 问题一1.4.2 问题二二、构建LVS-DR集群2.1 构建LVS-DR集群的步骤(理论)1.配置负载调度器(192.168.80.30)(…

护眼指南之适合学生写作业的台灯:看看学生护眼台灯哪个品牌好

随着人们健康意识的提高,越来越多的人开始关注眼睛的健康问题,照明技术的进步也为缓解眼疲劳提供了可能,现在的照明产品可以通过调整光线亮度、色温、频闪等参数,使光线更加柔和、均匀,减少眼睛的不适感。人们都希望通…

重生奇迹MU 最动听的声音 最精彩的游戏

在重生奇迹MU的世界里,每个玩家都是重生奇迹的见证者,同时也是重生奇迹的创造者。每个玩家都有属于自己的冒险故事,每时每刻都会有新的喜悦降临。这款神奇的游戏让人沉浸于冒险的精彩中,实在引人入胜。 “叮”的一声让你倍感喜悦…

<Linux> 多线程

文章目录 线程线程互斥锁死锁 线程同步生产者消费者模型POSIX信号量基于环形队列的生产消费模型 线程池 线程 线程是进程内部可以独立运行的最小单位 进程是资源分配的基本单位,线程是调度器调度的基本单位 线程在进程的地址空间内运行 进程内的大部分资源线程是…

LeetCode-刷题记录-滑动窗口合集(本篇blog会持续更新哦~)

一、滑动窗口概述 滑动窗口(Sliding Window)是一种用于解决数组(或字符串)中子数组(或子串)问题的有效算法。 Sliding Window核心思想: 滑动窗口技术的基本思想是维护一个窗口(一般…

RPC远程过程调用--Thrift

RPC远程过程调用–Thrift 简介 Thrift是一个由Facebook开发的轻量级、跨语言的远程服务调用框架,后进入Apache开源项目。支持通过自身接口定义语言IDL定义RPC接口和数据类型,然后通过编译器生成不同语言代码,用于构建抽象易用、可互操作的R…

JAVA+SSM+VUE《教学视频点播系统》

1管理员登录 管理员登录,通过填写用户名、密码、角色等信息,输入完成后选择登录即可进入视频点播系统,如图1所示。 图1管理员登录界面图 2管理员功能实现 2.1 修改密码 管理员对修改密码进行填写原密码、新密码、确认密码并进行删除、修改…

【Python机器学习】算法链与管道——在网格搜索中使用管道

在网格搜索中使用管道的工作原理与使用任何其他估计器都相同。 我们定义一个需要搜索的参数网络,并利用管道和参数网格构建一个GridSearchCV。不过在指定参数网格时存在一处细微的变化。我们需要为每个参数指定它在管道中所属的步骤。我们要调节的两个参数C和gamma…

监控与安全服务

kali 系统 nmap扫描 网段的扫描 使用脚本扫描 使用john破解密码 哈希算法是一种单向加密的算法,也就是将原始数据生成一串“乱码”只能通过原始数据,生成这串“乱码”,但是不能通过“乱码”回推出原始数据相同的原始数据,生成的乱…

红酒与时尚秀场:品味潮流新风尚

在时尚与品味的交汇点上,红酒总是以其不同的方式,为每一次的时尚盛宴增添一抹诱人的色彩。当红酒遇上时尚秀场,不仅是一场视觉的盛宴,更是一次心灵的触动。今天,就让我们一起走进红酒与时尚秀场的世界,感受…

Elasticsearch:结合稀疏、密集和地理字段

作者:来自 Elastic Madhusudhan Konda 如何以自定义方式组合多个稀疏、密集和地理字段 Elasticsearch 是一款强大的工具,可用于近乎实时地搜索和分析数据。作为开发人员,我们经常会遇到包含各种不同字段的数据集。有些字段是必填字段&#x…