1

我正在使用 hector-core 0.8.0-1 和 Cassandra 0.8.0 来测试 addCounter 操作,但我发现我的代码无法将任何数据插入 CF,谁能告诉我原因?

StringSerializer ser = StringSerializer.get();
Mutator<String> mutator = HFactory.createMutator(keyspace, ser);

List<HCounterColumn<String>> counterColumns = Arrays.asList(
        HFactory.createCounterColumn("1", 30L, ser),
        HFactory.createCounterColumn("2", 20L, ser)
        );  

for (HCounterColumn c : counterColumns)
{   
    mutator.addCounter("testKey1", "CounterColumn", c); 
    mutator.addCounter("testKey2", "CounterColumn", c); 
}   

mutator.execute();

我在我的日志中发现了以下信息:

> 2011-06-21 17:17:00,025 [Thread-3]
> INFO me.prettyprint.cassandra.hector.TimingLogger
> - Tag                                       Avg(ms) 
>      Min      Max  Std Dev     95th   Count 2011-06-21 17:17:00,030
> [Thread-3] INFO me.prettyprint.cassandra.hector.TimingLogger
> - WRITE.fail_                                  4.84 
>     4.84     4.84     0.00     4.84       1 2011-06-21 17:17:00,031 [Thread-3]
> INFO me.prettyprint.cassandra.hector.TimingLogger
> - META_WRITE.fail_                            17.20 
>    11.31    23.09     5.89    23.09       2 2011-06-21 17:17:00,031 [Thread-3]
> INFO me.prettyprint.cassandra.hector.TimingLogger
> -

执行 mutator.execute(); 时似乎有问题;

提前致谢!

4

2 回答 2

5

目前,在 Cassandra 0.8.0 中,您无法在不是专门为处理计数器而创建的列族中创建计数器列:

create column family Counter1 with default_validation_class = CounterColumnType;

这是 JIRA 参考: https ://issues.apache.org/jira/browse/CASSANDRA-2614

于 2011-06-21T11:49:52.230 回答
2

这边走:

cfDef.setDefaultValidationClass(...)

这在最新版本的主干、0.7.0 和 0.8.0 分支中可用。

所以你需要从资源中提取。

或者,如果你想这样做,并且假设你正在使用 maven Central 提供的最新的 hector,你可以这样做

ThriftCfDef cfDef = new ThriftCfDef(String keyspace, String   columnFamilyName, ComparatorType comparatorType)

cf.setDefaultValidationClass(ComparatorType.COUNTERTYPE.getClassName());

cluster.addColumnFamiily(cfDef);
于 2011-06-23T01:27:24.433 回答