首页 > 数据库 >Mysql的Innodb引擎--一起学习吧之数据库

Mysql的Innodb引擎--一起学习吧之数据库

时间:2024-03-26 16:29:04浏览次数:28  
标签:事务 -- Mysql 并发 InnoDB MVCC Innodb 操作 数据

MySQL的InnoDB引擎是MySQL数据库管理系统中的一个重要的存储引擎,它通过提供事务支持、行级锁定、外键约束、MVCC、缓存、索引优化、数据恢复以及分区和表空间等功能,为数据库提供了高性能、高可靠性和高扩展性的解决方案。这使得InnoDB成为大多数MySQL应用的首选存储引擎。

一、关键特性介绍二

  1. 事务支持
    InnoDB引擎实现了ACID(原子性、一致性、隔离性和持久性)事务模型,确保了一系列操作要么完全执行,要么完全不执行,从而维护了数据的一致性和完整性。每个事务都有一个唯一的标识符(transaction ID),这有助于区分不同的事务,并保证事务的一致性和隔离性。

  2. 行级锁定
    InnoDB支持行级锁定,这意味着在并发环境中,当一个事务正在修改某一行数据时,其他事务仍然可以修改其他行,而不会被阻塞。这种锁定方式大大提高了数据库的并发性能,尤其是在高并发的应用场景中。

  3. 外键约束
    InnoDB支持外键约束,允许在表之间定义引用关系,确保数据的引用完整性和一致性。外键约束可以避免数据的重复或缺失,并且提供了级联操作和级联删除等功能,方便用户进行数据的维护和管理。

  4. 多版本并发控制(MVCC)
    MVCC是InnoDB实现高并发性能的关键技术之一。它允许不同的事务读取到数据的不同版本,从而避免了读操作和写操作之间的冲突,提高了系统的吞吐量和响应速度。

  5. 缓存
    InnoDB引擎使用缓存来加速查询操作。它不仅可以缓存索引,还可以缓存数据,从而减少了磁盘I/O操作,提高了查询效率。

  6. 索引优化
    InnoDB支持多种索引类型,如B-tree索引、哈希索引和全文索引等,可以根据实际需求选择合适的索引类型来提高查询效率。同时,它还提供了聚簇索引和非聚簇索引两种方式来组织数据和索引。

  7. 数据恢复
    InnoDB具有较好的数据恢复能力。在系统崩溃或误操作导致数据丢失时,InnoDB会尝试使用日志文件和回滚段来还原数据到之前的状态,保证数据的安全性和可靠性。

  8. 硬件要求
    由于InnoDB引擎提供了许多高级功能和特性,它对硬件的要求也相对较高。特别是在处理大量数据和高并发请求时,需要确保服务器具有足够的内存、CPU和存储资源。

  9. 分区和表空间
    InnoDB引擎支持分区和表空间功能,使得数据库可以更加灵活地管理和扩展。通过分区,可以将表的数据分散到多个物理存储位置,提高查询性能和管理效率。

二、 如何实现MVCC

MySQL的InnoDB存储引擎通过多版本并发控制(MVCC,Multi-Version Concurrency Control)来实现高并发性能,同时保持数据的一致性。MVCC允许多个事务同时读取同一份数据,而不会相互干扰,同时写操作也不会阻塞读操作。以下是InnoDB如何实现MVCC的简要概述:

  1. 版本号
    InnoDB为每一行数据都保存了两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。但并不是存储这些事件发生时的实际时间,而是存储这些事件发生时的系统版本号。每开始一个新的事务,系统版本号都会自动递增。
  2. Read View
    当事务进行读取操作时,会生成一个一致性读视图(Read View),这个视图决定了事务能看到哪些行的版本。即使另一个事务正在修改数据,只要该数据的版本号仍然小于该事务的Read View中的系统版本号,那么这个事务就仍然可以看到该行数据的旧版本。
  3. Undo日志
    当事务对数据进行修改时,InnoDB会保留修改前的数据版本在Undo日志中,以便其他事务可以读取旧版本的数据。如果事务回滚,那么InnoDB可以使用Undo日志中的数据来恢复原始数据。
  4. 非锁定读
    由于MVCC的存在,InnoDB的读操作(非锁定读,如SELECT操作)不需要等待写操作(如UPDATE或DELETE操作)完成。因此,读操作不会被写操作阻塞,从而提高了并发性能。
  5. 行级锁
    虽然MVCC主要关注读操作的并发性,但InnoDB也使用行级锁来确保写操作的原子性和一致性。当事务修改数据时,它会锁定被修改的行,以防止其他事务同时修改同一行数据。但读操作仍然可以读取该行的旧版本,而不会被写操作阻塞。

