02. 存储引擎

news2024/9/27 19:17:05

1. 前言

在校招或者社招面试中,无论你是 Java 后端、Cpp 后端、Python 后端,面试官都会详细地考察各种语法细节、框架知识,但是大多数候选人入职之后,都会体会到 "面试造火箭,上班拧螺丝"。面试时我们熟悉各种知识细节,入职后却发现大部分工作都是重复的 CRUD(Create - 增加,Retrieve - 查询,Update - 更新,Delete - 删除),这种现象其实很正常。后端开发的核心职责就是倒腾数据,面临的基础问题例如如何设计数据的存储结构并且选择合适的数据库进行存储,如何在各种限制条件下查询数据。当我们负责的系统非常庞大之后,还会面临如何解决分布式系统的数据一致性这类更复杂的问题。

总结来说,操作数据库是后端程序员的必备技能。数据库按照存储数据结构的方式,可以分为关系型数据库以及非关系型数据库。关系型数据库中数据都是以二维表的形式存储,最常用的数据库有 Oracle、MySQL,非关系型数据库中数据都是以结构化的形式存储,最常用的数据库有 Redis、MongoDB、Hbase 等。目前互联网一二线大厂的校招要求,MySQL 基本是必备技能,非关系性数据库例如 Redis 这类不是必考内容,当然掌握了会是锦上添花。

本小节中会介绍关于 MySQL 常见高频面试题,以及核心回答思路解析。

2. MyISAM 和 InnoDB

面试官提问: 介绍下 InnoDB 和 MyISAM 存储引擎的区别,以及具体的应用场景?

题目解析:

首先要明确存储引擎的定义:MySQL 提供不同的技术存储数据,这些技术使用不同的数据存储机制、索引建立方式、锁方式来完成数据的构建,这些技术统称为存储引擎。

MySQL Client 终端输入 show engines 可查看支持的存储引擎类型。

如图可见 MySQL 至少支持 9 种存储引擎,而面试中最受关注的是 InnoDB 和 MyISAM 存储引擎,一般的面试场景是这样的:

在上图的实验结果中,我们会发现在 MySQL 的所有存储引擎中,只有 InnoDB 支持 Transaction(事务)、XA(分布式事务),其他引擎均不支持,关于事务的支持能力是需要强调的点。关于两种引擎之间的区别,可以按下表进行分点阐述。

InnoDBMyISAM
事务支持,强调的是保持数据一致性的高级功能不支持,强调的是性能,查询速度比 InnoDB 快
外键支持不支持
索引使用聚集索引,索引文件和数据文件绑定使用非聚集索引,索引文件和数据文件分开存储,索引中保存的是数据文件的指针
支持表级锁、行级锁;
行级锁粒度小,处理并发的能力更强
支持表级锁,用户在执行 insert、update、select、delete 时都会给表自动加锁,效率低
主键表必须有唯一索引(例如用户规定 id 作为主键),没有的话会用默认隐藏列 row_id 作为唯一索引没有要求
存储文件在操作系统中的存储文件:
.frm:表定义文件
.ibd:数据文件
在操作系统中的存储文件:
.frm:表定义文件
.myd:数据文件
.myi:索引文件

在阐述完两种存储引擎的区别之后,再根据两者的特点,枚举一些使用场景:

  1. MyISAM 对于不支持事务并且存在大量 SELECT 的读场景比较合适;

  2. 如果业务代码中要支持事务,必须选择 InnoDB 存储引擎;

  3. 如果业务代码中要支持外键,必须选择 InnoDB 存储引擎;

  4. 例如对电商公司来说,大部分的业务情况是要支持事务回滚的,例如下单流程失败之后要回滚已有的 Insert 语句,并且数据并发量高,这种场景肯定都是选择 InnoDB,笔者在生产环境中从未看到使用 MyISAM 存储引擎,两者对比更侧重考察候选人的理论知识。

3. 小结

本章节介绍了 MySQL 中两种不同的数据存储引擎,面试官针对回答可能会涉及到一些扩展性的问题,例如当谈到 InooDB 对事务的支持时,面试官很可能转为考察候选人对事务的理解程度。上述提到了聚集索引和非聚集索引,面试官可能会特意考察这两种索引的实现区别。MySQL 的外键定义,枚举使用场景和案例。这些问题也是候选人需要掌握的知识点。 

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

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

相关文章

Python | Leetcode Python题解之第229题多数元素II

题目: 题解: class Solution:def majorityElement(self, nums: List[int]) -> List[int]:cnt {}ans []for v in nums:if v in cnt:cnt[v] 1else:cnt[v] 1for item in cnt.keys():if cnt[item] > len(nums)//3:ans.append(item)return ans

C#绘制阻抗圆图初步

阻抗圆图,或者叫史密斯图,是无线电设计方面用的; 基本的阻抗圆图如下, 下面尝试用C#能不能画一下; 先在网上找一个画坐标的C#类,它的效果如下; 自己再增加一个函数,可以绘制中心在…

【JSP+Servlet+Maven】——优质外卖订餐系统之概论部分

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

PPTP、L2TP、IPSec、IPS 有什么区别?

随着互联网的发展,保护网络通信的安全越来越重要。PPTP、L2TP、IPSec、IPS是常见的网络安全协议和技术,在保护网络通信安全方面发挥着不同的作用和特点。下面介绍PPTP、L2TP、IPSec、IPS之间的区别。 点对点隧道协议(PPTP)是一种用…

使用大模型进行SQL迁移的实践总结

