ITPUB论坛-专业的IT技术社区

标题: 话题讨论:怎样阅读InnoDB存储引擎源码(已公布获奖) [打印本页]

作者: hwayw    时间: 2014-5-20 13:14
标题: 话题讨论:怎样阅读InnoDB存储引擎源码(已公布获奖)
话题讨论:怎样阅读InnoDB存储引擎源码

InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件。

本期讨论话题:
    1.理解MySQL内核对于DBA的重要性;
    2.怎样阅读InnoDB存储引擎源码;
    3.说说读完试读章节后您的感想?

活动时间:2014年5月20日-6月5日

活动规则: 阅读我们提供的图书试读章节来参加活动,写试读心得或根据提供的话题参与讨论!

活动奖励:针对以上任意问题跟帖回答,我们会在讨论结束后,择优挑选5名网友赠送《MySQL内核:InnoDB存储引擎 卷1》这本书作为奖励。

图书介绍:
                              
作  者:姜承尧,蒋鸿翔,饶珑辉,等著
出版 社:电子工业出版社
出版时间:2014-05-01
图书简介:《MySQL内核:InnoDB存储引擎 卷1》由资深MySQL专家亲自执笔,在以往出版的两本InnoDB介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,希望通过本书帮助用户真正了解一个数据库存储引擎的开发。

图书试读链接:http://wenku.it168.com/d_001447523.shtml

活动已结束,恭喜以下五位获奖者:
buptdream
myownstars
insnowind
2009532140
uang520



作者: 2009532140    时间: 2014-5-20 13:15
喔..................
应该是本不错的书!
先占楼,准备阅读以下!
作者: 2009532140    时间: 2014-5-20 13:17
正好想学学mysql 数据库,
作者: buptdream    时间: 2014-5-20 13:35
本帖最后由 buptdream 于 2014-5-27 11:57 编辑

好活动,支持

1.理解MySQL内核对于DBA的重要性;
    如果精通内核对于搞数据库的人来说,可以称得上专家。开源数据库的一个最大好处就是可以去读源码,根据自己的需求去进行个性化的开发,毕竟数据库根据业务最基本的也要分为OLTP,OLAP,系统类型的不同,决定了数据很多参数配置以及核心参数的调整也是不一样的。在调整这些参数前,如果不明白实现的原理,只是根据经验值去调整肯定是不行的,参数可以进行调整,比如减少事务表的长度,修改并发时程来减少锁争用等,如果不明白源码里面的实现方式,是没有办法去修改的,调整参数无法完成的个性化需求,可以通过源码去实现。
    如果商业数据库比如oracle开放源码,很多的核心原理得到确认,对于深入学习数据库的人来说是个很大的财富,但是这是不可能实现的。mysql的开源化,对于学习mysql来说个很大的宝库,从源码里可以看出各个引擎的实现方式,而这些核心的原理在很多文档里是看不到的。以前pub里有个大牛说过搞开源化的数据库,如果看不懂源码的话,只能在表面上做工作,搞几年下来,基本就是靠运维,部署,高一些读写分离的架构层面的运维工作,不能称其为专家。
     作为MYsql DBA,如果精通源码,对于数据库的理解会深入很多,阿里也是从源码上修改,可以支持自己的业务需求。MYSQL这几年的发展也是靠很多的人根据自己的需要写了很多分享行的代码,可见开源化对于mysql的发展起到重要作用。优秀的DBA需要去阅读一些代码,当比较极端的业务需求需要去定制化数据库的一些功能时,可以从源码级别开发设计适合自己的引擎,mysql在引擎方面预留了很多的接口,可以进行个性化开发。目前我能了解的有网易研究院搞的TNT引擎。
2.怎样阅读InnoDB存储引擎源码;
   接触mysql也有几年的时间,很多时候都是阅读官方文档,没有真正的从源码去分析和阅读。以前阅读过姜承尧的innodb引擎这本书,是从一些核心原理上进行讲解,非常深入和精彩。要想InnoDB存储引擎源码需要C和C++的基础,自己能够编译一些程序,确保在修改后能够编译成功。我看过InnoDB存储引擎源码,发现里面的源码量非常大,如果要通读一遍的话,需要很长的时间,而且也非常枯燥,读一些就难以坚持下去。
    经过一段时间的积累,我感觉是从一些比较常见的问题去阅读,比如读写,异步的实现,lock,latch,mutex的实现方式,还有内存管理的一些链表等去阅读,每天抽时间读一读,就当是消遣一下。对于索引,实务,缓存等内核的源码一点一点的去看,带着理论知识去理解源码,反过来用源码的实现原理来纠正和补充理论知识,在这个过程中可以快速提高自己。
