首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite为什么使用自由职业者页页,因为它不包含任何信息

sqlite为什么使用自由职业者页页,因为它不包含任何信息
EN

Stack Overflow用户
提问于 2022-04-23 14:07:52
回答 1查看 70关注 0票数 0

根据SQLite文档https://www.sqlite.org/fileformat.html,自由职业者页面的功能如下:

数据库文件可能包含一个或多个不正在使用的页面。例如,当信息从数据库中删除时,可能会出现未使用的页面。未使用的页面存储在自由职业者上,并在需要其他页面时被重用。

自由职业者被组织成一个自由撰稿人主干页面的链接列表,每个主干页包含零或多个自由职业者叶页的页码。

自由职业者主干页面由一个4字节的大数整数组成.数组的大小与页面可用空间中的整数大小相同。最小可用空间为480字节,因此数组的长度总是至少为120个条目。自由职业者主干页面上的第一个整数是列表中下一个自由职业者主干页的页码,如果这是最后一个自由职业者主干页,则为零。自由职业者主干页面上的第二个整数是要遵循的叶页指针的数量。调用自由职业者主干页面L上的第二个整数。如果L大于零,则数组索引介于2和L+1之间的整数包含自由职业者页页的页码。

自由职业者页页不包含任何信息。为了减少磁盘I/O,SQLite避免读或写自由职业者的叶页。

如果自由职业者主干页面数组中的最后6个条目中的任何一个包含非零值,则3.6.0 (2008-07-16)之前的SQLite版本中的一个错误会导致数据库被报告为损坏。较新版本的SQLite没有此问题。但是,较新版本的SQLite仍然避免使用自由职业者主干页面数组中的最后六个条目,以便较新版本的SQLite创建的数据库文件可以被旧版本的SQLite读取。

自由职业者页面的数量作为一个4字节的大端整数存储在数据库头中,从文件开始的偏移量为36。数据库头还将第一个自由职业者主干页的页码存储为一个4字节的大端整数,从文件开始时偏移量为32。

我对这句话很好奇:

自由职业者页页不包含任何信息。为了减少磁盘I/O,SQLite避免读或写自由职业者的叶页。

既然它不包含任何信息,为什么SQLite必须使用它?有什么我遗漏的信息吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-23 17:25:16

自由职业者的叶页是空的,目前未使用的页面将从列表中删除,并在需要时合并到数据库中的b树中。所有需要跟踪的是它们在文件中的存在和位置,这是自由职业者主页所做的。在需要这些页面之前,这些页面的实际内容是不相关的,然后它只会将新的页面数据写入正确的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71980409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档