计算卡桑德拉的宽行

时间:2017-04-26 01:23:39

标签: cassandra datastax datastax-java-driver

我们正在运行Apache Cassandra 2.1.X并使用Datastax驱动程序。我有一个用例,我们需要记住各种事情。我想出了这样的架构:

create table count{
partitionKey bigInt,
type text,
uniqueId uuid,
primary_key(partitionKey, type, uniqueId)

所以这只是宽行。我的问题是我是否做了类似的事情 select count(uniqueId) from count where paritionKey=987 and type='someType'然后以150k计数返回。

  • 对Cassandra来说,这是一项昂贵的操作吗?有没有更好的方法来计算这样的计数。我也想知道是否有人之前已经解决了这样的问题?

  • 我宁愿远离保持计数器,因为它不准确,在应用程序级别保持计数无论如何都注定要失败。

  • 也很高兴知道Cassandra如何在内部计算这些数据。

非常感谢帮助社区的人们!

1 个答案:

答案 0 :(得分:0)

即使您指定了分区密钥,cassandra仍然需要读取150k单元格来计算

如果你还没有指定分区密钥,cassandra需要扫描所有节点的所有行来给你计数。

最佳方法是使用计数器表。

CREATE TABLE id_count (
    partitionkey bigint,
    type text,
    count counter,
    PRIMARY KEY ((partitionkey, type))
);

只要uniqueId插入在此处递增计数。