博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Efficiently traversing InnoDB B+Trees with the page directory--slot
阅读量:6829 次
发布时间:2019-06-26

本文共 5024 字,大约阅读时间需要 16 分钟。

Efficientlytraversing InnoDB B+Trees with the page directory

1、the purpose of the page directory

As described in the posts mentioned above,all records in INDEX pages are linked together in a singly-linked list inascending order. However, list traversal through a page with potentiallyseveral hundred records in it is very expensive: every record’s key must becompared, and this needs to be done at each level of the B+Tree until therecord sought is found on a leaf page.

Index page页中的全部记录都以单链表递增的形式串联。可是在一页中以链表的形式检索记录代价非常大:每个记录的key必须比較,这个动作须要在全部高度的B+树上进行,知道在叶子节点找到记录。

 

The page directory greatly optimizes thissearch by providing a fixed-width data structure with direct pointers to 1 ofevery 4-8 records, in order. Thus, it can be used for a traditional binarysearch of the records in each page, starting at the mid-point of the directoryand progressively pruning the directory by half until only a single entryremains, and then linear-scanning from there. Since the directory iseffectively an array, it can be traversed in either ascending or descendingorder, despite the records being linked in only ascending order.

Page directory通过提供一个固定大小的数据结构(这个结构指向4-8个记录中的一个)优化查询。

因此可以在每一个页中使用二叉查找的方法。依据slot折半查找,知道仅仅剩下一个条目。然后从这个条目开水线性扫描。因为directory是一个高效的数组。可以以递增或者递减的顺序进行扫描。即使记录仅仅是以递增的顺序链接。

2、The physical structure of the pagedirectory

The structure is actually very simple. Thenumber of slots (the page directory length) is specified in the first field ofthe INDEX header of the page. The page directory always contains an entry forthe infimum and supremum system records (so the minimum size is 2 entries), andmay contain 0 or more additional entries, one for each 4-8 system records. Arecord is said to “own” another record if it represents it in the pagedirectory. Each entry in the page directory “owns” the records between theprevious entry in the directory, up to and including itself. The count ofrecords “owned” by each record is stored in the record header that precedeseach record.

Slots的个数在该页的index header部分的第一域指定。Page directory至少包括infimum和supremum的slot。

因此directory最少有2个slot。一个记录假设own其它记录,表示在这个slot里。每一个slot管理本身和上一个slot中的记录之间的记录。记录owned的个数存在每一个记录的record header部分。

 

The page-directory-summary mode of innodb_spacecan be used to view the page directory contents, in this case for a completelyempty table (with the same schema as the 1 million row table used in A quickintroduction to innodb_ruby), showing the minimum possible page directory:

 

$ innodb_space -f t_page_directory.ibd -p 3page-directory-summary

slot                       offset          type       owned   key

0             99     infimum       1      

1         112     supremum      1 

 

If we insert a single record, we can seethat it gets owned by the record with a greater key than itself that has anentry in the page directory. In this case, supremum will own the record (aspreviously discussed, supremum represents a record higher than any possible keyin the page):

 

$ innodb_space -f t_page_directory.ibd -p 3page-directory-summary

slot   offset      type          owned   key

0      99      infimum          1      

1      112     supremum        2      

 

The infimum record always owns only itself,since no record can have a lower key. The supremum record always owns itself,but has no minimum record ownership. Each additional entry in the pagedirectory should own a minimum of 4 records (itself plus 3 others) and amaximum of 8 records (itself plus 7 others).

Infimum记录总是仅仅own自己,由于是最小记录。

Supremum记录总是own自己。

除了infimum和supremum的slot,每一个slot都会至少管理4个记录(itself+3others)。最多管理8个。

 

To illustrate, each record with an entry inthe page directory (bolded) owns the records immediately prior to it in thesingly-linked list (K = Key, O = Number of Records Owned):

 

3、Growth of the page directory

Once any page directory slot would exceed 8records owned, the page directory is rebalanced to distribute the records into4-record groups. If we insert 6 additional records into the table, supremumwill now own a total of 8 records:

一旦一个slot管理的记录超过8个,slot就会将之分成4个记录为一组。假设我们插入6个记录,supremum slot会拥有8个记录

$ innodb_space -f t_page_directory.ibd -p 3page-directory-summary

slot   offset      type          owned   key

0      99      infimum          1      

1      112     supremum        8    

 

The next insert will cause are-organization:

在插入一个记录会引起重组

$ innodb_space -f t_page_directory.ibd -p 3page-directory-summary

slot   offset      type          owned   key

0      99      infimum          1      

1      191     conventional      4      

2      112     supremum        5   

 

4、A logical view of the page directory

At a logical level, the page directory (andrecords) for a page with 24 records (with keys from 0 to 23) would look likethis:

Infimum总是仅仅own自己,该slot的n_owned=1

Supremum总是owns一个页中最后几个记录,个数能够小于4.

其它slot至少有4个记录最多8个。

逆序排放。从16376个字节開始。即FIL trailer的開始位置。

 

Take note that:

 

Records are singly linked from infimum tosupremum through all 24 user records, as previously discussed.

Approximately each 4th record is enteredinto the page directory, represented in the illustration both by bolding thatrecord and by noting its offset in the page directory array represented at thetop of the illustration.

The page directory is stored “backwards” inthe page, so is reversed in this illustration compared to its ordering on disk.

记录是单链表形式链接

http://blog.jcole.us/2013/01/

你可能感兴趣的文章
天猫超级品牌日联手荣耀 天猫开启互联网手机营销下半场
查看>>
五峰山过江通道芒稻河特大桥水中墩承台浇筑完成
查看>>
江苏镇江分级诊疗健康服务体系初步构建
查看>>
花椒六间房“花房之夜”落幕 全新升级不止心动
查看>>
编程史上最杰出的5位程序员,网友:没有一个中国人!
查看>>
分布式中的一致性算法:Paxos和Raft比较
查看>>
富士康将重新考虑在美国制造液晶屏的计划
查看>>
Ajax请求后台数据
查看>>
为什么聊天机器人表现不尽如人意
查看>>
动静分离之上传CDN
查看>>
js捕获404错误
查看>>
支付宝客户端架构分析:自动化日志收集及分析
查看>>
我的同事金司机出的 5 道 iOS 多线程“面试题”
查看>>
DDFE 技术周刊(第十九期)2017.3.22
查看>>
react-native中生成二维码和分享图片
查看>>
BCH 挖矿程序 Bitcoin-ABC 分叉漏洞剖析
查看>>
30分钟入门MyBatis
查看>>
我入门 Python 后总结的基础教程
查看>>
2018 年娱乐逗比总结:小烜有话说 | 2018 与我的技术之路
查看>>
Redux中间件对闭包的一个巧妙使用
查看>>