数据库 存储引擎

存储引擎概念

在mysql当中数据库用不同的技术存储在文件中,每一种技术都是使用不同的存储引擎机制,索引技巧,锁定水平,以及最终提供的不同的功能和能力,这些就是我们说的存储引擎

主要功能

1mysql将数据存储在文件系统中的一种方式和格式
2存储引擎负责执行实际的数据I/O操作
3存储引擎介于数据和文件系统之间,数据会先保存到存储引擎,再按照存储引擎的格式保存到文件系统

Mysql的存储引擎分类

INNODB5.5版本之后的mysql默认存储引擎,也叫事务型速记引擎(写入性能较好),支持ACID(事务的四大特性),支持锁行,锁表。
MYISAM5.5之前的默认存储引擎,插入数据的性能较高,查询速度很优秀,但是不支持事务,也是他被淘汰的原因
Memor所有数据都保存在内存的存储引擎,插入数据,更新数据,查询数据,速度很快,但是占用内存空间比较大,会占用和数据量成正比的内存空间,而且mysql一旦重启,内容很快就会丢失
Csv由逗号分割数据的存储引擎,他会在数据库子目录里为每一个数据表创建一个  .CSV文件,他就是一种普通文本文件,每个数据占用一个文本行,但csv不支持索引
Archive非常适合存储大量的独立的,而且是历史数据的引擎,因为他不需要经常读取,插入的速度很快,只是查询的效率比较低
Blackhole黑洞引擎,写入的任何数据都会消失

MYISAM和INNODB做个分析和对比

MYISAM

不支持事务,也不支持外键,只支持全文索引,数据文件和索引文件是分开的,访问速度快,适用于查询和插入为主的应用

.frm :  存储的表结构

.MYD:存储的数据文件

.MYI:索引文件

MYISAM的特点

1表级锁定,更新数据时,整个都将锁定
2数据库在读写过程中是相互阻塞的(即你不能对一个表又读又写)

支持的存储格式

静态表固定长度表,静态表时mysisam的默认存储格式,静态表中字段都是非可变字段,因此每个记录都是固定长度
优点数据存储快,方便缓存,有了故障容易恢复
缺点占用空间比较多
动态表可以包含可变字段,记录的长度是不固定的
优点占用空间比较少
缺点频繁更新数据,删除记录,会产生碎片,需要定期清理(myisamchk -r  :  清除命令),一旦出现故障恢复比较麻烦。
压缩表myisamchk 工具创建的,占据的空间非常小,每条记录都是单独压缩的

重点 INNODB

1支持事务,支持4个隔离级别,5.5之后是mysql的默认存储引擎
2读写阻塞和隔离级别相关
3支持高效的缓存索引以及缓存数据
4表于主键以簇方式存储BTREE
5支持外键约束,5.5之后INNODB也可以支持全文索引
6对硬件资源的要求比较高
7支持行锁,也可以支持表锁定(全表扫描)

有几个注意点

1如果使用like模糊查询,会进行全表扫描,并且送定整个表
2对没有创建索引的字段进行增,删,改,也会进行全表扫描,锁定整个表,查询可以
3使用索引进行查询,则是行级锁定

INNODB的特点

1不保存表的行数,统计表的行数,会扫描一边整个表来计算有多少行
2自增长索引,INNODB中必须包含只有该字段的索引
3Delete 定空表,它是一行一行删,速度比较 truncate

使用场景

1业务需要事物的支撑
2论坛,微博,对数据一致性比较高的场景
3访问量和并发量比较高的场景,INNODB支持缓存,可以减少后台服务器的压力

三个文件

1表名.frm         表结构文件   
2表名.ibd          既是数据文件,也是索引文件
3db.opt             表的属性文件

Innodb行锁和索引的关系,以及表锁,排他锁,死锁

行锁

如果列名字段是一个普通索引,会锁住索引行,对应的主键一并锁住,实际上就是行锁

如果使用的id是主键,innodb对主键使用聚簇索引,锁定整行的记录

