存储引擎

MySQL为什么使用 B+ 树

邮差的信 提交于 2020-01-11 17:45:10
为什么 MySQL 使用 B+ 树是面试中经常会出现的问题,很多人对于这个问题可能都有一些自己的理解,但是多数的回答都不够完整和准确,大多数人都只会简单说一下 B+ 树和 B 树的区别,但是都没有真正回答 MySQL 为什么选择使用 B+ 树这个问题,我们在这篇文章中就会深入分析 MySQL 选择 B+ 树背后的一些原因。 概述 首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负责数据的存储和提取,除了 InnoDB 之外,MySQL 中也支持 MyISAM 作为表的底层存储引擎。 我们在使用 SQL 语句创建表时就可以为当前表指定使用的存储引擎,你能在 MySQL 的文档 Alternative Storage Engines 中找到它支持的全部存储引擎,例如:MyISAM、CSV、MEMORY 等,然而默认情况下,使用如下所示的 SQL 语句来创建表就会得到 InnoDB 存储引擎支撑的表: CREATE TABLE t1 ( a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB; 想要详细了解 MySQL 默认存储引擎的读者,可以通过之前的文章 『浅入浅出』MySQL 和 InnoDB 了解包括 InnoDB

MySQL InnoDB存储引擎

走远了吗. 提交于 2020-01-11 12:29:07
/*--> */ /*--> */ 介绍 本篇文章是对Innodb存储引擎的概念进行一个整体的概括,innodb存储引擎的概念是mysql数据库中最关键的几个概念之一,涉及的内容非常的广;由于个人的理解能力有限如果有不对的地方还见谅。 MySQL对应InnoDB版本 MySQL 5.1》InnoDB 1.0.X MySQL 5.5》InnoDB 1.1.X MySQL 5.6》InnoDB 1.2.X 后台线程 1.Master Thread 负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性;包括刷新脏页、合并插入缓冲、undo页的回收。 2.IO Thread innodb存储引擎中大量使用了AIO(Async IO)来处理写IO请求来提高数据库的并发性能,共有四类IO线程,分别是:insert buffer thread、log thread、read thread、write thread。其中read thread和write thread分别有四个线程,可以通过innodb_read_io_threads和innodb_write_io_threads来配置。 SHOW VARIABLES LIKE 'innodb_%io_threads' 或者 SHOW ENGINE INNODB STATUS \G; 3.Purge Thread线程 purge

mysql事务

China☆狼群 提交于 2020-01-10 17:37:51
事务的概念 事务是一种机制,一个操作序列,包含了一组数据库操作命令,并且把所有命令作为一个整体一起想系统提交或撤销操作请求, 即这一组数据库命令要么都执行,要么都不执行,事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时, 事务是最小的控制单元,事务适用于用户同时操作数据库系统的场景,如银行,保险公司 以及证券交易系统等,通过事务的整体以保证数据的一致性,事务是保证了一组操作的平稳性和可预测性的技术。 事务的四大特性(ACID) 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 原子性(Atomicity )   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。   拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 隔离性(Isolation )   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰

『浅入浅出』MySQL 和 InnoDB

﹥>﹥吖頭↗ 提交于 2020-01-09 11:41:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL、PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的、不了解数据库的有所帮助。 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出。 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是 数据库 和 实例 : 数据库:物理操作文件系统或其他形式文件类型的集合; 实例:MySQL 数据库由后台线程以及一个共享内存区组成; 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍。 数据库和实例 在 MySQL 中,实例和数据库往往都是一一对应的,而我们也无法直接操作数据库,而是要通过数据库实例来操作数据库文件,可以理解为数据库实例是数据库为上层提供的一个专门用于操作的接口。 在 Unix 上,启动一个

MySQL必知存储引擎

家住魔仙堡 提交于 2020-01-08 22:21:30
Mysql存储引擎 1.MyISAM MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务. 2.InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎. 3.BDB源 自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性 4.Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失 5.Merge将一定数量的 MyISAM 表联合而成一个整体,在超大规模数据存储时很有用 6.Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive 拥有高效的插入速度,但其对查询的支持相对较差 7.Federated将不同的 MySQL 服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用 8.Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用 9.CSV 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个 .csv 文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV 存储引擎不支持索引。 10

MySQL存储引擎MyISAM和InnoDB

拟墨画扇 提交于 2020-01-07 23:36:26
存储引擎概念介绍 MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎 存储引擎就是MySQL将数据存储在文件系统中的存储方式或者存储格式————因此适用的场景也不一样 目前MySQL常用的两种存储引擎 MyISAM InnoDB 存储引擎:一种基础的驱动力,存储技术:存储机制、索引技巧、锁定水平。 mysql存储引擎是mysql数据库服务器中的组建,负责为数据库执行实际的数据I/O操作 使用特殊存储的主要优点之一在于:仅需要提供特殊应用所需的特性,数据库中的系统开销较小,具有更有效和更高的数据库性能 mysql系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行储存 前后端的开发语言去提取拿取数据,这就需要装驱动,,具体的对象叫connector连接者 connection pool 叫连接池,类似所谓的空闲的线程或者进程去进行连接,在里面回房多个被连接对象,以备连接,并且节省响应时间,优化访问效率 使用线程或者进程去连接,链接需要媒介载体,就是sock通信文件,以提供pid文件,所有的线程都需要sock文件去管理, 数据放在磁盘上,在逻辑层面上放在file system 中

数据库:存储引擎+InnoDB+TokuDB+ MyIASM +Memory+索引+三范式等

余生长醉 提交于 2020-01-06 20:11:10
存储引擎 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。 存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated 。 InnoDB(B+树) InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page大小是固定的,一般设为 16k。其中非叶子节点只有键值,叶子节点包含完成数据。 数据库:存储引擎+InnoDB+TokuDB+ MyIASM +Memory+索引+三范式等 适用场景 : 1)经常更新的表,适合处理多重并发的更新请求。 2)支持事务。 3)可以从灾难中恢复(通过 bin-log 日志等)。 4)外键约束。只有他支持外键。 5)支持自动增加列属性 auto_increment。 TokuDB(Fractal Tree-节点带数据) TokuDB 底层存储结构为 Fractal Tree,Fractal Tree 的结构与 B+树有些类似, 在 Fractal Tree中,每一个 child 指针除了需要指向一个 child 节点外

mysql 详解

懵懂的女人 提交于 2020-01-05 00:11:21
1、简介 MySQL的历史可以追溯到1979年,一个名为Monty Widenius的程序员在为TcX的小公司打工,并且用BASIC设计了一个报表工具,使其可以在4MHz主频和16KB内存的计算机上运行。当时,这只是一个很底层的且仅面向报表的存储引擎,名叫Unireg。【MySQL早期叫Unireg】早期轻量级,后来发展到巨无霸(淘宝、faceboock)MySQL AB是由MySQL创始人和主要开发人创办的公司。MySQL AB最初是由David Axmark、Allan Larsson和Michael“Monty”Widenius在瑞典创办的。 SQL标准:ANSI SQL SQL-86, SQL-89, SQL-92, SQL-99, SQL-03 SQL四种语言:DDL,DML,DCL,TCL DDL(Data Definition Language)数据定义语言 DML(Data Manipulation Language)数据操纵语言 DCL(Data Control Language)数据库控制语言 授权,角色控制等 TCL(Transaction Control Language)事务控制语言 SAVEPOINT 设置保存点 ROLLBACK 回滚 SET TRANSACTION SQL主要分成四部分: (1)数据定义。(SQL DDL)用于定义SQL模式、基本表

mysql并发复制系列 一:binlog组提交

感情迁移 提交于 2020-01-01 03:09:39
http://blog.itpub.net/28218939/viewspace-1975809/ 作者:沃趣科技MySQL数据库工程师 麻鹏飞 MySQL Binary log在MySQL 5.1版本后推出主要用于主备复制的搭建,我们回顾下MySQL 在开启/关闭 Binary Log功能时是如何工作的 。 MySQL 没有开启 Binary log的情况下: InnoDB存储引擎通过redo和undo日志可以safe crash recovery数据库,当数据crash recovery时,通过redo日志将所有 已经在存储引擎内部提交的事务应用 redo log 恢复 ,所有已经prepared但是 没有 commit 的 transactions 将会应用 undo log 做 roll back 。然后客户端连接时就能看到已经提交的数据存在数据库内,未提交被回滚地数据需要重新执行。 MySQL 开启 Binary log 的情况下: 为了保证存储引擎和MySQL数据库上层的二进制日志保持一致( 因为备库通过二进制日志重放主库提交的事务,假设主库存储引擎已经提交而二进制日志没有保持一致,则会使备库数据丢失造成主备数据不一致 ),引入二阶段提交(two phase commit or 2pc) 图1 二阶段提交 MySQL二阶段提交流程: Storage Engine

mysql 存储引擎

守給你的承諾、 提交于 2019-12-31 23:06:28
mysql 存储引擎 1.存储引擎的介绍? 是mysql数据库服务自带的功能程序,是表的处理器,不同的存储引擎有不同的功能数据存储方式。 mysql> create table t32( -> name char(10), -> age int(2) -> )engine=myisam; mysql> show create table t32; mysql> show create table t33; vim /etc/my.cnf [mysqld] default-storage-engine=存储引擎名 systemctl stop mysqld systemctl start mysqld show engines;查看 常用存储引擎的特点 myisam特点 独享表空间 表。frm 表结构 desc 表 表 MYI 表索引 表。MYD 表数据 select * from 表; 表 行级锁( 对表访问时,只给被访问的行加锁) 不支持事务,事务回滚,外键 锁 解决并发访问冲突问题。 查询操作 select * from 表; 写操作(insert delete update) 锁粒度 表级锁:一次直接对整张表进行加锁。 行级锁只锁定某一行。 页级锁:对整个页面(Mysql管理数据的基本存储单位)进行加锁。 锁类型: 1.写型锁:(互斥锁、排它锁):是独占锁