一、MySQL体系结构和存储引擎
一、MySQL体系结构和存储引擎
1.1 定义数据库和实例
- 数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL数据库中,数据库文件可以是 frm、MYD、MYI、ibd结尾的文件。
- 实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行得后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。
这两个词有时可以互换使用,不过两者的概念完全不同。在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库被多个数据库实例使用的情况。
当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例。
linux /etc/my.cnf
win .cnf / .ini
配置文件中有一个参数 datadir,该参数指定了数据库所在的路径。linux 默认 datadir 为 /usr/local/mysql/data
1.2 MySQL体系结构
从概念上讲,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。
存储引擎是基于表的,而不是数据库。
1)InnoDB存储引擎
支持事务,行锁,支持外键
通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认是 repeatable 级别。同时,使用一种被称为 next-key locking
的策略来避免幻读。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次读写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
对于表中数据的存储,InnoDB存储引擎使用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的 ROWID,并以此作为主键。
next-key locking Innodb锁机制:Next-Key Lock 浅谈
插入缓冲(insert buffer) Mysql关键特性-插入缓冲 (Insert Buffer)
二次读写(double write)MySQL InnoDB特性:两次写(Double Write)
自适应哈希索引(adaptive hash index)MySQL 自适应哈希索引
预读(read ahead)MySQL的预读机制
2)MyISAM 存储引擎
不支持事务、表锁、支持全文索引
由 MYD 、MYI组成,MYD 用来存放数据文件,MYI 用来存放索引文件
1.5 连接MySQL
一个连接进程和MySQL数据库实例进行通信。从程序设计的角度来说,本质上是进程通信。如果对进程通信比较了解,可以知道常用的进程通信方式有管道、命名管道、命名字、TCP / IP 套接字、UNIX 域套接字。
在通过 TCP / IP 连接到 MySQL 实例时,MySQL数据库会先检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到 MySQL实例。
原文地址:https://www.cnblogs.com/lhxBlogs/p/17658637.html
- 单机MySQL数据库优化推荐的编译安装参数
- Linux网络实时流量监测工具iftop的安装使用
- Golang学习--GroupCache的使用
- 基于 Webpack & Vue & Vue-Router 的 SPA 初体验
- GO语言高并发学习心得体会例
- Go 语言实现的网络连接池:Pool
- go语言操作redis连接池的方法
- WebVR如此近 - three.js的WebVR示例程序解析
- 【Dev Club分享】基于RxJava的一种MVP实现
- Android 动态链接库加载原理及 HotFix 方案介绍
- 如果裸写一个goroutine pool
- 【Dev Club 分享】微信 iOS SQLite 源码优化实践
- 移动客户端中高效使用 SQLite
- 【Dev Club 分享】微信热补丁 Tinker 的实践演进之路
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 基于Apriori的数据关联分析 | 工业数据分析 | 冰水数据智能专题 | 4th
- 基于FP树的频繁项挖掘 | 工业数据分析 | 冰水数据智能 | 5th
- ICCV2019 高通Data-Free Quantization论文解读
- VBA解压缩ZIP文件10——解压-动态Huffman
- 海思NNIE之PFPLD训练与量化
- [译] 用 Truffle 插件自动在Etherscan上验证合约代码
- 二层网络上的以太坊智能合约: Optimistic Rollup
- 基于决策树的工业数据分类——数据智能
- Kestrel的ListenAnyIP和ListenLocalhost的区别
- 【为宏正名】什么?我忘了去上“数学必修课”!
- 第6章 Jenkins系统权限划分与授权管理
- Python爬虫新手教程: 知乎文章图片爬取器
- 《重构-代码整洁之道TypeScript版》第4天
- C++基础 杂记(一)
- 一种Cortex-M内核中的精确延时方法(ns级别)