簡體   English   中英

如何使用Java客戶端在rocksdb中引用和獲取特定的列族?

[英]How to refer to a particular column family in put and get in rocksdb with java client?

考慮以下代碼

    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能夠選擇哪些column familyput ,但put需要ColumnFamilyHandleColumnFamilyHandle不包含描述符名稱,因此它很難選擇一個看跌的目的地。

有人可以指出實現上述目標的方向嗎?

謝謝

ColumnFamilyHandle具有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);
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM