首页 > 数据库 >说说MySQL中的存储引擎

说说MySQL中的存储引擎

时间:2024-11-12 16:17:05浏览次数:3  
标签:存储 缓存 书架 引擎 InnoDB MySQL 数据

目录

MySQL体系结构

存储引擎

简介

不同存储引擎的特点

InnoDB

MyISAM

Memory

存储引擎的选择

MySQL体系结构

  • 连接层
    • 这是最上面的一层,是一些客户端和连接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案,服务器也会对安全连接的用户进行一些权限校验的操作
    • 解释:这一层就像是一个 “门卫” 或者 “接待处”。当你(客户端)想要访问 MySQL 数据库时,连接层先接待你。它会检查你是不是被允许访问这个数据库,就像检查你有没有进入大楼的权限一样。只有通过了身份验证(授权认证),你才能进入下一层去获取数据库里面的信息。例如,当你用数据库管理工具或者编程语言去连接 MySQL 数据库时,你需要提供用户名和密码,连接层就会验证这些信息,确定你是不是合法用户。
    • 例子:假设你要进入一个高级会员制的图书馆(数据库),在门口(连接层),工作人员会检查你的会员卡(用户名和密码),看看你是不是会员,有没有借阅图书(访问数据)的权限。如果你的信息正确,才会让你进去找书。
  • 服务层
    • 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的优化和分析,部分内置函数的执行。所有跨存引擎的功能也在这一层完成,比如过程、函数等
    • 解释:服务层就像是一个 “图书馆管理员”,它知道图书馆(数据库)里大部分的事情。当你(客户端)提出查找某本书(执行 SQL 查询)的请求后,它会先看看自己的 “小本子”(缓存),如果之前有人找过同样的书(相同的查询),它可以直接告诉你位置(从缓存中返回结果)。如果没有,它会根据图书馆的分类规则(SQL 优化和分析)来确定最快找到这本书的方法。而且它还能提供一些其他服务,比如帮你计算书本的总价(执行部分内置函数),或者执行一些图书馆的规定流程(过程、函数等跨存储引擎的功能)。
    • 例子:你想找一本特定主题的书,管理员先看了一下记忆(缓存),如果没有相关信息,就会根据图书馆的布局(SQL 优化),比如先找哪个区域,再找哪个书架,来快速找到你要的书。同时,如果图书馆有计算借书逾期费用的规定(内置函数),管理员也可以帮你计算。
  • 引擎层
    • 存储引擎真正的负责对mysql中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,可以根据需要来选取合适的存储引擎。
    • 解释:这一层就像是图书馆里不同类型的书架。不同的书架(存储引擎)有不同的特点。有些书架(存储引擎)可能适合放小说,按照作者名字排序(一种存储和提取数据的方式);有些书架可能适合放工具书,按照主题分类(另一种存储和提取数据的方式)。服务器就像是知道所有书架位置和特点的人,通过一定的规则(API)来和这些书架打交道,找到你想要的书(数据)。
    • 例子:如果图书馆有普通木质书架和电子书架。木质书架适合存放古籍,按年代摆放;电子书架适合存放电子资料,按文件类型存放。当管理员(服务器)收到找一本书的请求后,会根据书的类型(数据特点)决定去哪个书架(存储引擎)找,并且知道怎么从这个书架上找到书(通过存储引擎的 API 进行存储和提取)
  • 存储层
    • 主要将数据存储在文件系统上,并完成与存储引擎的交互。
    • 解释:存储层是真正放书(数据)的地方,就像是书架所在的房间(文件系统)。它和书架(存储引擎)紧密配合,书(数据)从书架(存储引擎)来,最后也存到这个房间(文件系统)里。存储引擎从这里获取要存储的数据,也把提取的数据返回给上一层。
    • 例子:图书馆的房间(存储层)里有很多书架(存储引擎),这些书架用来存放图书(数据)。当新书进来(数据要存储),会根据书架(存储引擎)的规则存放到房间里相应的位置;当要找书(提取数据)时,也是从房间里的书架上获取。

存储引擎

简介

  • 存储引擎就是建立索引、更新查找数据、存储数据等技术的实现方式。它是基于表的,而不是基于库的,所有也被称之为表类型
  • 查询建表的语句可以看到具体的存储引擎类型,下图中的engine就是指存储引擎,默认是InnoDB类型的,也可以在创建表的时候在后面直接加上指定的存储引擎来达到想要的效果

  • 也可以查看数据库的引擎支持哪些,如下方照片,engine是所支持的存储引有哪些,support表示是否支持,default表示默认,在早期的数据库版本是以MyISAM来设置为默认的,后面才渐渐改为了InnoDB,因为其支持事务回滚,就被设置为默认的,便于数据库的数据恢复和修复,增强了可靠性,下面会对不同存储引擎的特点来进行分析

