2

berkeley db 5.x C API 有什么方法可以获取与前缀匹配的键的所有记录?

(不扫描整个数据库)

也许使用 Btree 前缀比较自定义回调?

4

1 回答 1

4

解决方案有两个部分。首先,您需要使用自定义键比较功能。

dbp->set_bt_compare(dbp, cmp_fn);

在比较功能中,使具有相同前缀的键在数据库中彼此相邻排序。这可能就像一堆小于比较一样简单,因此类似于0x000000000000000000000001is less than 0x000000000000000000000002

要进行搜索,请打开光标并cursor->get()使用DB_SET_RANGE标志执行 a。将起始键设置为前缀范围的开头。比如说,如果您正在寻找带有前缀 的键0x1138,您可以将键设置为0x113800000000000000000000. 然后继续调用cursor->get()DB_NEXT当你看到一个没有0x1138前缀的键时,你就完成了。

这种技术不必扫描整个数据库,因为初始DB_SET_RANGE调用会在正确的位置启动游标,并且记录在树中彼此相邻。

于 2012-10-02T18:17:49.673 回答