通过结合MVCC和行级锁,InnoDB能够在高并发环境下提供优秀的性能和一致性保证。但请注意,虽然MVCC提高了读操作的并发性,但它也增加了存储的开销(因为需要保存旧版本的数据)和可能增加某些写操作的复杂性(因为需要处理多个版本的数据)。

标签:事务,--,Mysql,并发,InnoDB,MVCC,Innodb,操作,数据
From: https://blog.csdn.net/wd90119/article/details/136869527

相关文章

  • 代码随想录算法训练营day34 | leetcode 1005. K 次取反后最大化的数组和、134. 加油站
    目录题目链接:1005.K次取反后最大化的数组和-简单题目链接:134.加油站-中等题目链接:135.分发糖果-困难题目链接:1005.K次取反后最大化的数组和-简单题目描述:给你一个整数数组nums和一个整数k,按以下方法修改该数组:选择某个下标i并将nums[i]替换为-nums[i]。重......
  • 安全架构概述
         ......
  • js使用正则从字符串中取出img标签
    要使用正则表达式从字符串中提取<img>标签,您可以使用以下代码:conststr=`Sometext<imgsrc="image.jpg"alt="Image">andmoretext<imgsrc="another.png"alt="Another">`;constregex=/<img[^>]*>/g;constimgTags......
  • LeetCodeHot100 数组 53. 最大子数组和 56. 合并区间 238. 除自身以外数组的乘积
    53.最大子数组和https://leetcode.cn/problems/maximum-subarray/description/?envType=study-plan-v2&envId=top-100-likedpublicintmaxSubArray(int[]nums){int[]dp=newint[nums.length];dp[0]=nums[0];for(inti=1;i<nums......
  • Vue学习笔记62--多组件共享数据
    多组件共享数据main.js//引入VueimportVuefrom'vue'//引入AppimportAppfrom'./App.vue'//配置提示Vue.config.productionTip=false//引入vuex、storeimportstorefrom'./store'//默认引入index.jsnewVue({render:h=>h(App),stor......
  • set集合
    概述存放不可重复的数据,存放数据是无序的基础使用st=set({})#空的set集合print(type(st))st={1,2,3,4,5,6,5,5}print(st)#输出的内容不会重复#去重lst=["张三","李四","张三","王五"]st=set(lst)print(st)#重复的添加不会累计st=set({})st......
  • [QLIE] 封包接口Hook
    [QLIE]封包接口Hook这个主题快拖了半个月,中间一直没空写,今天看着实在有点久了,必须写一写了,不然就快忘记了。起因前不久HappyLiveShowUp发了官中,但是又搞的奇奇怪怪的加密,很是无聊,稍微调了下和之前ハミダシクリエイティブ官中是挺像的。steam的dll是用Themida保护的,其......
  • css设置按钮心跳收缩后,按钮文字上下抖动,如何解决?
    如题,给一个按钮写一个css心跳收缩动画后,按钮中的文字会上下抖动,解决方案为   will-change:transform;代码如下://按键呼吸特效使用class="pulse"@keyframespulse{0%{transform:scale(1);}25%{transform:scale(0.95);}50%{transfo......
  • 【IT老齐070】@Transactional注意
    【IT老齐070】@Transactional注意场景原因经过对比排查,在支付数据原始数据报文中,由于X行上报数据中的存在备选日期(字符串类型)字段,上报后包含隐藏字符,导致生成任务时无法按预期解析,抛出ParseException导致批处理流程中断@Transactional注解的特性是方法执行成功自动......
  • 华为云obs的使用
    1.安装obsutilobsutil是一款用于访问管理华为云对象存储服务(ObjectStorageService,OBS)的命令行工具https://support.huaweicloud.com/utiltg-obs/obs_11_0003.html#下载obsutiltar包wgethttps://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_l......