Rocks DB Java API 是否支持前缀扫描?
Does Java API of Rocks DB support prefix scan?
我在 Rocks DB 中有大量数据集(键值),我必须根据手头键的前缀搜索键。我不想扫描整个数据集以根据键前缀过滤掉键。有什么办法吗?
你可以使用类似这样的东西。
使用 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())));
}
希望对您有所帮助。
Seek 运行很慢。 SSD 磁盘 5.35 秒,10 亿条记录。
Keys的大小固定为16字节。搜索了 8 个字节。
2 长字节 [xx,xx]
搜索了 1 长为 8 个字节。
使用 ColumnFamily 映射键。
我在 Rocks DB 中有大量数据集(键值),我必须根据手头键的前缀搜索键。我不想扫描整个数据集以根据键前缀过滤掉键。有什么办法吗?
你可以使用类似这样的东西。 使用 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())));
}
希望对您有所帮助。
Seek 运行很慢。 SSD 磁盘 5.35 秒,10 亿条记录。
Keys的大小固定为16字节。搜索了 8 个字节。
2 长字节 [xx,xx]
搜索了 1 长为 8 个字节。
使用 ColumnFamily 映射键。