高性能Java架构核心原理与案例实战之mysql架构底层原理

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等等)。

存储层: 数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

高性能Java架构核心原理与案例实战之mysql架构底层原理.jpg

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工具网。

推荐阅读:

json用什么软件编辑?怎样打开json?

Java架构师需要什么证书?Java架构师要有哪些技能?

qt怎么获取主窗口对象?qt主窗口如何使用?