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

文章目录

      • 前言:
      • 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域套接字路径就可以建立连接了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++学习 数组

目录 数组 一维数组 数组名 案例:冒泡排序 二维数组 数组名 数组 数组就是一个集合,里面存放了相同类型的数据元素。 下面的数字对应为数组的下标(索引),可以看到索引范围为0~数组长度-1 特点: 数组中数据元素的数据类型相同。…

Unity3D 场景添加obj模型

有一个立方体的obj模型;将其拖到Assets文件夹节点上,在此节点放手,资源被加入项目; 在右侧显示出对象概览; 点击箭头,显示此模型下的子对象; 然后按住Assets面板中的cube1对象,拖动…

36.RocketMQ之Broker如何实现磁盘文件高性能读写

highlight: arduino-light Broker读写磁盘文件的核心技术:mmap Broker中大量的使用mmap技术去实现CommitLog这种大磁盘文件的高性能读写优化的。 通过之前的学习,我们知道了一点,就是Broker对磁盘文件的写入主要是借助直接写入os cache来实现性能优化的&…

【Java项目】Vue+ElementUI+Ceph实现多类型文件上传功能并实现文件预览功能

文章目录 效果演示前端后端Java 效果演示 先说一下我们的需求,我们的需求就是文件上传,之前的接口是只支持上传图片的,之后需求是需要支持上传pdf,所以我就得换接口,把原先图片上传的接口换为后端ceph,但是…

诚迈科技董事长、统信软件董事长王继平出席全球数字经济大会

7月5日,2023全球数字经济大会“数字未来新一代软件产业高质量发展论坛”在北京大兴隆重举行。论坛以“数字新高地,数创兴未来”为主题,共同探讨产业升级新路径,凝聚数字经济合作新共识,构建数字产业集聚发展新高地。诚…

基于Qt5 实现的简易慕课爬取程序

基于Qt5 实现的简易慕课爬取程序 一、项目概述二、源代码 一、项目概述 名称:MookScrapy 这个项目主要是使用了 Qt 里面的 QNetworkAccessManager 去下载慕课网站的数据 https://coding.imooc.com,也就是这个网站里面的卡片信息。然后做一定的分析和展示…

每次装完 homebrew,ohmyzsh 就会报错:Insecure completion-dependent directories detected:

参考:https://zhuanlan.zhihu.com/p/313037188 这是因为在big sur安装homebrew后,会在/usr/local/share/生成一个zsh文件夹,里面包含了 因此,zsh文件默认设置的权限是775,也就是group user有writer的权利,zsh认为这是…

centos下./configure报错:Permission denied

./configure 文章目录 ./configure报错解决方案使用chmod给./configure赋予x权限sftp给configure文件赋予x权限 ./configure报错 -bash: ./configure: Permission denied解决方案 使用chmod给./configure赋予x权限 sudo chmod x ./configuresftp给configure文件赋予x权限

webrtc源码阅读之h264 RTP打包

本文来分析webrtc打包h264 rtp包的代码,版本m98 一、RTP协议 1.1 RTP协议概述 实时传输协议(RTP)是一个网络协议,它允许在网络上进行实时的音频和视频数据传输。RTP协议主要用于解决多媒体数据的实时传输问题,特别是…

React + TypeScript 实践

主要内容包括准备知识、如何引入 React、函数式组件的声明方式、Hooks、useRef<T>、useEffect、useMemo<T> / useCallback<T>、自定义 Hooks、默认属性 defaultProps、Types or Interfaces、获取未导出的 Type、Props、常用 Props ts 类型、常用 React 属性类…

macbook安装chatglm2-6b

1、前言 chatglm安装环境还是比较简单的&#xff0c;比起Stable diffusion安装轻松不少。   安装分两部分&#xff0c;一是github的源码&#xff0c;二是Hugging Face上的模型代码&#xff1b;安装过程跟着官方的readme文档就能顺利安装。以下安装内容&#xff0c;绝大部分是…

【C++进阶之路】模拟实现string类

前言 本文所属专栏——【C进阶之路】 上一篇,我们讲解了string类接口的基本使用&#xff0c;今天我们就实战从底层实现自己的string类&#xff0c;当然实现所有的接口难度很大&#xff0c;我们今天主要实现的常用的接口~ 一、String类 ①要点说明 1.为了不与库里面的string冲…

2.SpringBoot运维实用篇

SpringBoot运维实用篇 ​ ​ 下面就从运维实用篇开始讲&#xff0c;在运维实用篇中&#xff0c;我给学习者的定位是玩转配置&#xff0c;为开发实用篇中做各种技术的整合做好准备工作。 主要分为以下内容&#xff1a; SpringBoot程序的打包与运行配置高级多环境开发日志 ​…

Qt day3

完善文本编辑器 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QWidget>namespace Ui { class MainWindow; }class MainWindow : public QWidget {Q_OBJECTpublic:explicit MainWindow(QWidget *parent nullptr);~MainWindow(); public slots:void…

1.计算机是如何工作的(下)

文章目录 4.编程语言&#xff08;Program Language&#xff09;4.1程序&#xff08;Program&#xff09;4.2早期编程4.3编程语言发展 5.操作系统&#xff08;Operating System&#xff09;5.1操作系统的定位5.2什么是进程/任务&#xff08;Process/Task&#xff09;5.3进程控制…

es8.8 集群安装笔记

es8.8 集群安装笔记 配置集群第一步 修改配置文件 本次安装使用centos8 3节点安装&#xff1a; 192.168.182.142 192.168.182.143 192.168.182.144 官网 可以查看详细的安装&#xff0c;安装步骤比较简单 https://www.elastic.co/guide/en/elasticsearch/reference/8.8/rpm.htm…

Cannot find tomcat-9.0.0.M21/bin/setclasspath.sh

问题描述&#xff1a;将linux上的tomcat直接拷贝到以一个路径下&#xff0c;执行sh startup.sh 报错 解决&#xff1a;修改全局变量配置文件 1、vim /etc/profile &#xff08;主要修改如下图所标记的值 &#xff09; 2、source /etc/profile &#xff08;设置环境变量立即…

DynaSLAM 2018论文翻译

Dynaslam:动态场景下的跟踪、建图和图像修复 摘要-场景刚性假设是SLAM算法的典型特征。这种强假设限制了大多数视觉SLAM系统在人口稠密的现实环境中的使用&#xff0c;而这些环境是服务机器人或自动驾驶汽车等几个相关应用的目标。 在本文中&#xff0c;我们提出了一个基于ORB…

OpenCV 入门教程:膨胀和腐蚀操作

OpenCV 入门教程&#xff1a;膨胀和腐蚀操作 导语一、膨胀操作二、腐蚀操作三、示例应用3.1 图像增强3.2 边缘检测 总结 导语 膨胀和腐蚀是图像处理中常用的形态学操作&#xff0c;用于改变图像的形状和结构。在 OpenCV 中&#xff0c;膨胀和腐蚀是基于结构元素的像素操作&…

chatgpt生成pygame opengl实现旋转用图片填充的3d三角形

import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import *def draw_triangle():vertices ((0, 2, 0), # 顶点1(-2, -2, 0), # 顶点2(2, -2, 0) # 顶点3)tex_coords ((1, 2), # 顶点1的纹理坐标(1, 1), # 顶点2的纹理坐标(2, …