Как обратиться к определенному семейству столбцов в put и get в roadsdb с помощью Java-клиента? - PullRequest
0 голосов
/ 25 сентября 2018

Рассмотрим следующий код

    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 to, но put принимает ColumnFamilyHandle, а ColumnFamilyHandle не содержит имя дескриптора, поэтому сложно выбрать место назначения пут.

Может ли кто-нибудь указать мне направление для достижения вышеуказанного?

Спасибо

1 Ответ

0 голосов
/ 06 ноября 2018

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