2

我正在将带有用户配置文件的文件写入具有 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

4 回答 4

1

你暂时不能。每个查询的默认限制为 10K 行。对此(CASSANDRA-3702)有一张未解决的票,但目前还没有修复。

于 2012-07-29T22:54:51.967 回答
1

只有其他选择是通过 RangeSlicesQuery 进行迭代。我创建了一个“人口普查”程序来计算行数和总列数;这是长类型的版本。但是,如果这是一项频繁的活动,传统的智慧似乎是使用单独的计数器列来跟踪;在这里进行一些讨论

于 2012-07-30T14:08:08.547 回答
1

您只需要给出一个与您想计算的一样大的限制。如果您不希望计数超过 1e9,请执行

SELECT COUNT(*) FROM up LIMIT 1000000000;

但请注意, COUNT(以及 RangeSlicesQuery 也是)根本没有性能,甚至不应该如此。它们本质上与关系数据库用语中的“顺序扫描”相同。计数器是解决分布式系统中此类问题的更好方法。

于 2012-07-30T16:24:15.473 回答
1

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

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

于 2012-09-10T07:17:01.723 回答