首页 > 解决方案 > 用 nom 解析 SQLite B-Tree-Page

问题描述

我正在尝试使用 nom 解析 SQLite BTree 页面(https://www.sqlite.org/fileformat2.html#btree)。

Nom 可以很好地解析两个标题(数据库文件标题和 btree 标题)以及单元格指针数组。我现在被困在如何解析单个单元格上。

据我了解, nom 只是线性遍历输入,但我更需要的是随机访问:从单元格指针数组中获取一个值,跳转到页面中的那个位置,然后解析它。

这是一种有效的方法吗?我是否应该将剩余的输入包装在光标中的标题之后并随机访问单元格指针位置?

我的另一个想法是按升序对单元格指针数组进行排序,并且只占用尽可能多的字节,直到下一个单元格开始。这里的问题是每个单元格的有效负载长度 varint 都包含溢出。我在如何识别该页面上单元有效负载的确切长度方面遇到问题,因为一个空闲块可以跟随一个单元。为此,我需要首先解析所有空闲块页面的链接列表,以便检索所有空闲块的位置和长度,然后才能开始解析单元块。但后来我又回到了随机访问。

标签: sqliterustnom

解决方案


推荐阅读