在卡桑德拉(Cassandra)计数宽行



我们正在运行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仍然需要读取150k单元格才能为您提供计数

如果您没有指定分区密钥Cassandra需要扫描所有节点的所有行才能为您提供计数。

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

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

每当唯一的插入将计数递增时。

最新更新