SeekForPrev
SeekForPrev API
从4.13开始,Rocksdb添加了Iterator::SeekForPrev()。 与seek()相反,这个新API将查找小于或等于目标键的最后一个键。
// Suppose we have keys "a1", "a3", "b1", "b2", "c2", "c4".
auto iter = db->NewIterator(ReadOptions());
iter->Seek("a1"); // iter->Key() == "a1";
iter->Seek("a3"); // iter->Key() == "a3";
iter->SeekForPrev("c4"); // iter->Key() == "c4";
iter->SeekForPrev("c3"); // iter->Key() == "c2";
基本上,SeekForPrev()的行为类似于下面的代码片段:
Seek(target);
if (!Valid()) {
SeekToLast();
} else if (key() > target) {
Prev();
}
事实上,这个API提供的功能比这个代码片段更多。一个典型的例子是,假设我们有键”a1”、”a3”、”a5”、”b1”,并启用以第一个字节为前缀的prefix_extractor。 如果我们想让最后一个键小于等于a6。上面没有SeekForPrev()的代码不起作用。因为在Seek(“a6”)和Prev()之后,迭代器将进入无效状态。 但是现在,您需要的只是一个电话,查找”a6”并得到”a5”。
此外,SeekForPrev() API在内部支持前缀模式下的Prev()。现在,Next()和Prev()都可以混合在前缀模式中。由于SeekForPrev()!