1

我在 Rocks DB 中有巨大的数据集(键值),我必须根据手头的键前缀来搜索键。我不想扫描整个数据集以根据键前缀过滤掉键。有什么办法吗?

4

2 回答 2

2

你可以使用这样的东西。使用 RocksIterator 有一个公开的 api,您可以在其中查找键子字符串,如果您的键以前缀开头,则考虑该键。

请找到示例代码。

List<String> result = new ArrayList<String>();
RocksIterator iterator = db.newIterator();
for (iterator.seek(prefix.getBytes()); iterator.isValid(); iterator
                .next()) {
           String key = new String(iterator.key());
            if (!key.startsWith(prefix))
            break;
      result.add(String.format("%s", new String(iterator.key())));
}

希望它会帮助你。

于 2016-09-17T09:10:37.970 回答
-1

寻找工作非常缓慢。SSD 磁盘 5.35 秒,10 亿条记录。

Keys 的大小固定为 16 个字节。搜索了 8 个字节。

2 个长字节 [xx,xx]

搜索 1 长为 8 个字节。

使用 ColumnFamily 映射键。

于 2020-06-21T22:09:01.030 回答