TokuDB的几个黑科技工具

刚过完年,美女程序员静静想学习下TokuDB相关技术,从何处入手呢?TokuDB的技术资料可是出了名的少!
本篇就给大家介绍下两个”黑科技“工具,来帮助我们更深入的了解TokuDB。

黑科技之tokuftdump

此工具用来dump一个Fractal-Tree结构的数据文件。

这样我们就可以很直观的知道我写入的数据在磁盘上是个什么样子(disk layout)。

废话少说,一切尽在“栗子”中。

创建表t1:

CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `b` int(11) DEFAULT NULL,
  PRIMARY KEY (`a`)
) ENGINE=TokuDB

写入数据并刷到磁盘:

mysql> INSERT INTO t1 VALUES(1,1);
mysql> INSERT INTO t1 VALUES(2,2);
mysql> INSERT INTO t1 VALUES(3,3);
mysql> UPDATE t1 SET b=4 WHERE a=3;
mysql> FLUSH TABLES t1;

使用tokuftdump进行数据dump:

./bin/tokuftdump data/_test_t1_main_90_2_1b.tokudb
...
{key={len=5 data="\000\001\000\000\000"} cI: xid=0000000000000000 val={len=5 data="\375\001\000\000\000"}}
{key={len=5 data="\000\002\000\000\000"} cI: xid=0000000000000000 val={len=5 data="\375\002\000\000\000"}}
{key={len=5 data="\000\003\000\000\000"} cI: xid=0000000000000000 val={len=5 data="\375\003\000\000\000"} pI: xid=000000009a93a265 val={len=5 data="\375\004\000\000\000"}}

可以看到,在数据文件里每一行数据都是一个对,再维护一个MVCC结构就可以满足ACID特性了。

最后一条记录就是执行完UPDATE后MVCC:有2个val存在,xid(transaction id)不同,需要注意的是tokuftdump会对数据进行重组织展现,并非磁盘上的原生结构。

如果你想深入了解TokuDB的Fractal-Tree结构,这是个必不可少的工具,它不仅可以dump数据,还可以dump Fractal-Tree的全部信息,让底层存储结构“跃然屏上”。

黑科技之tdb_logprint

此工具用来dump TokuDB的redo-log,让我们了解TokuDB redo-log是如何组织的。

接下来我们看下执行完刚才的SQL后,窥探下redo-log里又是些什么鬼:

./tdb_logprint < data/log000000000002.tokulog27

xbegin                   'b': lsn=64 xid=144,2 parentxid=144,0 crc=97572838 len=53
enq_insert               'I': lsn=65 filenum=3 xid=144,2 key={len=15 data="./test/t1-main\000"} value={len=31 data="./_test_t1_main_90_2_1b.tokudb\000"} crc=d259724f len=95
fcreate                  'F': lsn=66 xid=144,2 filenum=7 iname={len=30 data="./_test_t1_main_90_2_1b.tokudb"} mode=0666 treeflags=0 nodesize=4194304 basementnodesize=65536 compression_method=11 crc=3755db8b len=95
xcommit                  'C': lsn=67 xid=144,2 crc=ffad0139 len=37
change_fdescriptor       'D': lsn=68 filenum=7 xid=144,0 old_descriptor={len=0 data=""} new_descriptor={len=18 data="\011\000\000\000\001\000\000\004\000\005\000\000\000\001\004\000\000\000"} update_cmp_descriptor=true crc=acef9cdb len=68
xcommit                  'C': lsn=69 xid=144,0 crc=ffa0c139 len=37
fclose                   'e': lsn=70 iname={len=32 data="./_test_t1_status_90_1_1b.tokudb"} filenum=5 crc=73c0dbf1 len=61
fclose                   'e': lsn=71 iname={len=30 data="./_test_t1_main_90_2_1b.tokudb"} filenum=7 crc=060f6b9f len=59
fopen                    'O': lsn=72 iname={len=32 data="./_test_t1_status_90_1_1b.tokudb"} filenum=9 treeflags=0 crc=c8de90f1 len=65
fopen                    'O': lsn=73 iname={len=30 data="./_test_t1_main_90_2_1b.tokudb"} filenum=11 treeflags=0 crc=b38239c5 len=63
xbegin                   'b': lsn=74 xid=146,0 parentxid=0,0 crc=9a083238 len=53
enq_insert               'I': lsn=75 filenum=11 xid=146,0 key={len=5 data="\000\001\000\000\000"} value={len=5 data="\375\001\000\000\000"} crc=658a7b0b len=59
xcommit                  'C': lsn=76 xid=146,0 crc=ff98be39 len=37
xbegin                   'b': lsn=77 xid=148,0 parentxid=0,0 crc=8602ef38 len=53
enq_insert               'I': lsn=78 filenum=11 xid=148,0 key={len=5 data="\000\002\000\000\000"} value={len=5 data="\375\002\000\000\000"} crc=59dad00b len=59
xcommit                  'C': lsn=79 xid=148,0 crc=ff9f3339 len=37
xbegin                   'b': lsn=80 xid=150,0 parentxid=0,0 crc=821b8438 len=53
enq_insert               'I': lsn=81 filenum=11 xid=150,0 key={len=5 data="\000\003\000\000\000"} value={len=5 data="\375\003\000\000\000"} crc=926d5d14 len=59
xcommit                  'C': lsn=82 xid=150,0 crc=ff93b439 len=37
xbegin                   'b': lsn=83 xid=152,0 parentxid=0,0 crc=8e1ca138 len=53
enq_insert_multiple      'm': lsn=84 src_filenum=11 dest_filenums={num=1 filenums="0xb"} xid=152,0 src_key={len=5 data="\000\003\000\000\000"} src_val={len=5 data="\375\004\000\000\000"} crc=ecb1c6f0 len=67
xcommit                  'C': lsn=85 xid=152,0 crc=ff962939 len=37
fclose                   'e': lsn=86 iname={len=30 data="./_test_t1_main_90_2_1b.tokudb"} filenum=11 crc=8709a890 len=59
fclose                   'e': lsn=87 iname={len=32 data="./_test_t1_status_90_1_1b.tokudb"} filenum=9 crc=c43070f7 len=61
begin_checkpoint         'x': lsn=88 timestamp=1455623796540257 last_xid=153 crc=470dd9ea len=37
fassociate               'f': lsn=89 filenum=0 treeflags=0 iname={len=15 data="tokudb.rollback"} unlink_on_close=0 crc=8606e9b1 len=49
fassociate               'f': lsn=90 filenum=1 treeflags=4 iname={len=18 data="tokudb.environment"} unlink_on_close=0 crc=92dc4c1c len=52
fassociate               'f': lsn=91 filenum=3 treeflags=4 iname={len=16 data="tokudb.directory"} unlink_on_close=0 crc=86323b7e len=50
end_checkpoint           'X': lsn=92 lsn_begin_checkpoint=88 timestamp=1455623796541659 num_fassociate_entries=3 num_xstillopen_entries=0 crc=5cde4ff2 len=45

