[英]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 family
來put
,但put
需要ColumnFamilyHandle
和ColumnFamilyHandle
不包含描述符名稱,因此它很難選擇一個看跌的目的地。
有人可以指出實現上述目標的方向嗎?
謝謝
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.