暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

He3DB本地盘设计(二)

原创 手机用户1402 2023-11-27
256

总的来说,He3db的本地盘的功能非常简单,就是保存内存中置换出来的数据页。当数据页需要再次被加载到内存的时候,会先到本地盘查找,如果存在则直接从本地盘读取数据即可。

本地盘的数据会以1G为单位划分成不同的文件。从内存中置换出的所有数据页,无论这些数据页是否属于同一张表,都会按照一定的规则存放到本地盘,这个规则就是:
(1)如果已存在的文件中存在空洞,则将数据直接存放在空洞空间中;
(2)如果不存在,则在最后一个文件的末尾添加这些数据;
(3)如果最后一个文件的大小已经达到1G,则重新创建一个文件并将数据写入。本地盘的所有数据会以一张表的形式进行管理。

一般情况下,根据数据页的块号(blockNumber),可以计算出其在数据目录中所属的数据文件以及在文件中的偏移,但是在本地盘中,无法根据块号定位数据页的位置。因此在我们将数据页写入到本地盘的时候,需要记录数据页到本地盘存储位置(即文件以及在文件中的偏移)的映射。

此外,我们还需要记录空洞信息。当我们执行drop或者truncate操作时,除了要删除在数据目录中的数据文件和数据页外,我们还要删除存放在本地盘的相关数据页。在处理本地盘的数据时,我们并不会直接对文件进行操作,而是将数据页到本地盘存储位置的映射删除掉,同时将空置出来的本地盘存储位置信息记录到空洞信息链表中,当有新的数据页被置换到本地盘时,如果空洞信息链表不为空,则从链表上获取一个位置信息,并将新置换的数据页写到到这个位置的空间上即可。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论