不同存储引擎的特点

  • InnoDB
    • InnoDB是指一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5版本后,InnoDB是默认的MySQL存储引擎       
    • 特点
      • 支持事务:DML 操作遵循 ACID 模型,这在处理复杂业务逻辑时非常关键。例如,在银行转账系统中,从一个账户扣款并在另一个账户入账这两个操作必须作为一个完整的事务,要么都成功,要么都失败,InnoDB 能够保证这种数据的完整性。
      • 采用行级锁:大大提高了并发访问量。比如在一个电商系统中,多个用户同时购买不同商品(涉及不同行数据的操作),InnoDB 可以允许这些操作同时进行,而不会相互阻塞。
      • 支持外键约束:能保证数据的完整性和正确性。如在一个订单管理系统中,订单表和商品表、用户表之间可能存在外键关系,InnoDB 可以确保这些关系的一致性
    • 文件:每张InnoDB引擎存储的表都会生成对应的xxx.idb文件,其中xxx是指表名,这个文件存储了这个表的表结构、数据和索引
  • MyISAM
    • MySQL早起的存储引擎
    • 特点
      • 不支持事务和外键约束:这使得它在处理简单的数据存储和查询场景时较为轻便,但不适用于对数据一致性要求高的复杂业务场景。
      • 采用表级锁:直接锁住整个表,不支持行级锁。这意味着当一个用户对表进行写操作时,其他用户的读写操作都需要等待。不过在以读操作为主、写操作很少的应用中,这种锁机制对性能的影响可能较小。例如,在一个新闻资讯网站中,文章内容表主要是被用户查询阅读,偶尔有管理员更新文章,这种情况下 MyISAM 的表级锁对整体性能影响不大。而且它的访问速度快,适用于对查询性能要求较高的场景。
    • 文件:采用MyISAM存储的表,会生成三个对应的文件,xxx.MYD,xxx.MYI,xxx.sdi这三种,分别表示存储表的数据、存储表的索引和存储表的结构信息
  • Memory
    • 存放的数据存储在内存中,这导致受到硬件问题或者断电问题的时候会出现数据丢失,只能将这些表作为临时表或者缓存使用
    • 特点
      • 内存存放:数据存储在内存中,使得访问速度极快。例如,在一个缓存用户登录信息的系统中,当用户登录时,可以快速从内存中获取用户信息,提高用户体验。
      • 支持 hash 索引:这进一步提高了数据查询的速度。
    • 文件:只有一种 xxx.sdi 文件用于存储表结构。不过,由于数据存储在内存中,受到硬件问题(如内存故障)或者断电问题时会出现数据丢失情况,所以只能将这些表作为临时表或者缓存使用,并且对表的大小有限制,太大的表无法完全缓存在内存中,也无法保障数据的安全性

存储引擎的选择

  • InnoDB
    • 作为 MySQL 的默认存储引擎,InnoDB 在很多场景中表现出色。当应用对事务的完整性有较高要求时,InnoDB 是首选。例如,在金融交易系统、企业资源规划(ERP)系统等复杂业务应用中,数据的准确性和一致性至关重要。而且在并发条件下,如果需要保证数据的一致性,特别是数据操作除了插入和查询之外,还包含大量的更新、删除操作,InnoDB 存储引擎是非常合适的选择。它通过支持事务、行级锁和外键约束等特性,能够有效地处理这些复杂的业务场景,避免数据冲突和不一致问题。
  • MyISAM
    • 如果应用是以读操作和插入操作为主,更新和删除操作很少,并且对事务的完整性、并发性要求不是很高,那么 MyISAM 是一个不错的选择。比如一些内容管理系统(CMS),主要功能是展示文章、图片等内容(读操作),管理员偶尔添加新内容(插入操作),这种场景下 MyISAM 的快速访问速度优势能够得到充分发挥,同时由于其简单的锁机制,在这种低并发写操作的环境中也不会产生明显的性能问题。
  • Memory
    • MEMORY 存储引擎适用于对访问速度要求极高的临时数据存储场景。由于所有数据保存在内存中,它的访问速度比其他存储引擎快很多。通常用于临时表及缓存,比如在数据库查询过程中的临时结果集存储,或者缓存一些经常访问但数据量不大的数据。然而,MEMORY 也有明显的缺陷,它对表的大小有限制,太大的表无法完全缓存在内存中,而且由于数据存储在易失性的内存中,一旦出现硬件故障或断电,数据就会丢失,无法保障数据的安全性。因此,在使用 MEMORY 存储引擎时,需要充分考虑数据的重要性和持久性要求,以及硬件环境的稳定性。同时,需要设计合适的数据备份和恢复策略,以应对可能出现的数据丢失情况。

