Astyanax ColumnFamily ‹K, C› для нескольких столбцов?

У меня есть семейство столбцов с несколькими столбцами:

create column family user_attr2
with comparator = 'UTF8Type'
and default_validation_class = 'UTF8Type'
and key_validation_class = 'UTF8Type'
and column_metadata = [
 {column_name: attr_value, validation_class: UTF8Type },
 {column_name: last_sync_timestamp, validation_class: LongType},
 {column_name: last_sync_digest, validation_class: UTF8Type }
];

Но в Astyanax есть только:

public class ColumnFamily<K, C> { ... }

Как читать данные из вышеуказанного семейства столбцов с помощью Astyanax?

спасибо патрон


person Chuck Zheng    schedule 13.09.2012    source источник


Ответы (3)


В руководстве по началу работы с Astyanax приведен пример этого. Но, исходя из вашего вопроса, путаница заключается в нескольких типах значений столбца (валидаторах), указанных в метаданных столбца, в то время как контракт ColumnFamily, похоже, подразумевает, что значения ColumnFamily имеют один тип.

Под сценами Astyanax будет сериализоваться в / из ByteBuffer в любом случае (с использованием его сериализаторов для примитивов или с помощью сериализаторов, которые вы укажете) ... но этот API / контракт ColumnFamily, когда он взят в контексте чтения / записи (в отличие от программного определение семейства столбцов), может ввести в заблуждение.

Сначала вам нужно инициализировать Astyanax (Initialization). Затем что-то вроде этого (изменено из Руководства по началу работы):

ColumnFamily<String, String> CF_USER_ATTR =
  new ColumnFamily<String, String>(
    "user_attr2",              // Column Family Name
    StringSerializer.get(),   // Key Serializer
    StringSerializer.get());  // Column Serializer

OperationResult<ColumnList<String>> result =
  ks.prepareQuery(CF_USER_ATTR)
    .getKey("Key1")
    .execute();
ColumnList<String> columns = result.getResult();

// Lookup columns in response by name 
String attr_value        = columns.getColumnByName("attr_value").getStringValue();
long timestamp   = columns.getColumnByName("last_sync_timestamp").getLongValue();
String digest = columns.getColumnByName("last_sync_digest").getStringValue();

// Or, iterate through the columns
for (Column<String> c : result.getResult()) {
  System.out.println(c.getName());
}

Подробнее см. Начало работы с Astyanax.

person Matt Self    schedule 29.04.2013

Не знаю, поможет ли это, но примеры чтения находятся в строке 106 этого файла.

и строка 86 в этом файле

person Dean Hiller    schedule 14.09.2012


Похоже, что C в ColumnFamily используется для имени столбца. это не ясно из java-документа класса.

 * @param <C>

в этом случае мне повезло - мои имена столбцов - String.

person Chuck Zheng    schedule 13.09.2012