gpt4 book ai didi

cassandra - Astyanax ColumnFamily 用于多列?

转载 作者:行者123 更新时间:2023-12-03 08:25:10 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com