mysql数据库的体系结构包括什么组件_MySQL数据库的体系结构

MySQL体系结构遵循C/S模型,即客户机/服务器模型,MySQL客户机通过原生的多种接口,可以与MySQL服务器进行交互。MySQL数据库是单进程多线程的架构,同windows平台下的Oracle数据库与全平台下的达梦数据库一样,采取单进程多线程,可以减少资源的开销,因为线程上下文切换与进程间上下文切换相比,不需要保存共享内存、全局变量等资源,提升了系统性能。但多进程对于高并发的提升效果较好,linux平台下的Oracle数据库就是采取的多进程的架构。

不论是MySQL数据库,还是Oracle数据库,亦或是达梦数据库,它们的数据库与实例的对应都一致。数据库与实例间的关系是一比一,一个数据库对应一个实例(此处的数据库不是MySQL中采取create database ... 命令创建的数据库),这里的数据库实际对应着以数据库名命名的目录。对于实例,显而易见都是由一堆后台进程/线程和一块共享内存组成,用于访问与修改数据库数据。

MySQL相比Oracle、达梦的一大特色是它的可插拔存储,可根据不同的场景使用不同的存储,MySQL最初使用的myisam存储,后续为了支持事务一致性,很多都使用了innodb存储,这也是目前使用非常广泛的第三方存储,目前MySQL官方也在开发同innodb一样可以支持事务一致性的自己的存储,下图就是基于innodb存储的mysql的体系结构图,如下:

总体可分为实例与数据库,前面说过,数据库对应着磁盘上的一堆文件,而实例则是一堆后台线程与一块共享内存区构成,共享内存被后台线程所共享。对于实例的共享内存,主要有buffer pool、redo log buffer、double write、additional memory pool等组成,buffer pool又包含了index page、undo page、insert buffer page、adaptive hash index、data dictionary等内存区域。index page主要缓存从数据文件中读取的数据,undo page主要缓存DML操作中对数据块的前镜像,insert buffer page主要缓存二级索引的索引数据,data dictionary主要缓存SQL中涉及到的数据字典。而redo log buffer主要缓存数据块的修改操作,double write则是为了保证数据的一致性,防止页损坏等情况下的数据不一致。MySQL的共享内存区可类比Oracle与达梦的SGA,当然,它们还有自己的PGA(使用Oracle的说法),也就是每个进程/线程都有自己的私有内存区,关于SGA与SGA中包含的内存类型则不尽相同,但基本的排序内存区、堆等则都存在,因此在设置数据库会话或连接池或管理空闲会话时需要对此格外注意,防止出现内存不足或OOM等情况。对于常规的进程而言,可类比Oracle的进程/线程,如purge thread 清理回滚段、redo log thread 日志刷盘等。

对于物理结构,MySQL与Oracle与达梦数据库则存在较大差异。总的来说,Oracle与达梦的物理结构基本一致,但Oracle的文件体系比达梦较规范、较丰富。相比MySQL数据库则更加简单,MySQL数据库中不存在表空间的概念,它的逻辑概念database可类同Oracle的schema,其下的表则以表定义、表数据、表索引等分类存储在磁盘文件上,并且对应的文件后缀不同。innodb存储存在联机redo日志,而并没有归档功能,无法将联机redo日志的内容归档保存。

MySQL中还有许多特别的功能,说是特别,不是说其他数据库不存在此类功能,只是在使用方式和便利性不同,如MySQL的慢查询日志、常驻内存区的配置等,通过使用变量设置直接可以使用对应的功能。最后,不得不提的是MySQL安装包非常小,非常节省空间,安装便利程度仅次于达梦数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值