《MySQL技术内幕》读书总结(一):MySQL体系结构和存储引擎

news2024/11/26 12:34:00

文章目录

      • 前言:
      • 1、定义数据库和实例
      • 2、MySQL体系结构
      • 3、MySQL存储引擎
        • InnoDB
        • MyISAM
      • 4、连接MySQL

前言:

该技术文章是我阅读《MySQL技术内幕 InnoDB存储引擎》第2版的总结梳理
我写这里文章的目的:书中的内容过于系统和繁琐,并不是所有的内容都是重点,而且有些描述过于官方
所以该文章不会长篇大论搬运书籍中的内容,我会对书中的重点进行总结、提炼、精简;
不重要的内容不会体现在文章中,通过更加容易理解的方式,阐述给大家,希望能为屏幕前的你带来帮助

1、定义数据库和实例

先搞懂两个概念,数据库和实例:

  • 数据库:操作系统文件或其他形式文件的集合
  • 实例:由后台线程 + 共享内存组成,用于操作数据库文件

MySQL是一个单进程,多线程的持久存储数据库。MySQL实例在操作系统上的表现就是一个进程

MySQL启动时,会读取配置文件,根据配置文件参数进行启动实例,如果找不到参数文件不会启动失败(Oracle会失败),会按照编译时默认的参数进行启动,启动时查找的配置文件顺序如下:

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/mysql/etc/my.cnf
  4. ~/.my.cnf

本质来说,就是寻找my.cnf配置文件,可以理解为这就是MySQL的配置文件!如果这几个配置文件都有同一个参数,就会按照最后那个配置文件参数为准!

我们操作数据库是通过数据库实例来进行操作的,这句话一定要理解!

2、MySQL体系结构

首先列出MySQL的体系结构图(架构图),自上而下:
在这里插入图片描述
从上图可以看出,MySQL采用可拔插的存储引擎,开发者可以根据自己的需要开发属于自己的存储引擎。存储引擎是基于表,而不是数据库,MySQL数据库的核心就是存储引擎,这句话要牢记!

冷知识:InnoDB存储引擎其实就是第三方存储引擎,不是官方的;后来被收购了!

3、MySQL存储引擎

InnoDB

MySQL 5.5.8版本开始,InnoDB就是默认存储引擎,主要包含以下特点:

  • 支持事务
  • 行锁
  • 外键
  • 非锁定读:默认读取操作不会产生锁

InnoDB将数据放到一个逻辑的表空间中,它将每个表单独存放到独立ibd文件中;通过MVCC(多版本并发控制)来获得高并发性;实现了4种事物的隔离级别(默认REPEATABLE);使用next-key locking策略避免幻读问题;还提供了许多高性能高可用的功能,例如:

  • 插入缓冲 insert buffer
  • 二次写 double write
  • 自适应哈希 adaptive hash
  • 预读 read ahead

InnoDB的表都是按照主键顺序存储的,如果没有主键,InnoDB就会为每一行数据自动生成一个ROWID(6字节)作为主键

MyISAM

MySQL 5.5.8之前版本,MyISAM是默认存储引擎,主要包含以下特点:

  • 不支持事务
  • 表锁
  • 支持全文索引

与众不同的点:它的缓冲池只缓冲索引文件,不缓存数据文件

MyISAM存储引擎表由MYDMYI组成:

  • MYD:用于存储数据文件
  • MYI:用于存储索引文件

通过myisampack工具可以压缩数据文件(该工具采用Huffman算法压缩),所以压缩后的表是只读;MySQL 5.0之前默认能支持表大小为4GB,后来版本默认支持256TB单表数据

关于其他还有很多种储存引擎,不过不是重点,不详细说啦!

4、连接MySQL

连接MySQL是连接进程和MySQL数据库实例进行通信,本质上是进程通信。

目前连接MySQL主要有三种方式:

  1. TCP/IP连接:例如我们在Windows本地使用Navicat连接云服务器上的MySQL实例。发起连接时,MySQL实例会先检查一张权限视图,用于判断发起请求的客户端IP是否允许连接
  2. 命名管道和共享内存
  3. UNIX域套接字:Linux和UNIX环境下可以使用,并且客户端和服务器实例在一台服务器上;实例启动后找到UNIX域套接字路径就可以建立连接了

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

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

相关文章

小白也能轻松上手的6个流程图工具

随着信息时代的到来,流程图已经成为各行各业展示业务流程、工作流程、数据流程等必不可少的形式之一。但是对于初学者来说,学习和使用传统的流程图软件有一定的门槛,因此,本文将推荐6款适合初学者的在线流程图软件,让您…

Framework UI机制之Choreographer编舞者

Choreographer(编舞者) Choreographer(编舞者)是 Android 系统中的一个重要组件,用于协调和管理界面的动画和渲染操作的时机。它负责在界面上正确地处理和同步动画、布局和绘制操作,以保证流畅的用户体验。…

Java基础---常见的语法糖

目录 典型回答 如何解语法糖 糖块一、switch 支持 String 与枚举 糖块二、泛型 糖块三、自动装箱与拆箱 糖块四、方法变长参数 糖块五、枚举 糖块六、内部类 糖块七、条件编译 糖块八、断言 糖块九、数值字面量 糖块十、for-each 糖块十一、try-with-resource 糖…

TigerBot和ChatGLM-6B大语言模型