WOW,redo-log其实就是FT(TokuDB底层存储引擎缩写,ft-index)所有操作指令的回放。

当我们执行CREATE TABLE的时候,FT执行指令是:

1) 开启事务
2) 把创建的表信息记录到元数据库 tokudb.directory
3) 创建表文件
4) 提交事务

创建表的过程是不是很清晰了?

接着看写数据,FT执行的指令:

1) 打开表文件
2) 事务开始
3) 写入记录
4) 事务提交
...
5) 关闭表文件
...

在redo-log的最后我们还看到checkpoint信息,包括checkpoint时的lsn以及时间等。

通过tdb_logprint,我们可以很轻松的知道TokuDB底层到底在干什么,如果你想了解TokuDB底层行为,请开启你的tdb_logprint之旅吧。

如果你对TokuDB某个细节不清楚,请执行下你的SQL,结合这两个工具,再加上源码,基本可以做到胸中有数了。

静静你可以静静的学习TokuDB了 :D

时间: 2024-11-05 09:01:00

TokuDB的几个黑科技工具的相关文章

MySQL · TokuDB · TokuDB之黑科技工具

TokuDB之黑科技工具 刚过完年,美女程序员静静想学习下 TokuDB 相关技术,从何处入手呢?TokuDB的技术资料可是出了名的少! 本篇就给大家介绍下两个"黑科技"工具,来帮助我们更深入的了解TokuDB. 黑科技之tokuftdump 此工具用来dump一个Fractal-Tree结构的数据文件. 这样我们就可以很直观的知道我写入的数据在磁盘上是个什么样子(disk layout). 废话少说,一切尽在"栗子"中. 创建表t1: CREATE TABLE `

重构后的Firefox网络监视工具,里边加了什么黑科技?

本文讲的是重构后的Firefox网络监视工具,里边加了什么黑科技?, Firefox开发工具的早期版本已经在Firefox中提供了网络监视器工具,任何关心页面加载性能和网页运行速度的用户都非常喜欢这个工具.不过该工具最近被进行了广泛的重构(项目代号为Netmonitor.html),这篇文章旨在向大家解释如何设计新架构以及你如何使用重构之后的新技术. 以下就是Firefox Developer Toolbox中运行的网络监视器用户界面. 目标 重构的主要目标之一是在标准Web技术之上重建整个工具

如丝般顺滑的2017阿里双11黑科技曝光

2017双11全球狂欢节,阿里再创奇迹,成交金额1682亿,交易峰值32.5万/秒,支付峰值25.6万/秒,数据库处理峰值4200万次/秒. 双11前夕,阿里巴巴集团CTO行癫就给阿里两万多位工程师下了一个很新鲜的KPI--"双11晚上,大家的主要任务是喝茶." 能如此淡定喝茶的背后,除了无数阿里技术小二的才智与努力,还有很多阿里的黑科技支撑着这样世界超级工程.现在我们跟着阿里云云效一起来揭秘下有哪些基础设施黑科技? 蜻蜓--世界领先的大规模文件分发系统 黑科技指数: 解决痛点:大规模

多领域,多角度!隐藏版阿里双11“黑科技”大公开

系列文章陆续发布: 专访阿里巴巴徐盈辉:深度学习和强化学习技术首次在双11中的大规模应用 专访阿里巴巴林伟:三项世界级挑战背后的思考.实践和经验 专访阿里巴巴魏虎:揭秘阿里双11背后的全站个性化&商铺千人千面 价值1207亿的技术分享,你不能错过"2016双11技术创新"的九大理由! 8位阿里技术大V,解密阿里双11背后的黑科技 2016年双11是新零售的一个起点.交易额1207亿,成交额相比于去年增长32.32%(2015年的这一数字为912.17亿):开场30分钟,创造每秒

【在线论坛】8位阿里技术大V,解密阿里双11背后的黑科技

更多内容可参见:https://yq.aliyun.com/articles/64680    2016年双11是新零售的一个起点.交易额1207亿,成交额相比于去年增长32.32%(2015年的这一数字为912.17亿):开场30分钟,创造每秒交易峰值17.5万笔,每秒支付峰值12万笔的新纪录:菜鸟单日物流订单量超过4.67亿,创历史新高--马老师说:双11最大的挑战是不断扩展技术边界,去准备强大的技术解决人类尚未碰到的问题.每届双11对阿里来说都是一次大考,正是通过这样一次次的大考,阿里将双

颠覆你的认知,带你领略史上最为齐全的微软黑科技之旅

自从微软这次的发布会后,网上着实遍布不少对微软黑科技的描述,从这次大家熟知集显独显分离的Surface Book,到已经耳熟能详的Hololense和Kinect,微软与其背后的研究院似乎一直在默默的在黑科技中探索,不断刷新大家对科技的认知,一次次的将科幻带到现实,在这里,小编就带你领略史上最为齐全的微软黑科技之旅! 1.Microsoft Hololense 当之无愧,黑科技之首应属Hololense! 一个手势即可将影像"显示"到任何平面 虚拟显示与真实物体完美交互,设计.建模,让

优云亮相GOPS2017全球运维大会 “黑科技”获全场最高关注

2017年4月21日,GOPS――2017全球运维大会于深圳・圣淘沙酒店拉开帷幕.GOPS全球运维大会由高效运维社区(GreatOPS)和开放运维联盟(OOPSA)联合主办,由工信部信通院数据中心联盟(DCA)任指导单位.全球运维大会是国内第一个运维行业大会,面向互联网及传统行业.广大运维技术人员,传播先进技术思想和理念,分享业内最佳实践. 优云软件携运维黑科技"ChatOps"亮相,获得全场最高关注. ChatOps是什么? 优云 ChatOps是一款颠覆性的运维协同产品,基于即时信

手机淘宝上线三大“黑科技”功能:测鞋码、试彩妆、用户说

"鞋子偏大偏小?" 对于淘宝上的鞋类卖家来说,最头疼的可能就是咨询鞋码问题了,此类询单会提高客服的时间成本. 那些非标准码的卖家总会反复叮嘱,"鞋子偏小,请拍大一码."以至于,即便是正常码,也逼得商家郑重其事地写上:"鞋码正常". 这个问题或许马上就能解决.目前,手淘宝贝详情页正在内测"手机测鞋码"功能,光着脚用手机拍一张照,系统就能自动算出大小,从而对照适合的鞋码. 另外,随着淘宝对内容的重视,详情页中"用户说&q

女性成为未来世界的主宰 需要做到雌雄同体、玩转黑科技?

歌德有一句话:永恒的女性,引导人类前进.女性能否成为世界的主宰?何时成为世界的主宰? 2017年7月11日,全球女性创业者大会之"她未来"分论坛在杭州召开,论坛由BCG全球合作人兼董事总经理张越主持. <北京折叠>作者郝景芳,经济学人集团大中华区总裁刘倩,水木映画CEO陈葵,<中国企业家>杂志社社长.木兰汇理事长何振红先后围绕"她未来"做了主题分享. 阿里巴巴集团副总裁刘松与睿格VR创始人格欣.EventBank创始人纪景姝.Yi+创始人张默