如何设置Hector/Cassandra的计数器?

如何设置Hector/Cassandra的计数器?,cassandra,hector,Cassandra,Hector,我想和赫克托一起为卡桑德拉找个柜台。我从hector复制/粘贴: Mutator<String> m = createMutator(keyspace, se); MutationResult mr = m.insertCounter( // exception here. "k", "Counter1", createCounterColumn("name", 5)); assertTrue("Execution time on single c

我想和赫克托一起为卡桑德拉找个柜台。我从hector复制/粘贴:

    Mutator<String> m = createMutator(keyspace, se);
    MutationResult mr = m.insertCounter( // exception here.
     "k", "Counter1", createCounterColumn("name", 5)); 
    assertTrue("Execution time on single counter insert should be > 0", mr.getExecutionTimeMicro() > 0);
    assertTrue("Should have operated on a host", mr.getHostUsed() != null);
    CounterQuery<String, String> counter = new ThriftCounterColumnQuery<String,String>(keyspace, se, se);
    counter.setColumnFamily("Counter1").setKey("k").setName("name");
    assertEquals(new Long(5), counter.execute().get().getValue());
好的,但是测试用例没有配置计数器1?我如何配置它


谢谢。

您可以在Cassandra服务器上创建列族。一种常见的方法是使用cqlsh工具

cqlsh

USE Keyspace1;
CREATE COLUMNFAMILY counter1 (example text PRIMARY KEY) 
  WITH comparator=text and default_validation=counter;
在Hector中,您可以使用ColumnFamilyDefinition类--类似于以下内容:

    ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition(KEYSPACE, "counter1");
    cfDef.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName());
    cfDef.setComparatorType(ComparatorType.UTF8TYPE);
    cfDef.setDefaultValidationClass(ComparatorType.COUNTERTYPE.getClassName());
    cfDef.setColumnType(ColumnType.STANDARD);
    List<ColumnFamilyDefinition> columnFamilies = new ArrayList<ColumnFamilyDefinition>();
    columnFamilies.add(cfDef);
    KeyspaceDefinition ksdef = HFactory.createKeyspaceDefinition(KEYSPACE, "org.apache.cassandra.locator.SimpleStrategy", 1,
            columnFamilies);
    cluster.addKeyspace(ksdef);
ColumnFamilyDefinition cfDef=HFactory.createColumnFamilyDefinition(键空间,“counter1”);
setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName());
cfDef.setComparatorType(ComparatorType.UTF8TYPE);
setDefaultValidationClass(ComparatorType.COUNTERTYPE.getClassName());
cfDef.setColumnType(ColumnType.STANDARD);
List columnFamilies=新建ArrayList();
columnFamilies.add(cfDef);
KeyspaceDefinition ksdef=HFactory.createKeyspaceDefinition(KEYSPACE,“org.apache.cassandra.locator.SimpleStrategy”,1,
(家庭);
cluster.addKeyspace(ksdef);

谢谢phatfingers,但我想和hector一起用代码制作我所有的东西。有没有可能和hector创建一个专栏族?另外,你可以快速浏览一下第三种选择——从你的应用程序运行CQL:to phatfingers:Thank;但是如果我这样做,我会得到
me.prettyprint.hector.api.exceptions.HInvalidRequestException:InvalidRequestException(原因:CounterColumnType不是有效的比较器)
在线
cluster.addColumnFamily(cfDef)!我先测试了,然后添加了一个新版本。好的,很好,谢谢!但对于初学者来说,这有点难理解。
    ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition(KEYSPACE, "counter1");
    cfDef.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName());
    cfDef.setComparatorType(ComparatorType.UTF8TYPE);
    cfDef.setDefaultValidationClass(ComparatorType.COUNTERTYPE.getClassName());
    cfDef.setColumnType(ColumnType.STANDARD);
    List<ColumnFamilyDefinition> columnFamilies = new ArrayList<ColumnFamilyDefinition>();
    columnFamilies.add(cfDef);
    KeyspaceDefinition ksdef = HFactory.createKeyspaceDefinition(KEYSPACE, "org.apache.cassandra.locator.SimpleStrategy", 1,
            columnFamilies);
    cluster.addKeyspace(ksdef);