cassandra - Astyanax ColumnFamily<K, C> 用于多列?

标签 cassandra astyanax

我有一个包含多个列的列族:

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从上面的列族中读取数据?

谢谢 夹头

最佳答案

Astyanax 入门指南包含一个执行此操作的示例。但是,根据您的问题,混淆在于列元数据中指定的多个列值类型(验证器),而 ColumnFamily 契约(Contract)似乎暗示 ColumnFamily 的值是单一类型。

在 Astyanax 无论如何都要序列化到 ByteBuffer 或从 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 Getting Started了解更多。

关于cassandra - Astyanax ColumnFamily<K, C> 用于多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12398116/

相关文章:

go - 我们如何使用 golang 模拟 cassandra session ?

apache-spark - 使用 Spark Streaming 填充的 Cassandra 表上的 Spark SQL

cassandra - 使用 Cassandra 和 CQL3,如何在单个请求中插入整个宽行?

cassandra - Cassandra 服务器上出现错误 : Unable to gossip with any seeds

java - 如何捕获异步执行中的 astyanax 失败

java - 使用 Astyanax 创建的键空间对 cqlsh 不可见

spring - 在 Spring 中使用 CrudRepositoty 保存具有 NULL 值的实体

java - astyanax 是否仅支持本地节点的自动发现模式?

cassandra - org.apache.thrift.transport.TTransportException : Cannot read. 远程端已关闭

java - Astyanax cql3 COUNT 查询返回 ROWS 而不是 NUMBER