锁定表要对一个非索引键进行操作,当一个事务对非索引列进行操作,因为要全表扫描过滤,所有整张表都会被锁定,另一个事务只能查
排他锁一个事务在操作,另一个事务的操作无法执行,只能查,排他锁只能加一个
死锁

事务之间相互等待对方资源,最后形成一个环路造成的,使用for update   排他锁 可以形成死锁

发生死锁的时候,数据库会自动选择一个事务作为受害者,然后会先解锁死锁,再回滚事务

mysql的默认死锁机制,会中选择一个事务作为死锁的牺牲品,直接终止其中一个事务,但是不会自动回滚。

  1. 存储引擎只能innodb
  2. Mysql默认隔离级别即可

如何尽可能避免死锁

1业务的逻辑要合理,以固定的顺序访问表和行
2如果食物的类型比较复杂,要进行拆分,在业务允许的情况下,可以把大事务拆小,分次执行
3在同一事务中,尽可能一次性锁定所有需要的资源,可以减少死锁的概率
4隔离级别,如果要避免死锁,可以用read  commit  可以避免索引
5添加合理索引,可以减少死锁的概率

悲观锁

乐观锁:不会有任何提示,只是数据不能写入,数据提交更新时,他会进行校验,如发生冲突,最多也就数据不生效而已,没有其他报错,或卡顿卡停现象

一般来说,我们会在表中配置一个version字段,可以自增,通过自增校验来查看数据是否冲突

也可用时间戳方式

索引和行锁之间的关系

非索引的锁表以及死锁

排他锁(悲观锁)

Innodb的机制,和存储文件的格式

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

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

相关文章

C++ 单例模式

C 单例模式跟Java中的单例模式没什么区别 什么是单例? 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 什么时候使用单例 1个类里面的方法要在很多地方都使用到的时候建议使用单例。 单例的3个步骤,也是判断是否是单例…

Python爬取读书网的图片链接和书名并保存在数据库中

一个比较基础且常见的爬虫,写下来用于记录和巩固相关知识。 一、前置条件 本项目采用scrapy框架进行爬取,需要提前安装 pip install scrapy# 国内镜像 pip install scrapy -i https://pypi.douban.com/simple 由于需要保存数据到数据库,因…

安达发|APS生产排程解决五金制造企业的需求

在五金制造行业中,生产排程一直是一个非常重要的环节。然而,由于五金行业的特点和痛点,传统的生产排程方法往往难以满足企业的需求。本文将针对五金行业的痛点,探讨如何利用APS生产排程解决这些问题。 首先,我们需要了…

JAVA毕业设计109—基于Java+Springboot+Vue的宿舍管理系统(源码+数据库)

基于JavaSpringbootVue的宿舍管理系统(源码数据库)109 一、系统介绍 本系统前后端分离 本系统分为学生、宿管、超级管理员三种角色 1、用户: 登录、我的宿舍、申请调宿、报修申请、水电费管理、卫生检查、个人信息修改。 2、宿管: 登录、用户管理…

为机器学习算法准备数据(Machine Learning 研习之八)

本文还是同样建立在前两篇的基础之上的! 属性组合实验 希望前面的部分能让您了解探索数据并获得洞察力的几种方法。您发现了一些数据怪癖,您可能希望在将数据提供给机器学习算法之前对其进行清理,并且发现了属性之间有趣的相关性&#xff0c…

图像配准之二:基于互信息

图像配准之二:基于互信息 1.互信息定义2.基于互信息的图像配准2.1 模板图片 I 1 I_1 I

谈一谈SQLite、MySQL、PostgreSQL三大数据库

每一份付出,必将有一份收货,就像这个小小的果实,时间到了,也就会开花结果… 三大数据库概述 SQLite、MySQL 和 PostgreSQL 都是流行的关系型数据库管理系统(RDBMS),但它们在功能、适用场景和性…

maven配置

一、下载maven 下载地址 https://maven.apache.org/download.cgi二、安装maven tar xf apache-maven-3.9.5-bin.tar.gz mv apache-maven-3.9.5 /usr/local/maven ln -s /usr/local/maven/bin/mvn /usr/local/bin/安装成功 [rootp0-jiantou-scyyglpt-web01 ~]# mvn -v Apache…

