蚂蚁金服面试,主要问了一些jvm和mysql的知识,有些问题回答的模棱两可,再次总结一下。mysql因为其插件式存储引擎以及其较小的体积成为了许多应用中数据库的首选,Innodb引擎支持事务,外键并且支持行锁,被广泛的应用于OLTP业务中。
1.mysql的体系架构
上图是mysql的总体架构,可以看到插件式的存储引擎只是mysql的一个组件而已,引擎是基于表的,而并非是基于数据库的。
有一个问题:qcache和Innodb buffer pool有什么区别?
这个问题的本质还是存储引擎是基于表的,而不是基于数据库的这句话,innodb buffer pool是基于表的,存储的是表的数据,当查询数据时,会首先从内存中进行查询,如果内存中存在,数据将直接从内存中返回,从而提高查询的响应时间;而qcache是基于数据库的,缓存的是sql语句及其对应的结果集,qcache会跟踪系统中的每张表,若表发生变化,则和张表相关的所有查询缓存全部失效,且任何包含不确定结果的查询(如now())均不会被缓存。当检查到qcache有效的时候,mysql不会对sql语句做解析,优化等任何的处理,直接将结果集返回。
2.Innodb和MyISAM的区别
这两个引擎可谓是mysql中最常见的两个引擎,前者适用于OLTP业务中,而后者适用于OLAP业务中。下面给出一张表来对比两者区别