MYSQL底层原理4-Innodb文件系统的基本结构-创新互联

大家好,今天继续我们Inndob文件系统的学习,首先我们要知道Innodb属于整个MYSQL体系中处于最底层的存储层(client->server->storage),然后嘞,要对innodb整体的体系结构有一个全局的概念,如下图:

专注于为中小企业提供网站设计、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业玛多免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

下面我们对上图的模块简单介绍一波,让大家对innodb有一个更清晰的认识。

1、 Handler API:这个模块主要是用来和server层进行交互的,提供了一些比如save、delete、query等api供server层调用,不同的存储引擎各自有不同的实现。

2、中间虚线上半部分是逻辑层,每个访问请求都会产生事务,事务处理都会产生锁(表锁、行锁、间隙锁、临建锁等),操作对象是表、索引、B+tree等。对数据页面的访问需要保证读写一致性,需要读写锁(物理锁),为了高效定位和管理‘页’,需要用到文件管理系统。

3、Innodb为了保证存储的效率,在逻辑处理层和物理层之间是有一层buffer缓冲区的,这里主要是指日志缓冲区和Innodb_buffer_pool缓冲区,和其他中间件的设计原则类似,要想保证性能,首先写pageCache,再顺序写磁盘,这是决定一个带有存储功能中间件性能关键点。

4、innodb_buffer_pool是决定mysql性能的核心,mysql对数据绝大部分的操作都是先在此内存中进行,然后再以同步或异步的方式写入到磁盘上。毕竟操作内存的速度指定比直接操作磁盘要快很多,redis的设计就是一个很好的实践。

5、每个表可以单独一个ibd文件(独立表空间)也可以多个表一个ibd文件(共享表空间),默认是一个表一个。然后这里面存的是啥玩意呢?存的是B+tree数据、索引、插入缓存等信息。其余的信息,如列、属性等信息还是存储在默认的ibdata1文件里面。对于B+tree的结构大家应该也有一个大致的了解吧。首先基于INNODB存储引擎的表一般都是通过主键为索引值构建的聚簇索引树(所以一般我们建表都要指定主键,不指定的话INNODB也会帮你生成一个隐藏ROW_ID作为主键,所以我们在设计表结构的时候最好指定一个主键,不然的话会影响数据插入性能,插入数据需要生成ROW_ID,而生成的ROW_ID是全局共享的,并发会导致锁竞争,影响性能;mysql生成的自增主键大小是有上限的0~2^48-1,超过上限之后会出现主键冲突错误)。

生成的这个棵B+tree树拥有全量数据,数据都顺序的存放在叶子节点(每个节点不超过16k,超过的会放到溢出页,叶子节点只放一个引用地址),一般3层叶子节点即可存放2千万数据了,4层一般上亿条数据,通过稳定的IO次数即可查到指定数据。

最后,索引是方便查询的,索引列的数据不适合放大的,它占用的空间一多,那么B+ tree一层中能放的个数就越少。索引列一多,插入就越慢,如果没有索引,插入一行时只需要对主键进行排序即可。如果有很多列都有索引,那么插入时,就要做很多次排序。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

文章名称:MYSQL底层原理4-Innodb文件系统的基本结构-创新互联
网站网址:https://www.cdcxhl.com/article28/dijjcp.html

成都网站建设公司_创新互联,为您提供网站改版品牌网站建设网站营销关键词优化动态网站做网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站优化排名