标签:存储,缓存,书架,引擎,InnoDB,MySQL,数据
From: https://blog.csdn.net/qq_63061686/article/details/143715185

相关文章

  • mysql热迁移
    0.背景XtraBackup优势在线热备:支持在不停止数据库的情况下进行InnoDB和XtraDB的热备份,适合高可用环境。增量备份:支持增量备份,能够显著减少备份时间和存储空间需求。流压缩:可以在备份过程中进行流压缩,减少传输数据量,提高传输效率。主从同步:XtraBackup可以更方便地创建......
  • Spring Boot编程训练系统:数据管理与存储
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了编程训练系统的开发全过程。通过分析编程训练系统管理的不足,创建了一个计算机管理编程训练系统的方案。文章介绍了编程训练系统的系统分析部分,包括可行性分析等,系统设计部......
  • Docker使用docker-compose一键部署nacos、Mysql、redis
    下面是一个简单的例子,展示如何通过DockerCompose文件部署Nacos、MySQL和Redis。请确保您的机器上已经安装了Docker和DockerCompose。1,准备好mysql、redis、nacos镜像sudodockerpullmysql:8&&sudodockerpullredis:7.2&&sudodockerpullnacos/nacos-server:v2.4.......
  • mysql 的安装
    oimysql,是数据库一、yum安装1、下载MySQL源和安装包wget-i-chttp://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum-yinstallmysql57-community-release-el7-10.noarch.rpm2、为避免出现源"MySQL5.7CommunityServer"的GPG密钥已......
  • 火山引擎数据飞轮模式下的线上营销:内容产出更智能、人群触达更精准
    今年年中,中欧国际工商学院等机构联合发布《2023年中国首席营销官(CMO)调查报告》(以下简称“报告”)。报告基于167家企业营销决策者调研,指出在激烈的市场竞争下,企业倾向于加强“拓新”策略,包括开拓新市场和开拓新产品或服务来获得可持续增长。聚焦到营销层面,被调研者所属企业,除B......
  • 多个应用组件共享同一个ArkTS引擎实现
    在当今的移动开发领域,随着技术的不断进步,开发者们对于应用性能的要求也在不断提高。特别是在多组件协作的应用场景中,如何高效地管理和利用资源成为了一个重要课题。HarmonyOS作为华为推出的新一代操作系统,其独特的分布式架构为解决这一问题提供了新的思路。本文将深入探讨在Ha......
  • ISUP协议视频平台EasyCVR视频设备轨迹回放平台视频监控存储知识介绍:常见的几种磁盘阵
    在现代信息技术快速发展的今天,数据存储和视频监控技术的重要性日益凸显。RAID技术作为数据存储领域的一项关键技术,以及EasyCVR视频融合云平台作为视频监控管理的核心工具,它们的发展和应用对于保障数据安全、提高监控效率具有重要意义。本文将详细介绍RAID技术中的几种主流级别,以及......
  • 聊聊我们那些年用过的表达式引擎组件
    前言我们在设计一些表单或者流程引擎时,可能我们会设计各种各样的表达式或者规则,我们通过各种表达式或者规则来实现我们的业务流转。今天就来盘点一下我们经常会使用到的表达式引擎常用表达式引擎1、springel官方文档https://docs.spring.io/spring-framework/reference/co......
  • LangChain 向量存储与检索技术详解
    引言在RAG(检索增强生成)应用中,向量存储和检索是连接文档处理和LLM生成的关键环节。本文将深入探讨LangChain中的向量存储和检索技术,包括常用的向量数据库、嵌入模型以及高效的检索策略。向量存储基础向量存储是将文本转换为高维向量并进行存储和检索的技术。在RAG应用中,......
  • 算力运力解决方案:算网融合,打造未来科技新引擎
    算力运力解决方案是一个融合算力、算商、算法、数据以及应用为一体的综合性算网生态,旨在提供广泛辐射不同行业应用的算网服务,并为客户提供多样化的算力产品套餐选择。这一解决方案不仅满足了多样化的算力需求,还通过高效的运算和处理能力,支持各种复杂的数据分析和应用需求。产品......