我们正在运行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如何在内部计算这些数据。
非常感谢帮助社区的人们!
答案 0 :(得分:0)
即使您指定了分区密钥,cassandra仍然需要读取150k单元格来计算
如果你还没有指定分区密钥,cassandra需要扫描所有节点的所有行来给你计数。
最佳方法是使用计数器表。
CREATE TABLE id_count (
partitionkey bigint,
type text,
count counter,
PRIMARY KEY ((partitionkey, type))
);
只要uniqueId插入在此处递增计数。