3.说说读完试读章节后您的感想?
    这是本非常好的书,可以对着作者以前写的innodb引擎的那本书一起结合看。试读章节主要分享了两章内容:
     第一章是概括性的知识,介绍了INNODB存储引擎的历史,如果知道的同学可以直接略过,后续内容对于源码的版本,风格,编译的方式做了一些介绍,主要是给我们一个源码阅读的认识,对于作者分析的源码方法十分认可,按照层次去阅读,这样可以非常容易的去理解。对于我们这些源码分析的初学者来说可以按照作者的建议,进行按部就班的阅读。
     第二章介绍了一些INNODB存储引擎的内存管理的实现,基本数据结构,对于后续做个铺垫。以前都是直接学习理论,记住了这些的内容就可以了,现在从源码角度可以去看看实现方式。这些内容如果前期学的比较深入的话,可以大体看看,如果对这些链表,内存管理方法不是很清楚的可以好好读读,毕竟这是深入学习的基础。
      这是分析源码方式的卷1,后续期待作者更多精彩的内容分享。让更多的人喜欢并且可以阅读源码,为开源化数据库作出贡献。


作者: qingduo04    时间: 2014-5-20 17:16
好活动,支持
作者: hongchao126    时间: 2014-5-20 18:09
对innodb进行了深入的分析,感觉貌似还不错
作者: jxzkin    时间: 2014-5-20 20:15
1.理解MySQL内核对于DBA的重要性;
是非常重要,但还是觉得不能为了阅读源码而阅读,技术人员永远是为业务服务的。

不过做为一般般的DBA的我还是非常有兴趣,目的也非常明确,更加深入数据库原理,如有机会最好能根据业务特点,定制适合自己的MySQL分支,个人观点。
作者: jxzkin    时间: 2014-5-20 20:15
1.理解MySQL内核对于DBA的重要性;
是非常重要,但还是觉得不能为了阅读源码而阅读,技术人员永远是为业务服务的。

不过做为一般般的DBA的我还是非常有兴趣,目的也非常明确,更加深入数据库原理,如有机会最好能根据业务特点,定制适合自己的MySQL分支,个人观点。
作者: jxzkin    时间: 2014-5-20 20:18
话说转做MySQL已经一年多了,没有C/C++底子,研究这个是个头疼的事情
作者: oracle_cj    时间: 2014-5-20 22:08
支持。。。
作者: wjlcn    时间: 2014-5-20 22:43
对dba来说,理解mysql内核还是挺重要的,很多时候文档只是描述了一些概念,通过测试只是了解到mysql的一些现象.
比如mysql的关联查询 、 一些函数的算法等, 通过阅读文档 或者 测试环境验证, 看到的只是表面现象, 却不明白正真是怎么实现的.
去看看源码,了解一下mysql的内核,或许有想要的答案.
作者: yunas    时间: 2014-5-21 00:13
好书齐分享。
作者: uang520    时间: 2014-5-21 08:47
3.说说读完试读章节后您的感想?
感觉挺不错的一本书,本书总体排版风格感觉有点像UNIX环境高级编程。试读2章,觉得本书深入细致的讲解了mysql数据库内核源码细节实现。关系型数据库发展至今越来越成熟,主流关系型数据库的主要功能越来越趋于一致,所以深入理解本书可以对所有关系型数据库有一个更为深刻的认识和理解。作为维护人员时常会遇到一些性能之类的问题,通过学习本书有利于我们进行问题排除和总结。作为数据库开发人员可以把这本书作为参考手册。

