前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >On learning InnoDB: A journey to the core (1.学习innoDB的核心之旅)

On learning InnoDB: A journey to the core (1.学习innoDB的核心之旅)

作者头像
冬天里的懒猫
发布2020-08-17 15:39:35
6480
发布2020-08-17 15:39:35
举报
在这里插入图片描述
在这里插入图片描述

我已经使用innoDB大约十年了,到目前为止,我对他的理解已经足够好,可以在大多数时候让他为我做我任何想做的事情。然而,为了达到一些与效率相关的目标,我发现我有必要把我的理解提升到一个新的层次。不幸的是,innoDB缺乏对其内部数据结构的清晰解释,阅读源代码是找到我需要新的唯一办法。 然而,我很快发现这些结构和他们的用法(特别是他们之间的相互关系)太过复杂。仅凭阅读代码根本无法记住他们,此外,仅仅基于阅读,希望你已经正确地理解了数据结构。(对我而言,这个过程会有很多误解)。 长期以来,我一直采用以下三个步骤来理解一些复杂且缺乏文档的东西:

  • 1.阅读现有的文档和现有的代码,直到达到了最基本的理解为止。在这个步骤中经常会出现严重的误解和不正确的因素分解。
  • 2.写下我自己的实现,即使是一个非常基本的实现,最好是用一种完全不同的语言(它可以避免复制粘贴任何东西的倾向)。根据哪些可行,哪些不可行,修改我的理解。
  • 3.跟我我的新的理解创建新的文档和图标。必要的时候重构我的实现(为了记录它而检查所有内容的行为通常会揭示不正确的分解)。基于对重构代码的新理解,正确的编写文档,重复,直到正确。

实现InnoDB在磁盘的数据结构

我启动了innodb_ruby项目,在ruby中实现了InnoDB的磁盘数据结构,我选择Rubu是因为它非常灵活,对于原型涉及来说速度非常快,而且他是我目前最喜欢的语言。但是,任何语言都是可行的。而且性能并不是真正的问题,尽管我们不希望它太慢,因为那样会使得迭代测试变得很麻烦。 项目开始后,我在几分钟内对16KB页文件上的FIL标题进行了非常基本的解析。(对InnoDB中所有类型的页都很常见)。几个小时之后,我实现了索引的页标提,并且可以回答一些非常基本的问题,比如每个索引页中有多少条记录,这是一个立即有用的结果。 我接着实现了我需要的每一个关键的数据结构,并且按照我需要的顺序,每一个都能在不同的层次上更深的理解InnoDB的存储。Davi也加入进来,写了一些复杂的代码,比如处理激励中的可变宽度字段类型。 我们现在有一个在InnoDB主要数据结构的只读实现。

记录InnoDB的磁盘数据结构

一旦InnoDB的秘密被揭露,我觉得喔可以开始制作图标而不会完全出错,我开始为所有的主要的InnoDB磁盘上的数据结构构建清晰易懂的图标。我开始了inno_diagrams项目,并选择在OminiGraffile中构建他们。 此时,大多数表空间的文件的磁盘上存储格式ibdataX和*.ibd文件。是Barracuda格式的文档,带有紧凑的记录。要为Antelope格式(带有冗余记录)和innodb压缩表构建相应的文档,还有很多工作要做。日志文件格式也保留下来。

利用代码和图标

现在我们已经有了可以用于交互演示的工作代码,以及可以作为很好的支持材料的图标,我打算写一些关于一些更有趣但是没有文档说明的结构的文章。注意了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现InnoDB在磁盘的数据结构
  • 记录InnoDB的磁盘数据结构
  • 利用代码和图标
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档