如何使用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似乎不支持您正在寻找的东西,但您可以保留一个名称映射来处理