Mysql逻辑架构及InnoDB介绍

  CSDN开篇博客,本来想写下mysql与mongoDB的区别,无奈牵涉的专业知识太多,技术能力也有限,所以分开来介绍下mysql和mongoDB,主要从逻辑架构,存储引擎,数据如何存储,如何查询方面进行分析,参考资料来源于官网和一些大咖的分享,如有不正之处,也希望留言指正。

     下图是mysql的逻辑架构,来自高性能MySQL,很简洁,挑不出毛病,

 

 

存储引擎介绍

   InnoDB 作为Mysql 默认事务型存储引擎,关键特性包括:插入缓冲、两次写、自适应哈希索引、异步IO、刷新邻接页。

InnoDB的数据存储在表空间(tablespace)中,表空间是InnoDB基于文件IO上构建;tablespace采用逻辑分层结构:由段(segment),区(extent)、页(page)组成。


段:常见的段有数据段【B+树的叶子节点】、索引段、回滚段等。

区:区是连续页组成的空间,在任何情况下每个区的大小都为1MB

页:页是InnoDB磁盘管理的最小单位。默认每个页的大小为16KB.常见的页类型有:数据页(B-tree Node),undo页(undo Log Page),系统页(System Page),事务数据页(Transaction systemPage),插入缓冲位图页(Insert Buffer Bitmap),插入缓冲空闲列表页(Insert Buffer Free List),未压缩的二进制大对象页(UncompressedBLOB Page), 压缩的二进制大对象页(compressed BLOB Page),

InnoDB数据页由7个部分组成:FileHeader,Page Header,Infinum+Supermum Records,User Records ,Free Space,PageDirectory,File Trailer.页与页之间通过双向链表连接。


InnoDB存储引擎表总是B+树索引组织的,B+树索引并不能找到一个键值对应的具体行。b+树索引只能查到被查找数据行所在的页,然后数据库通过把页读入内存,再在内存中查找,最后得到结果。

 B+树索引有一个特点是高扇出性【子节点非常多】,因此在数据库中,B+树的高度一般在3到4层【假设每个数据页节点的扇出为200,树共3层。以每页200行[每行记录大小约为80字节]记录为例,总共能保存的数据条数就是200^3=800W,】。也就是说查找某一键值的记录,最多只需要3到4次IO开销。按磁盘每秒100次IO来计算,查询时间只需0.0.2到0.03秒。

       便于理解,下面演示一个B+数结构,高度为2,每页可放4条记录,扇出(fanout)【子节点数量】为5

 

行:InnoDB存储引擎是面向列的(row-oriented),不就是说数据是按行进行存放的。每个页存放的记录也是有硬性定义的,最多允许存放16KB的数据。最多允许存放16KB/2-200也即7992行的记录,最少2条记录,不然就变成链表了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值