当前位置: 首页 > news >正文

数据库 存储引擎

存储引擎概念

在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的机制,和存储文件的格式

相关文章:

数据库 存储引擎

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

操作系统复习(2)进程管理

一、概述 1.1程序的顺序执行 一个具有独立功能的程序独占CPU运行,直至得到最终结果的过程称为程序的顺序执行。 程序的并发执行所表现出的特性说明两个问题 ⑴ 程序和计算机执行程序的活动不再一一对应 ⑵ 并发程序间存在相互制约关系(要求共享信息&…...

通过51单片机控制28byj48步进电机按角度正反转旋转

一、前言 本项目基于STC89C52单片机,通过控制28BYJ-48步进电机实现按角度正反转旋转的功能。28BYJ-48步进电机是一种常用的电机,精准定位和高扭矩输出,适用于许多小型的自动化系统和机械装置。 在这个项目中,使用STC89C52单片机…...

二十三种设计模式全面解析-装饰器模式的高级应用:打造灵活可扩展的通知系统

在现代软件开发中,通知系统是一个广泛应用的功能,用于实时向用户发送各种类型的通知,如短信、微信、邮件以及系统通知。然而,通知系统的需求通常是多变且动态的,因此需要一种灵活可扩展的设计模式来满足不同类型的通知…...

使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令

背景 最近面对一个庞大的项目,但是只需要修改某个模块,每次都手搓命令太麻烦了,于是就想着能不能写个脚本来辅助处理这些事情。 解决方案 定制化一键 ESLint,执行文件下载地址: https://github.com/mazeyqian/go-g…...

C++ static与类

C static与类 1. 不和对象直接相关的数据,声明为static2. static成员函数没有this指针3.在类的外部定义static成员变量4.static与类的一些小应用 1. 不和对象直接相关的数据,声明为static 想象有一个银行账户的类,每个人都可以开银行账户。存…...

数据结构之堆的实现(图解➕源代码)

一、堆的定义 首先明确堆是一种特殊的完全二叉树,分为大根堆和小根堆,接下来我们就分别介绍一下这两种不同的堆。 1.1 大根堆(简称:大堆) 在大堆里面:父节点的值 ≥ 孩子节点的值 我们的兄弟节点没有限制&…...

持续集成部署-k8s-配置与存储-配置管理:ConfigMap

持续集成部署-k8s-配置与存储-配置管理:ConfigMap 1. ConfigMap 简介2. 创建 ConfigMap3. ConfigMap 环境变量与配置文件加载3.1 环境变量的使用3.2 配置文件加载1. ConfigMap 简介 在Kubernetes (K8s) 中,ConfigMap是一种用于存储配置数据的API对象。它用于将应用程序的配置…...

【漏洞复现】Apache_HTTP_2.4.50_路径穿越漏洞(CVE-2021-42013)

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证方式一 curl方式二 bp抓捕 1.5、修复建议 说明内容漏洞编号CVE-2021-42013漏洞名称…...

【KVM】软件虚拟化和硬件虚拟化类型

前言 大家好,我是秋意零。 今天介绍的内容是虚拟化技术以及软件虚拟化和硬件虚拟化。 👿 简介 🏠 个人主页: 秋意零🔥 账号:全平台同名, 秋意零 账号创作者、 云社区 创建者🧑 个…...

ES-初识ES

文章目录 介绍ElasticSearchElasticSearch的主要功能ElasticSearch的主要特性ElasticSearch的家族成员LogStashKibanaBeats ELK(ElasticSearch LogStash Kibana)的应用场景与数据库集成指标采集/日志分析 安装和配置ElasticSearch一、安装1、下载ES安装…...

foreach、for in和for of的区别?

foreach,for...in和for...of是三种不同的循环结构,它们在JavaScript中用来遍历数组或对象的属性。它们有一些重要的区别,以及各自的优点和适用情况。 1.foreach:这是最普通的循环结构,它遍历数组或对象的每一个元素或属…...

CVE-2023-21839 weblogic rce漏洞复现

文章目录 一、漏洞影响版本二、漏洞验证三、启动反弹shell监听切换路径到jdk1.8 四、启动ldap服务五、使用CVE-2023-21839工具来进行攻击测试六、反弹shell 一、漏洞影响版本 CVE-2023-21839是Weblogic产品中的远程代码执行漏洞,由于Weblogic IIOP/T3协议存在缺陷&…...

MQTT java代码演示

以下是使用Eclipse Paho客户端库的Java代码示例,用于连接到MQTT代理并发布和订阅消息。 首先,需要添加Maven依赖项到项目中: <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId>…...

Windows环境下使用VLC获取到大疆无人机的RTMP直播推流

1.环境准备 1.安装nginx 1.7.11.3 Gryphon 下载地址&#xff1a;http://nginx-win.ecsds.eu/download/ 下载nginx 1.7.11.3 Gryphon.zip&#xff0c;解压后修改文件夹名称为nginx-1.7.11.3-Gryphon&#xff1b; 2.安装nginx-rtmp-module 下载地址&#xff1a;GitHub - arut…...

【SpringBoot笔记42】SpringBoot集成knife4j生成接口文档

这篇文章,主要介绍SpringBoot如何集成knife4j及生成接口文档。 目录 一、knife4j接口文档生成器 1.1、接口文档工具介绍 1.2、引入依赖...

Go类型嵌入介绍和使用类型嵌入模拟实现“继承”

Go类型嵌入介绍和使用类型嵌入模拟实现“继承” 文章目录 Go类型嵌入介绍和使用类型嵌入模拟实现“继承”一、独立的自定义类型二、继承三、类型嵌入3.1 什么是类型嵌入 四、接口类型的类型嵌入4.1 接口类型的类型嵌入介绍4.2 一个小案例 五、结构体类型的类型嵌入5.1 结构体类…...

【深度学习】pytorch——实现CIFAR-10数据集的分类

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 往期文章&#xff1a; 【深度学习】pytorch——快速入门 CIFAR-10分类 CIFAR-10简介CIFAR-10数据集分类实现步骤一、数据加载及预处理实现数据加载及预处理归一化的理解访问数据集Dataset对象Dataloader对象 二、…...

Datawhale-AIGC实践

Datawhale-AIGC实践 部署ChatGLM3-6B平台 clone 项目&#xff0c;配置环境 git clone https://github.com/THUDM/ChatGLM3.git cd ChatGLM3 pip install -r requirement.txt修改web_demo.py, web_demo2.py 设置加载模型的路径修改启动代码: demo.queue().launch(shareFalse…...

C++对象模型

思考&#xff1a;对于实现平面一个点的参数化。C的class封装看起来比C的struct更加的复杂&#xff0c;是否意味着产生更多的开销呢&#xff1f; 实际上并没有&#xff0c;类的封装不会产生额外的开销&#xff0c;其实&#xff0c;C中在布局以及存取上的额外开销是virtual引起的…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...