如何计算cassandra列族中的行数

时间:2012-07-29 15:07:55

标签: cassandra hector

我正在将带有用户个人资料的文件写入带有5M配置文件的cassandra。 我的写作操作成功完成。 我想计算列系列中的行数。

Keyspace keyspaceOperator = HFactory.createKeyspace(KEY_SPACE, cluster);
CqlQuery<String,String,Long> cqlQuery = new CqlQuery<String,String,Long>(keyspaceOperator, se, se, new LongSerializer());
cqlQuery.setQuery("SELECT COUNT(*) FROM up");
QueryResult<CqlRows<String,String,Long>> result = cqlQuery.execute();
System.out.println(result.get().getAsCount());

但下面的代码打印我总是10000。 我究竟做错了什么?我如何从cli进行此操作?

4 个答案:

答案 0 :(得分:1)

你现在不能。每个查询的默认限制为10K行。这是一张开放的门票(CASSANDRA-3702),但尚未修复。

答案 1 :(得分:1)

只有其他选择是通过RangeSlicesQuery进行迭代。我创建了一个“人口普查”程序来计算行和总列数; here's a version for long types。但是,如果这是一项经常性的活动,传统的智慧似乎是使用一个单独的计数器列来跟踪; some discussion here

答案 2 :(得分:1)

你只需要给出一个你想要数量的限制。如果您不希望计数超过1e9,那么

SELECT COUNT(*) FROM up LIMIT 1000000000;

但是请注意,COUNT(和RangeSlicesQuery)根本不具备高性能,甚至可能都没有。它们与关系数据库术语中的“顺序扫描”基本相同。计数器是解决分布式系统中此类问题的更好方法。

答案 3 :(得分:1)

请参阅here以获取执行此操作的示例。

您可以自由使用代码。请注意Astyanax已从Hector分支出来,我们发现Cassandra中的Java客户非常好。