在卡桑德拉计数宽行

问题描述:

我们正在运行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如何在内部计算这些数据。

非常感谢帮助社区的人!

即使您指定分区键卡桑德拉仍需要读取150K细胞给你算

如果您还没有指定分区键卡桑德拉需要扫描的节点的所有所有的行,给你计数。

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

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

只要uniqueId插入在这里增加计数。

+0

谢谢@Ashrauful。从我在卡桑德拉的研究计数器不准确,计数可能会失去同步。在我的用例中,我需要一个准确的计数。你认为这种方法会起作用吗?你有任何其他建议吗? – Coder

+0

@Coder你可以写一个后台任务,它会同步你的计数。 –