Astyanax 入门指南涵盖了这样做的一个示例。但是,根据您的问题,混淆在于列元数据中指定的多个列值类型(验证器),而 ColumnFamily 合同似乎暗示 ColumnFamily 的值是单一类型的。
在幕后,Astyanax 无论如何都将序列化到/从 ByteBuffer(使用它的序列化器作为原语或使用您指定的序列化器)......但是这个 ColumnFamily api/contract,当在读/写的上下文中(而不是编程列族定义),可能会产生误导。
首先,您需要初始化 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 入门。