作者: twtdata    时间: 2014-5-21 10:22
mysql的含金量的确是在不断增加,从招聘开出的薪水可以看出来。但mysql的前景,或者说下一步怎么走是个问题?尤其是在这么多分支的情况下。
作者: dingzihan    时间: 2014-5-21 10:39
我正要学习,支持
作者: cysummery    时间: 2014-5-21 11:06
作者姜承尧,正在看他的《MySQL技术内幕innodb存储引擎》,书里已经涉及部分源码,不知内核这本书在内核源码方面深入了多少,很好奇,看完这本再瞧瞧这本内核的。不过,真心希望所学有所用,而对于初学者,只看一遍实在是记不住,预计得看几遍加上实践才能领略积分精髓啊
作者: lixunix    时间: 2014-5-21 11:58
首先我觉得目的先要明确,看源码的目的是为了在更高层次上去理解某个场景的出现,比如锁、执行计划,查看的目的不是为了开发,所以目的明确的话,我觉得查看源码就限于看懂某个函数的实现能够用GDB跟踪某些函数这样我觉得就够了,不需要去更加深入的去看INNODB的代码规范以及更加细节的东西,因为我犯过错,在这些上面花了很长时间,但是后来觉得这些东西应该是为了做出能够在生产上使用的产品才会去涉及的,我根本没必要去更加深入的去了解。不如说我执行一条SQL,使用了全表扫描的时候,我用SHOW SESSION STATUS 看到Handler_read_first和Handler_read_rnd_next的统计值会增加,我就可以用GDB去跟踪相应的函数,然后统计下,一共调用的次数是不是和这个统计值相等,这样你就会真正的理解到这些值到底是什么时候统计的。


开车的不一定用懂修车,会点修车技术总是有好处的,但是会修车并不能使你的驾驶技术提高,唯一能够提高驾驶技术的就是多操作多实战。。
作者: uang520    时间: 2014-5-21 14:21
lixunix 发表于 2014-5-21 11:58
首先我觉得目的先要明确,看源码的目的是为了在更高层次上去理解某个场景的出现,比如锁、执行计划,查看的 ...

你是从运维角度出发的。没错,每个人的时间是一定的,维护工作出现的问题也是不可预估的,所以处理问题就需要依靠积累。所以说维护人员比较吃经验,就是这个道理。
如果是出于开发和学习的目的,我倒觉得应该首先要全局把握整本书的内容,然后在细细研究每处细节。所以开发不是经验积累出来的,而是研究出来的。
作者: kofjk1000    时间: 2014-5-21 17:00

1.已我自己理解,目前来看,mysql大部分的应用其实是用不到那么高深的,研究内核大部分都是兴趣使然,当然你对内核了解肯定会对你在mysql方面加分。

2.试过eclipse开打源码,但是不知道从哪儿研究起。之后由于时间关系,一直没继续跟进。不过既然要从事mysql很久的话,必然需要进一步发现的。

3.没有一定的C或者程序之类的数据结构的基础。看着确实有点头疼。
作者: xgghxkhuang    时间: 2014-5-21 22:16
MySQL 发展很好,目前薪水不错
作者: xgghxkhuang    时间: 2014-5-22 20:31
支持。   
作者: xgghxkhuang    时间: 2014-5-22 20:33
mysql可以研究源代码,了解他的细节
作者: hc_face    时间: 2014-5-23 04:32
好活动,支持,如果有视频公布出来就好了,大家不一定都有时间参加
作者: myownstars    时间: 2014-5-23 09:44

1.理解MySQL内核对于DBA的重要性;
这个问题见仁见智,有一种观点是Oracle没有开源但依旧促生很多优秀DBA,而即便懂一点mysql内核也未必对有多大帮助(你敢轻易修改源码么),就好比你了解发动机构造原理却不见得要亲自修车;
事情分两面,oracle本身提供的诊断工具包足够丰富,掌握它们便可应付大部分日常问题,再加上MOS完善的技术支持,所以大部分情况下无需熟谙底层;
而mysql这方面则可怜很多(performance_schema算是个改进),一旦有比较棘手的问题,经常借助oprofile/gdb等工具,因此了解一下内核构造(至少是API调用流程)还是很有必要的;
另外,很多大型互联网企业都需要根据业务定制mysql数据库,这个时候肯定需要精通内核的高手了;
最后看个人发展定位,我相信不懂mysql内核一样可以成为优秀DBA,而精通mysql内核肯定是优秀DBA;
大而全 or 深而精,都有很好的钱景;


2.怎样阅读InnoDB存储引擎源码;
关于这个问题我曾在作者的个人网站上提问过,得到回答:见我下本新书~~~(果然没有食言);
个人经历:没有高人指点的情况下愣是直接阅读源码,会比较惨痛的;


3.说说读完试读章节后您的感想?
看完试读章节和目录,感觉这本书是提纲挈领的,对innodb各个特性做了总结但又没太过细化;
书名最后加上”卷1”,说明这个系列才刚开始;
如古人作文章,这个只是破题,作者本人的mysql功力毋庸置疑,期待更多精彩大作的面世;

