伯克利db 5.x C API有没有办法
所有带有匹配前缀的密钥的记录?
(不扫描整个数据库)
可能使用Btree前缀比较自定义回调?
最佳答案
解决方案分为两部分。首先,您需要使用自定义键比较函数。
dbp->set_bt_compare(dbp, cmp_fn);
在比较函数中,使具有相同前缀的键在数据库中相邻排序。这可能很简单,只是一堆小于比较,所以像
0x000000000000000000000001
这样的东西小于0x000000000000000000000002
。要执行搜索,请打开光标并使用
cursor->get()
标记执行DB_SET_RANGE
。将起始键设置为前缀范围的开头。例如,如果您正在查找前缀为0x1138
的键,那么您应该将该键设置为0x113800000000000000000000
。然后继续用cursor->get()
呼叫DB_NEXT
。当您看到一个没有0x1138
前缀的键时,就完成了。这种技术不必扫描整个数据库,因为初始的
DB_SET_RANGE
调用会在正确的位置启动光标,并且记录在树中彼此相邻。关于c - 伯克利db部分匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12348346/