java - 如何使用java客户端在rocksdb中引用put和get中的特定列族?

标签 java rocksdb

考虑以下代码

    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) {

        }
    }
}

在下面一行

db.put(columnFamilyHandleList.get(0), "myKey".getBytes(), "myValue".getBytes());

我希望 put 能够选择要put列族,但 put 需要一个 ColumnFamilyHandle 并且 ColumnFamilyHandle 不包含描述符名称,因此很难选择放置目的地。

有人可以为我指明实现上述目标的方向吗?

谢谢

最佳答案

ColumnFamilyHandle 有一个 getName 方法,请参阅 here .

因此,您可以创建一个辅助方法,该方法在列族句柄列表中搜索名称。

 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);
  }

关于java - 如何使用java客户端在rocksdb中引用put和get中的特定列族?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52504792/

相关文章:

java - KTable数据在Kafka中保存多久?或者说如何控制时间

c++ - 使用 Rocksdb 存储自定义数据类型?

java - 为什么两个名义上具有相同值的浮点结果不同?

java - 按特定属性动态分组并排序

java - 从 mysql 网站检索时未选择数据库

distributed - LevelDB(RocksDB)有哪些CAP-Type?

mysql - 编译 facebook/mysql 时出现 CMake 错误,链接到奇怪的路径

java - 如何制作 Locale.getISOCountries() 的集合

java - Android Studio - 更改默认代码样式

python - Python-Rocksdb的安装