最后,赠我一本书吧!!!!!


作者: ri6789    时间: 2014-5-23 10:37
DBA可能觉得读点源码就能提高自己在“江湖”上的地位。诚然某些人通过这些方法达到了提高自己影响力。但是从长远来看,源码的结合是为了更好的使用MySQL数据库,从而在数据库架构设计与应用时给出最好的解决方案。我看过一些博客或微博对于InnoDB存储引擎源码的分析,但是感觉大多存在很多问题,他们仅仅关注的是如何实现而不是为什么需要这样实现,这又会导致对于源码的理解存在很多片面性。你常会看到这样的抱怨:InnoDB存储引擎这个设计好傻,那个设计好呆等。空谈源码没有任何意义,看源码而不尝试去修改,从而使得MySQL数据库运行的更为高效也不符合开源的精神。数据库本身就是一个存储,没有前端应用的配合是无法单独使用的。因此,个人觉得若有人真的痴迷于数据库的底层开发,其必须与前端应用相结合,否则那最多只是研究生阶段的一个研究方向而已
作者: myownstars    时间: 2014-5-23 13:41
ri6789 发表于 2014-5-23 10:37
DBA可能觉得读点源码就能提高自己在“江湖”上的地位。诚然某些人通过这些方法达到了提高自己影响力。但是从 ...

口气这么像作者原文捏
作者: ri6789    时间: 2014-5-23 14:41
myownstars 发表于 2014-5-23 13:41
口气这么像作者原文捏

  就是摘的
作者: lhyangel2012    时间: 2014-5-23 15:03
我买了作者之前的一本书,,,里面有些代码跑不通,,,也许是因为数据库版本的原因吧
作者: fly518    时间: 2014-5-23 16:36
1、精通了原理,数据库调优就自然会了,这个是我从oracle dba日记作者老白的书里看到的观点,我认为非常准确,所以我现在都是理解原因放在第一位,原理懂了,各种数据库就了解的差不多了。
2、mysql数据库目前的诊断工具不是很丰富,所以最好能阅读代码,按照自己的需要定制一些代码,我目前就是想添加一些代码,方便自己查找问题
3、没有必要一开始就通读所有代码,我认为可以从自己需要修改的代码开始了解,慢慢来,一步步修改,这样才有成就感,才能坚持下去
作者: xgghxkhuang    时间: 2014-5-24 17:56
围观。  
作者: dcswinner    时间: 2014-5-25 14:41
学习中。
作者: maolinxie    时间: 2014-5-26 10:37
想去买一本来看看
作者: 释怀355    时间: 2014-5-27 13:51
buptdream 发表于 2014-5-20 13:35
好活动,支持

1.理解MySQL内核对于DBA的重要性;


作者: lhyangel2012    时间: 2014-5-27 14:42
这是第三版了,,,感觉作者在变着法的挣钱,,,我不知道这第三版和第二版有什么区别,,,请作者出来指明,,,
作者: lhyangel2012    时间: 2014-5-27 14:45
刚转mysql,我看还是先看基础的吧,,,前两版搞差不多了,,,再看这版,,,循序渐进

作者: lhyangel2012    时间: 2014-5-27 14:46
uang520 发表于 2014-5-21 14:21
你是从运维角度出发的。没错,每个人的时间是一定的,维护工作出现的问题也是不可预估的,所以处理问题就 ...

有一定的道理,,,研究是需要时间成本的,,,所以在一个宽松的环境工作室非常重要的,,,有一定的时间来研究新技术,,,发现问题的更好的解决办法,,,
作者: insnowind    时间: 2014-5-27 15:05
作为一名DBA,可以在不需要太多掌握应用开发的情况下,全部掌握Oracle的核心技术,反倒单纯使用Oracle的开发人员,通常掌握不了Oracle的核心。在Oracle数据库平台上,DBA对数据库有第一级的话语权,DBA与应用开发者有着较清晰的界限。

在MySQL数据库平台上,事情发生了变化。由于MySQL的特性决定,DBA和应用设计者被赋予了更多的可操作性,工作职责会互相入侵,作为一名MySQL DBA,你无法不去更多的关注应用业务,数据库的架构、引擎的选择等等都由应用决定;作为应用的设计者和开发者,也比从前更需要关注数据库,应用期待符合预期的数据库支撑。MySQL的DBA会发现,自己的话语权被应用设计者夺走了一部分,不再像以前那么重要了。

