Rocks DB的Java API是否支持前缀扫描?

时间:2016-07-07 11:16:41

标签: java rocksdb

我在Rocks DB中拥有庞大的数据集(键值),我必须根据手中的密钥前缀搜索密钥。我不想扫描整个数据集来过滤掉基于key-prefix的密钥。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

你可以使用这样的东西。 使用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())));
}

希望它会对你有所帮助。

答案 1 :(得分:0)

Seek工作非常缓慢。 SSD磁盘上的数据为5.35秒,十亿条记录。

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

2个长字节[xx,xx]

搜索1个8字节长的字符。

使用ColumnFamily映射键。