2

我有一个超级列族:

Logger {
    superKey : {
        nameKey : {name1:val1, name2:val2, ..., name8945:val8945}
    }
}

这是一个代码:

    ThriftSuperCfTemplate<String, String, String> stringKeyTemplate = 
            new ThriftSuperCfTemplate<String, String, String>
            (keyspace, LOGGER_COLUMN_FAMILY, 
            StringSerializer.get(), StringSerializer.get(), 
            StringSerializer.get());

    int count = stringKeyTemplate.countSubColumns(NAME_KEY, SUPER_KEY); //1

    SuperCfResult<String, String, String> nameRow = 
            stringKeyTemplate.querySuperColumn(NAME_KEY, SUPER_KEY);

    Collection<String> names =  nameRow.getColumnNames(); //2

    Assert.assertTrue(names.size()==count); //3

我想要做的是从 nameKey 列族中获取所有列名,但它只返回前 7 个名称{name1, name2,..., name7}(第 2 行)但计数返回8945(第 1 行)。断言在第 3 行失败......

4

2 回答 2

1

我无法在 GH 的当前提示上重现这一点: https ://github.com/rantav/hector/commit/1aa93e78257e86dfc73390cb9c4db52d8ed29a69

我认为 1.0.1 版和 master 之间没有太大的变化。如果您可以尝试从主干更新到最新版本并查看问题是否“消失”,我将进一步调查。另外,您运行的是哪个版本的 Cassandra?这只是在周末出现,但可能不是原因:https ://issues.apache.org/jira/browse/CASSANDRA-3446

服务器上是否有任何错误日志?设置 StorageProxy 的日志记录级别以进行调试,并确保通过网络传输的所有内容看起来都是正确的(调整日志记录级别的详细信息:http ://www.datastax.com/docs/1.0/configuration/logging_options )。

于 2011-11-08T20:52:55.947 回答
0

我发现这只能在我无法手动生成的特定数据上重现。但是,我为我的情况找到了一种解决方法:

    int count = stringKeyTemplate.countSubColumns(NAME_KEY, SUPER_KEY); //1

    SuperSliceQuery<String, String, String, String> query = 
          HFactory.createSuperSliceQuery(keyspace, StringSerializer.get(), 
          StringSerializer.get(), StringSerializer.get(), 
          StringSerializer.get());

    query.setColumnFamily(COLUMN_FAMILY);
    query.setKey(NAME_KEY);
    query.setRange(SUPER_KEY, SUPER_KEY, false, 1);

    QueryResult<SuperSlice<String, String, String>> result = query.execute();


    Collection<String> names = null;
    names = result.get().getColumnByName(SUPER_KEY).getColumns(); //2
    Assert.assertTrue(names.size()==count); //3
于 2011-11-08T09:21:51.610 回答