我正在尝试通过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都慢还是只有第一个慢?你可以做的不多,因为它们只是虚拟数据空间
唯一的替代方法是不使用列族,并使用列族名称作为键的前缀