这个时候,作为MySQL DBA,要想重新树立自己的核心竞争力,只有掌握MySQL源代码。一方面可以加深自己对数据库的了解,更重要的另一方面,你可以试图去解决应用导致的数据库本身不足引起的缺陷,职责上这是应用设计开发者解决不了的。

阅读InnoDB引擎源代码,和阅读任何系统源代码没有区别。也许刚开始,你只是试图通过查看部分代码细节来分析你面对的数据库问题现象,但如果你希望真正掌握数据库,最终你肯定会走上通读代码的道路。

面对一个系统大量的源代码,通常往往会没有头绪,这个时候从目录结构开始,逐次结合文档进行系统模块、系统层次的划分,目的是了解哪些代码文件负责完成了哪些功能,所谓物理结构。

接下来,就可以开始切入逻辑结构了,从上往下进行阅读,先掌握总体架构,再逐一细节,一层一层细化,代码是要阅读多次的。

阅读了试读章节,发现本书作者代码阅读方法与个人基本一致,作者已经对代码物理结构和逻辑结构进行了对应的描述,可以减少读者去摸索的时间,相信后续章节应该是对InnoDB引擎各种机制的详细代码剖析,那会是MySQL和本书最精彩的部分,期待。
作者: lhyangel2012    时间: 2014-5-28 09:59
cysummery 发表于 2014-5-21 11:06
作者姜承尧,正在看他的《MySQL技术内幕innodb存储引擎》,书里已经涉及部分源码,不知内核这本书在内核源码 ...

嘿嘿,,,我也在看,,,这本书确实好书,,,但是有些地方不太懂,,,具体跑的时候出错,,,想和你交流下 ,,,
作者: cysummery    时间: 2014-5-29 13:52
lhyangel2012 发表于 2014-5-28 09:59
嘿嘿,,,我也在看,,,这本书确实好书,,,但是有些地方不太懂,,,具体跑的时候出错,,,想和你交 ...

欢迎~一起讨论共同进步,不过话说我第一遍还没看完,计划第一遍看懂,第二遍动手,第三遍接受并加自己的思考。
作者: lhyangel2012    时间: 2014-5-29 13:58
cysummery 发表于 2014-5-29 13:52
欢迎~一起讨论共同进步,不过话说我第一遍还没看完,计划第一遍看懂,第二遍动手,第三遍接受并加自己 ...

O,,,感觉是最好边看边动手好点,,,
作者: lujinke    时间: 2014-5-30 12:03
lhyangel2012 发表于 2014-5-28 09:59
嘿嘿,,,我也在看,,,这本书确实好书,,,但是有些地方不太懂,,,具体跑的时候出错,,,想和你交 ...

最好的书是dev.mysql.com上面的在线文档
作者: lhyangel2012    时间: 2014-5-30 12:57
lujinke 发表于 2014-5-30 12:03
最好的书是dev.mysql.com上面的在线文档

mysql的初学者,,,还是先看下介绍的书吧,,,
作者: 2009532140    时间: 2014-6-4 12:55
1.理解MySQL内核对于DBA的重要性;
为了更好的了解数据库,很多人挖掘数据库的源代码。什么MDB,GDB 全都用上了,可以说无所不用其极。至于原因很简单:就是为了在数据库报出内部的错误信息的时候能一眼定位问题的所在。
另外的一个原因:数据库的性能调试,如果能深入的了解数据库的原理,才能做到不头疼医头,脚疼医脚。这一切的高大上的工作,都离不开内部原理的了解。而了解内部原理的最好办法就是读读源代码。
——————————————————————————
2.怎样阅读InnoDB存储引擎源码;
要是我的话,我会从数据库的内存结构与处理上来了解。
这部分内容较为深入,涉及很多内部算法,锁栓等等。
——————————————————————————
3.说说读完试读章节后您的感想?
对于新手的第一个亮点:
1.4 代码编译,这个对于从来没搭建环境的新手来说是个不错的指导,这部分网上找的资料也不是很完善。
第二章,果然是内存部分.但不知道后面的章节对内存是否还有介绍说明。貌似第二章不是特别丰满哈
作者: buptdream    时间: 2014-6-9 17:49
活动结束了
作者: myownstars    时间: 2014-6-11 07:23
   说好的 送书捏




欢迎光临 ITPUB论坛-专业的IT技术社区 (http://www.itpub.net/) Powered by Discuz! X3.2