当前位置: 首页 > 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引起的…...

Linux Framebuffer驱动框架、接口实现和使用

Linux 驱动-Frame Buffer代码分析 Framebufferfbmem.c部分代码分析初始化 Framebuffer 对于驱动开发人员来说&#xff0c;其实只需要针对具体的硬件平台SOC和具体的LCD&#xff08;通过焊接连接到该SOC引脚上的LCD&#xff09;来进行第一部分的寄存器编程&#xff08;红色部分&…...

AI:54-基于深度学习的树木种类识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...

MVCC详解

什么是MVCC&#xff1f; MVCC&#xff0c;即Multi-Version Concurrency Control &#xff08;多版本并发控制&#xff09;。它是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff0c;在编程语言中实现事务内存。 通俗的讲&am…...

[pytorch]手动构建一个神经网络并且训练

0.写在前面 上一篇博客全都是说明类型的,实际代码能不能跑起来两说,谨慎观看.本文中直接使用fashions数据实现softmax的简单训练并且完成结果输出.实现一个预测并且观测到输出结果. 并且更重要的是,在这里对一些训练的过程,数据的形式,以及我们在softmax中主要做什么以及怎么…...

马斯克的X.AI平台即将发布的大模型Grōk AI有哪些能力?新消息泄露该模型支持2.5万个字符上下文!

本文原文来自DataLearnerAI官方网站&#xff1a; 马斯克的X.AI平台即将发布的大模型Grōk AI有哪些能力&#xff1f;新消息泄露该模型支持2.5万个字符上下文&#xff01; | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051699114783001 马斯克透露xAI…...

spring-session-core排除某些接口不设置session

这里写自定义目录标题 需求实现 需求 今天先写一下如何实现&#xff0c;之后再更新一篇如何发现这个问题的。 我们的项目使用了spring-session-core来存储共享session&#xff0c;存在redis中&#xff0c;然后在cookie中是设置了key为SESSION的session。但是我们有一些开放接口…...

【ElasticSearch系列-05】SpringBoot整合elasticSearch

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…...

C/S架构学习之广播

广播&#xff1a;一台主机可以将一个数据包同时发送给同一局域网内所有主机&#xff1b;在IPV4中&#xff0c;广播地址是本网段最大的IP地址或者“255.255.255.255”&#xff1b;注意&#xff1a;广播本质上是UDP通信技术&#xff1b;只有用户数据报套接字才能使用广播的方式&a…...

帧间快速算法论文阅读

Low complexity inter coding scheme for Versatile Video Coding (VVC) 通过分析相邻CU的编码区域&#xff0c;预测当前CU的编码区域&#xff0c;以终止不必要的分割模式。 &#x1d436;&#x1d448;1、&#x1d436;&#x1d448;2、&#x1d436;&#x1d448;3、&#x…...

mooc单元测验第一单元

TCP和OSI参考模型对比 OSI参考模型与TCP/IP参考模型(计算机网络)_osi模型 tcpip模型_李桥桉的博客-CSDN博客 会话层和物理层...