目录 1 TigerBot大语言模型 1.1 环境安装 1.2 模型下载 1.2.1 hugging face 网站下载 1.2.2 百度网盘下载 1.3 推理 2 ChatGLM大语言模型 2.1环境搭建 2.2 模型下载 2.3 推理 1 TigerBot大语言模型 虎博科技”发布自研多模态大模型TigerBot,开源模型、代码…

Focal Loss损失函数

目录 前言 交叉熵损失函数 平衡交叉熵 Focal Loss 代码实现 前言 Focal loss是一个常用的解决类别不平衡问题的损失函数,由何恺明提出的(论文名称:Focal Loss for Dense Object Detection),用于图像领域解决one-…

学习系统编程No.29【线程执行过程之页表详解】

引言: 北京时间:2023/7/3/14:09,刚睡醒,放假在家起床时间确实不怎么好调整,根本固定不了一点,当然通俗点说也就是根本起不来,哈哈哈,已经很少见到那种7点起来码字的情形了&#xff…

NanopcT4 系统 人脸检测实验 超详细教程 代码及操作步骤

文章目录 1.NanopcT4 系统烧写详细操作步骤2.vim 使用与 gcc 使用3.makefile 使用4.GPIO 引脚查看与连接5.使用vim 编写 LED 灯闪烁c 语言程序test1.c6.使用vim 编写 LED 灯闪烁shell 脚本程序test2.sh7.在ARM 上实现人脸检测 1.NanopcT4 系统烧写详细操作步骤 1)准备一张 8G …

口语理解任务源码详解系列(二)利用seq2seq-attention模型实现

利用seq2seq-attention模型实现 写在前面 在前文介绍了项目的数据集构建:传送门 本文利用seq2seq-attention实现:实现细节请参考论文:《Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling》 1.意…

喜羊羊贴吧顶帖软件实战教学

喜羊羊贴吧顶帖软件实战教学#贴吧顶帖#贴吧推广 大家好,欢迎来到百收网SEO这期视频,给大家更新一下百度贴最新的一个顶帖视频教程。首先我们今天用的顶帖软件是我们的喜羊羊173 的一个版本,软件的话在我们的群文件去下载,就是我们…

如何查看货物的物流状态

想不想有一个一键批量查询快递号的软件?今天,小编向您介绍一款软件:“固乔快递查询助手”,该软件是固乔工作室正式推出的专业快递和物流单号出货信息批量查询软件。这款软件功能实用,操作简单,页面简单&…

使用 Jackson 库对日期时间的动态序列化反序列化操作

0.背景 因某项目中的数据报表功能在创建年报 和月报时需要生成不同的日期格式,但数据结构未变,为避免类的冗余定义,故使用如下方式来动态设置日期格式,在不同报表是使用不同格式的时间格式来保存数据。 1.代码介绍 PS:此介绍有Cha…

深度学习技巧应用23-利用latex对深度学习各种网络模型的图像进行绘制

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用23-利用latex对深度学习各种网络模型的图像进行绘制,大家知道那些好看的模型结构图是怎么画的吗?今天就给大家手把手的利用latex绘画出深度学习模型图出来,我将利用latex画出AlexNet,LeNet,VGG16,U-Net高清的网络模型…

微服务一 实用篇 - 5.1 ElasticSearch安装

《微服务一 实用篇 - 5.1 ElasticSearch安装》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - 5.1 ElasticSearch安装》 《微服务一 实用篇 - 5.1 ElasticSearch安装》1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1…

达芬奇快编键盘使用指南——个人白皮书分享

文章目录 序言常见问题(陆续更新)1.没有指示灯,不知道怎么开机 功能分区和翻译查询A快编工具(Smart Insrt)B修剪工具(Trim In)C多功能按键(Esc)D多机位区(Cam…

新加坡访问学者签证申请的三个注意事项

新加坡是一个独特而美丽的国家,吸引了许多学者和研究人员前来访问和交流。如果您计划前往新加坡进行学术交流,下面是知识人网小编整理的关于新加坡访问学者签证申请的三个注意事项,希望对您有所帮助。 1. 签证申请和文件准备: 在…

Scala入门到放弃—01—概述

文章目录 概述什么是是Scala?为什么要使用Scala? 配置环境安装测试附 基本语法定义变量基本数据类型lazy在Scala中的应用 概述 什么是是Scala? https://www.scala-lang.org/ Scala combines object-oriented and functional programming in one conci…

ELK实验部署过程

ELK集群部署环境准备 配置ELK日志分析系统 192.168.1.51 elk-node1 es、logstash、kibana 192.168.1.52 elk-node2 es、logstash 192.168.1.53 apache logstash (我这里是把虚拟机的配置全部都改为2核3G的) 2台linux 第1台:elk-nod…

大数据开发工程师前景如何?

大数据需求越来越多,只有技术在手不愁找不到工作。 大数据工程师的技术要求如下: 1、掌握至少一种数据库开发技术:Oracle、Teradata、DB2、Mysql等,灵活运用SQL实现海量数据ETL加工处理; 2、熟悉Linux系统常规shell…

软件工程——第8章维护知识点整理

本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1.维护阶段的基本任务是? 2.大型软件的维护成本大概是开发成本的几倍? 3.什么是软件维护? 4.软件维护分为哪几类…

python代码练习:猜成语游戏

python代码练习:猜成语游戏 题目结果展示源代码 题目 成语填填乐,随机输出一条包含一个空格的成语,填写答案并判断是否正确,正确加2分,输出“正确,你真棒”,错误减2分,输出“错了”…