Leetcode刷题详解——全排列

1. 题目链接:46. 全排列 2. 题目描述: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],…

pcigo图床插件的简单开发

1.前言: 如果想写一个图床并且投入使用,那么,接入picgo一定是一个不错的选择。picgo有着windows,mac,linux等多个客户端版本。实用且方便。 2. 开发的准备: 2.0. 需要安装一个node node这里我就不详细说…

网络攻击的威胁仍在上升、企业该如何解决

近十年来,网络攻击的频率和规模不断增加,对网站和在线资产构成了严重威胁。解决网站被攻击的问题需要采用多层次的安全策略,其中CDN(内容分发网络)的防护角度发挥了关键作用。本文将通过通俗易懂的方式从CDN的角度分析…

3.线性神经网络-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 线性回归基础优化算法一、线性回归1、买房案例2、买房模型简化3、线性模型4、神经网络5、损失函数6、训练数据7、参数学习8、显示解9、总结 二、 基础优化算法1、梯度下降2、学习率3、小批量随机梯度下降4、批量大小5、…

ADAS数据平台实践总结

随着汽车智能化发展,adas数据分析变得越来越重要,此处根据个人认知对adas数据平台进行分析。 概述 adas数据一般来自于汽车厂商发布新车的前的 实际道路测试(路试),相对于其他数据,具有如下特征&#xff1…

jetsonTX2 nx配置yolov5和D435I相机,完整步骤

转载一篇问题解决博客:问题解决 一、烧录系统 使用SDK烧录 二、安装archiconda3 JETSON TX2 NX的架构是aarch64,与win10,linxu不同,所以不能安装Anaconda,这里安装对应的archiconda。 1. 安装 wget https://github.com/Archiconda/build-tools/rel…

ACM MM 2023 | 清华、华为联合提出MISSRec:兴趣感知的多模态序列推荐预训练

©PaperWeekly 原创 作者 | 王锦鹏 单位 | 清华大学深圳国际研究生院 研究方向 | 多模态检索、推荐系统 序列推荐是一种主流的推荐范式,目的是从用户的历史行为中推测用户偏好,并为之推荐感兴趣的物品。现有的大部分模型都是基于 ID 和类目等信息做…

如何搭建低成本亚马逊aws云服务器

0. 环境 win10 火狐浏览器 1. 登录 https://aws.amazon.com/cn/ -> 登录 -> 根用户 -> ********, **** 如果未有,需要注册,去年我注册的,麻烦之处是需要添加信用卡。可以淘宝aws搜索商家帮忙处理。 2. 控制台 在控制台主页&…

华为政企数据中心网络交换机产品集

产品类型产品型号产品说明 核心/汇聚交换机CE8850-EI-B-B0BCloudEngine 8850-64CQ-EI 提供 64 x 100 GE QSFP28,CloudEngine 8800系列交换机是面向数据中心推出的新一代高性能、高密度、低时延灵活插卡以太网交换机,可以与华为CloudEngine系列数据中心…

Leetcode41缺失的第一个正数

思路:原地哈希表 长度为N的数组,没有出现过的正整数一定是1~N1中的一个。 此时会思考能不能用一个哈希表来保存出现过的1~N1的数,然后从 1 开始依次枚举正整数,并判断其是否在哈希表中 但是题目要求常数级别的空间,就不…

VB.NET—窗体引起的乌龙事件

目录 前言: 过程: 总结: 升华: 前言: 分享一个VB.NET遇到的一个问题,开始一直没有解决,这个问题阻碍了很长时间,成功的变成我路上的绊脚石,千方百计的想要绕过去,但事与愿违怎么也绕不过去,因为运行不了…

本地idea远程调试服务器程序

本文主要介绍idea本地调试远程服务器程序的方式。相信很多同行跟我一样,在最初接触公司项目的时候,遇到测试提出的缺陷,往往会在本地进行调试、替换jar包远程调试等方式,本地调试往往会导致数据和环境不一致的问题使得问题无法复现…