MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS应用软件之一。并且在企业中,mysql架构也是经常使用的,那mysql架构底层原理是什么?下面来我们就来给大家讲解一下。
mysql底层结构
用户:进行数据库连接的人。
支持接口:是第三方语言提供和数据库连接的接口,常见的有jdbc,odbc,c的标准api函数等等。
连接层:提供与用户的连接服务,用于验证登录服务。
服务层:完成大多数的核心服务功能。有sql接口,解析器parser,优化器optimizer,查询缓存 cache/buffer 。
服务层执行过程:sql语句通过sql接口,服务器如果缓存cache有命中查询结果,直接读取数据。如果没有命中查询结果,由解析器进行sql语句的解析,预处理,经过优化器进行优化后提交给引擎层。通俗的说--------->服务层告诉引擎层要做什么。
引擎层: 提供各种存储引擎,真正的负责MySQL中数据的存储和提取。常见有innodb myisam 。innodb支持全文索引,事务(高并发),行锁,myisam 性能优先。 mysql中查询引擎语句:show engines. 通俗的说--------->引擎层会转发服务层解析出来的sql语句告诉存储层要做什么(增删改查)并且告诉存储层要以何种方式做(innodb myisam等等)。
存储层: 数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
SQL的执行流程:数据库通常不会被单独使用,而是由其它编程语言通过SQL支持接口调用MySQL。由MySQL处理并返回执行结果。首先,其它编程语言通过SQL支持接口调用MySQL,MySQL收到请求后,会将该请求暂时放在连接池,并由管理服务与工具进行管理。当该请求从等待队列进入到处理队列时,管理器会将该请求传给SQL接口,SQL接口接收到请求后,它会将请求进行hash处理并与缓存中的数据进行对比,如果匹配则通过缓存直接返回处理结果;否则,去文件系统查询:由SQL接口传给后面的解析器,解析器会判断SQL语句是否正确,若正确则将其转化为数据结构。解析器处理完毕后,便将处理后的请求传给优化器控制器,它会产生多种执行计划,最终数据库会选择最优的方案去执行。确定最优执行计划后,SQL语句交由存储引擎处理,存储引擎将会到文件系统中取得相应的数据,并原路返回。
下面是补充的一些相关知识:
1.引擎是什么:
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
当我们理解了引擎这个概念,自然而然就知道引擎层的作用就提供各种不同引擎给你选择,然后用你选出来的引擎去处理sql语句
2.MySQL缓存机制:
上面SQL语句进入服务层后会进行测试是否命中查询缓存。所谓的查询缓存就是将第一次的查询结果放在hash表中然后存入内存。一条查询语句所带来的开销可以忽略,但一旦涉及到高并发,有成千上万条查询语句时,hash计算和查找所带来的内存开销就必须重视了。
MySQL缓存相关的配置参数
mysql> show variables like '%query_cache%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | have_query_cache | YES | --查询缓存是否可用 | query_cache_limit | 1048576 | --可缓存具体查询结果的最大值 | query_cache_min_res_unit | 4096 | --查询缓存分配的最小块的大小(字节) | query_cache_size | 599040 | --查询缓存的大小 | query_cache_type | ON | --是否支持查询缓存 | query_cache_wlock_invalidate | OFF | --控制当有写锁加在表上的时候,是否先让该表相关的 Query Cache失效 +------------------------------+---------+
开启缓存
mysql> set global query_cache_size = 600000; --设置缓存内存大小 mysql> set global query_cache_type = ON; --开启查询缓存
关闭缓存
mysql> set global query_cache_size = 0; --设置缓存内存大小为0, 即初始化是不分配缓存内存 mysql> set global query_cache_type = OFF; --关闭查询缓存
set global时需要有SUPER权限
考虑关闭mysql缓存,还可以借住memcached,redis等外部缓存工具,提高mysql查询缓存性能。
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。
推荐阅读: