重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
大家好,今天继续我们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元起,快前往官网查看详情吧