网站大量收购闲置独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《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)

ycwf + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档