我需要找出Cassandra表中的记录计数是否大于一定的数字,例如10000。
我仍然没有大的数据集,但在大规模下,可能有数十亿条记录,我如何能够有效地实现这一点?
可能有几十亿张唱片,或者只有几千张。我只需要知道是多还是少10K。
这下面似乎是不对的,我认为它将失败或非常缓慢的大量记录。
从sourceId={id}和timestamp<{endDate}和timestamp>{startDate}的数据中选择COUNT(*);
我也可以这样做:
还有别的办法吗?带限制的选择看起来很蠢,但似乎是最可行的。
sourceId是分区键,timestamp是集群键。
Cassandra版本是3.11.4,我在Spring工作,如果它有任何相关性的话。
您可以在分区键中引入bucket_id,因此主键将是((sourceId,bucket_id),timestamp)。Bucketing使用cassandra来约束属于单个分区的数据行,即分区将被分割成更小的块。要计数所有行,对每个分区(source_id、bucket_id)发出带有附加时间戳字段的异步查询。Bucket_id可以从时间戳派生出来,这样就可以定义需要访问哪个Bucket_id。
另一种解决方案: