查看mysql数据库引擎内存_《MySQL之MEMORY内存数据库存储引擎分析》.pdf

《MySQL之MEMORY内存数据库存储引擎分析》.pdf

MySQL数据库之MEMORY存储引擎分析

MySQL数据库之MEMORY存储引擎分析

MMyySSQQLL数数据据库库之之MMEEMMOORRYY存存储储引引擎擎分分析析

李秉义

iceoray@

MySQL数据库之所以能够成为最流行,使用最多的开源数据库,其最重要的

原因就是它在吞吐量和速度方面相对于其它开源数据库的优势。本文首先分析

MySQL数据库的整体架构。然后从MEMORY存储引擎的核心类,存储管理机制

以及同步互斥机制三方面入手进行分析。

1 MySQL数据库系统架构概述

SashaPachev在《UnderstandingMySQLInternals》中试图对MySQL进行模块

化的分割,但是同时说明仅是试图这样进行模块化的分割。MySQL的核心开发人

员倾向于直接提到文件,目录,类,结构以及函数,因为他们对代码非常熟悉。

SashaPachev的分割方法仅仅是便于对MySQL的理解,因为一个模块涉及到的代

码有可能分布在几个源文件中,一个源文件中也有可能涉及到几个模块的函数。

特别是在一些版本较早的源码中,新版本的源码试图去让代码更加模块化。Sasha

Pachev的模块只是逻辑意义上的。

祝定泽的《MySQL核心内幕》一书中认为,MySQL基本上是用C++编写的,

代码中同时混合使用了C,且在面向过程的代码中使用了很多类,但这些类仅是负

责数据类型的表示,没有太多体现面向对象编程的思想。MySQL并不是真正意义

上的模块化结构。

MichaelKruckenberg JayPipes ProMySQL CharlesA.Bell Expert

和 在《 》, 在《

1

MySQL》中对MySQL的系统架构也表达了相同的观点。

MySQL数据库提供了一个测试框架,可用于对MySQL进行修改后的回归测

试。

1MySQL ( UnderstandingMySQLInternals )

图 系统架构 《 》

按照SashaPachev在《UnderstandingMySQLInternals》中对MySQL系统模块

1 ConnectionManager

的划分如图 所示, 模块负责监听客户端的请求,当有请求发

2

来时,就将请求转给ThreadManager模块,后者负责管理服务器中的所有线程,

并且如果设置了线程缓存,同时还负责缓存线程的管理。每当有新的请求发来时,

它就会先试图从线程缓存中分配一个线程来处理请求,如果缓存中没有线程,则

负责新建一个线程来处理请求。然后UserModule负责验证用户的登录信息,如果

通过验证,则继续交给CommanderDispatcher模块。CommanderDispatcher模块负

责检查用户的命令是否在QueryCache中,如果在,则直接从缓存中返回结果,如

果不在,则将命令交给Parser模块进行命令解析。同时将用户命令传给日志模块

(LoggingModule),日志模块负责记录三种日志,二进制更新日志(binaryupdate

log),命令日志(Commandlog)以及慢查询日志(slowquerylog)。Parser模块在收到

命令后,将对命令进行解析,生成解析树。并根据命令的类型,分派给更低一级

的模块执行。这些模块会进一步将用户的命令发给访问控制模块(AccessControl

Module),该模块负责验证用户是否有足够的权限来执行当前命令。如果通过权限

验证,下一步就会由表管理模块(TableManager)来负责读写表的定义信息,通常存

.frm

储在 文件中。最后真正的低层的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值