伯克利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/

10-13 05:35