如何在Java中实现RocksDB中的columnfamily ?



我正在尝试通过java绑定在RocksDB中使用列族。

RocksDB.loadLibrary();
String threat = "threat_data";
String ipRange = "ip_range";
options = new DBOptions();
options.setCreateIfMissing(true);
options.setCreateMissingColumnFamilies(true);
ColumnFamilyOptions cfOpts = new ColumnFamilyOptions().optimizeUniversalStyleCompaction();
List cfDescriptors = Arrays.asList(
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY, cfOpts),
new ColumnFamilyDescriptor(threat.getBytes(), cfOpts),
new ColumnFamilyDescriptor(ipRange.getBytes(),cfOpts)
);
List<ColumnFamilyHandle> cfHandles = new ArrayList<>();
rocksDb = RocksDB.open(options, new File("/tmp/benchmark", "rockdb-threat-detection.db").getAbsolutePath(),cfDescriptors,cfHandles);

cfHandleThreat = (ColumnFamilyHandle) ((List) cfHandles.stream().filter(x -> {
try {
return (new String(x.getName())).equals(threat);
} catch (RocksDBException e) {
e.printStackTrace();
}
return false;
}).collect(Collectors.toList())).get(0);

cfHandleIp = (ColumnFamilyHandle) ((List) cfHandles.stream().filter(x -> {
try {
return (new String(x.getName())).equals(ipRange);
} catch (RocksDBException e) {
e.printStackTrace();
}
return false;
}).collect(Collectors.toList())).get(0);

我正在创建2列家族threat_data和ip_range。但是如果尝试使用get()函数读取,性能会很低。

mapThreat.get(ipToLong("157.49.194.173"))

使用列族和不使用列族之间的性能变化很大。我做错了什么吗?我应该如何提高表现?

是所有get都慢还是只有第一个慢?你可以做的不多,因为它们只是虚拟数据空间

唯一的替代方法是不使用列族,并使用列族名称作为键的前缀

相关内容

  • 没有找到相关文章

最新更新