如何使用java客户端在rocksdb中引用put和get中的特定列族?
考虑以下代码如何使用java客户端在rocksdb中引用put和get中的特定列族?,java,rocksdb,Java,Rocksdb,考虑以下代码 try (final ColumnFamilyOptions cfOpts = new ColumnFamilyOptions().optimizeUniversalStyleCompaction()) { final List<ColumnFamilyDescriptor> cfDescriptors = Arrays.asList( new ColumnFamilyDescriptor(RocksDB.DEFA
try (final ColumnFamilyOptions cfOpts = new ColumnFamilyOptions().optimizeUniversalStyleCompaction()) {
final List<ColumnFamilyDescriptor> cfDescriptors = Arrays.asList(
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY, cfOpts),
new ColumnFamilyDescriptor("my-first-columnfamily".getBytes(), cfOpts)
);
final List<ColumnFamilyHandle> columnFamilyHandleList =
new ArrayList<>();
try (final DBOptions options = new DBOptions()
.setCreateIfMissing(true)
.setCreateMissingColumnFamilies(true);
final RocksDB db = RocksDB.open(options,
"/mnt/my_db", cfDescriptors,
columnFamilyHandleList)) {
try {
// Question: How do I refer to a particular column family by name, for example my-first-columnfamily
db.put(columnFamilyHandleList.get(0), "myKey".getBytes(), "myValue".getBytes());
} finally {
for (final ColumnFamilyHandle columnFamilyHandle :
columnFamilyHandleList) {
columnFamilyHandle.close();
}
}
} catch(Exception e) {
}
}
}
try(final ColumnFamilyOptions cfOpts=new ColumnFamilyOptions().OptimizeUniversalStyleCompression()){
最终列表cfDescriptors=Arrays.asList(
新ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,cfOpts),
新建ColumnFamilyDescriptor(“我的第一个columnfamily”.getBytes(),cfOpts)
);
最终列表列FamilyHandleList=
新的ArrayList();
try(final DBOptions=new DBOptions()
.setCreateIfMissing(true)
.setCreateMissingColumnFamilies(true);
最终RocksDB db=RocksDB.打开(选项,
“/mnt/my_db”,cf描述符,
专栏作家{
试一试{
//问题:如何按名称引用特定列族,例如我的第一个列族
db.put(columnFamilyHandleList.get(0),“myKey.getBytes(),“myValue.getBytes());
}最后{
对于(最后一列FamilyHandle)列FamilyHandle:
(专栏作家){
columnFamilyHandle.close();
}
}
}捕获(例外e){
}
}
}
在下面的行中
db.put(columnFamilyHandleList.get(0),“myKey.getBytes(),“myValue.getBytes())代码>
我希望put
能够选择要put
的列族,但是put
采用ColumnFamilyHandle
并且ColumnFamilyHandle
不包含描述符名称,因此很难选择放置目标
有人能为我指出实现上述目标的方向吗
谢谢专栏FamilyHandle
有一个getName
方法,请参阅
因此,您可以创建一个助手方法,该方法在列族句柄列表中搜索名称
public ColumnFamilyHandle getColumnFamilyHandle(byte[] name) {
return columnFamilyHandles
.stream()
.filter(
handle -> {
try {
return Arrays.equals(handle.getName(), name);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
})
.findAny()
.orElse(null);
}
C++结构>代码> ColumnFamilyHandle >代码>有一个可以使用的GETNAMEE()方法。我不确定5.14.2的java思想,rockdsb似乎不支持您正在寻找的东西,但您可以保留一个名称映射来处理