在现代化的项目管理和运维工作中,利用大模型(如ChatGPT)处理复杂任务已成为一种高效手段。近期我们在一个项目中尝试利用大模型将MySQL导出的SQL语句迁移为达梦信创数据库格式,通过几轮操作,我们深刻体会到提示词工程的…

C# 串口数据转网口实现空气风速风向检测

1.窗体搭建 添加time(定时器) 因为需要风速和风向自动刷新 2.进行网口空气检测 ①服务器连接按钮 // 连接按钮private void button1_Click(object sender, EventArgs e){if (button1.Text "连接"){ConnectSocke();// 连接服务器}else{CloseSocket(); // 关闭服务器…

基于html开发的在线网址导航在线工具箱源码

基于html开发的在线网址导航在线工具箱源码,将全部文件复制到服务器,入口文件是index.html 如需修改网址,可修改index.html 如需修改关于页面,可修改about里面的index页面 源码下载:https://download.csdn.net/down…

基于YOLOV8的数粒机视觉计数解决方案

一:行业背景调查 随着全球市场商品大规模工业化生产技术的大规模发展,其中对各类产品生产包装以及原材料供给有了更多精准计数的要求,这些要求主要分布在一些产量较大,产品颗粒较小,单个成本较高的商品中,近几年主要从医药包装领域和接插件包装领域开始对产品包装中的计…

【git】:初识Git 和 Git 的安装

目录 学习 Git 的目标 Git 安装 Linux-centos Linux-ubuntu Windows 学习 Git 的目标 技术目标 掌握 Git 企业级应用,深刻理解Git操作过程与操作原理,理解工作区,暂存区,版本库的含义 掌握 Git 版本管理,自由进⾏…

阿里云Linux中安装MySQL,并使用navicat连接以及报错解决

首先查询是否安装MySQL // linux 使用yum安装或者rpm安装。(就是一个安装工具类似于applStore,brew不必在意) // 区别:yum会自动安装你要安装的东西的其他依赖,rpm不会但会提示你需要安装的东西,比较麻烦,所以采用yum安…

权力之望账号怎么注册 权力之望注册游戏账号教程

不会吧不会吧,这款新的MMORPG游戏,权力之望,马上就要上线啦。支援PC 及行动装置跨平台游玩的MMORPG《权力之望》以Unity 引擎研发,利用动态捕捉、3D 扫描技术呈现细腻的游戏画面。本作主打高自由度的武器选择成长与后续的战斗类型…

GeoTrust ——适合企业使用的SSL证书!

GeoTrust是一家全球知名的数字证书颁发机构(CA),其提供的SSL证书非常适合企业使用。GeoTrust的SSL证书为企业带来了多重优势,不仅在验证级别、加密强度、兼容性、客户服务等方面表现出色,而且其高性价比和灵活的证书选…

斐讯N1盒子刷入Armbian并安装Docker拉取网络下行流量教程

一直在跑PCDN,目前主推八米云跟点心云,八米单价比点心更高,业务都一样,直播业务。 两种刷机教程我也发下。 八米云:点此跳转 点心云:点此跳转 最近各运营商对PCDN打击力度加大,需求拉取下行流量…

开始Linux之路(暑假提升)

人生得一知己足矣,斯世当以同怀视之。——鲁迅 Linux操作系统简单操作指令 1、ls指令2、pwd命令3、cd指令4、mkdir指令(重要)5、whoami命令6、创建一个普通用户7、重新认识指令8、which指令9、alias命令10、touch指令11、rmdir指令 及 rm指令(重要)12、man指令(重要…

python-27-零基础自学python

学习内容:《python编程:从入门到实践》第二版 知识点: 统计文本单词数、 解决问题: gbk codec cant decode byte 0x9d in position 995: illegal multibyte sequence” 练习内容: 练习10-10:常见单词 …

搭建图片缓存服务器,解决图片访问403 Forbidden问题

在现代Web开发中,图片是网站和应用的重要组成部分。然而,有时我们在访问某些图片时会遇到403 Forbidden错误,尤其是自己的应用访问互联网上的三方的图片时,这通常是由于别人的服务器设置了访问限制。本文将介绍如何通过搭建一个图…

【大数据】什么是数据清洗?(附应用场景及解决方案)

一、数据清洗的概念及应用场景 数据清洗是在数据处理和分析之前,对数据集进行清理和整理的过程。这个过程包括识别并纠正错误的、不完整的、不准确的、不相关的或者是重复的数据,以确保数据的质量和准确性。数据清洗的目的是提高数据的质量,使…

Vim的撤销(undo)(回退)(后退)重做(redo)(前进) , u回退 , Ctrl+r重做

Vim的撤销(undo)(回退)(后退)重做(redo)(前进) u撤销(undu)(回退)(后退) , 小写u(undo) ctrlr 重做 CTRLr , (redo), 撤销撤销, 撤销回退, 撤销后退,前进 在 Vim 中,撤销(undo)和重做(redo)操作是通过以下命令实现的…

Vmware_Mysql8.0.31_安装部署

创建mysql目录,将资料上传到该目录 卸载MySQL依赖,虽然机器上没有装MySQL,但是这一步不可少 sudo yum remove mysql-libs 下载依赖并安装 sudo yum install libaio udo yum -y install autoconf 切换到hadoop102的root用户 su root 执…

简单分享下利用python做测试的学习方向

做为一名转行过来的工程师,我想分享一下这些年来,我对于技术是怎样晋升的,我是在职,边上班边利用时间学习起来的,也听过很多业内人的分享(简单可以总结以下几点,分享给大家碎片的式学习方式&…