【问题标题】:Hector querySuperColumn does not match countSubColumnsHector querySuperColumn 与 countSubColumns 不匹配
【发布时间】:2011-12-23 14:48:20
【问题描述】:

我有一个超级列族:

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 行),但 count 返回 8945(第 1 行)。并且断言在第 3 行失败...

【问题讨论】:

  • 这是什么版本的赫克托?在 1.0-1 之前的版本和 0.8.x 的早期版本中,围绕 SC 的结果检索存在一些错误。

标签: java cassandra hector


【解决方案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)。

【讨论】:

    【解决方案2】:

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

        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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 2017-11-23
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多