当前位置: 首页 > 知识库问答 >
问题:

带极限的卡桑德拉计数

龚同
2023-03-14

我需要找出Cassandra表中的记录计数是否大于一定的数字,例如10000。

我仍然没有大的数据集,但在大规模下,可能有数十亿条记录,我如何能够有效地实现这一点?

可能有几十亿张唱片,或者只有几千张。我只需要知道是多还是少10K。

这下面似乎是不对的,我认为它将失败或非常缓慢的大量记录。

从sourceId={id}和timestamp<{endDate}和timestamp>{startDate}的数据中选择COUNT(*);

我也可以这样做:

还有别的办法吗?带限制的选择看起来很蠢,但似乎是最可行的。

sourceId是分区键,timestamp是集群键。

Cassandra版本是3.11.4,我在Spring工作,如果它有任何相关性的话。

共有1个答案

荆运诚
2023-03-14

您可以在分区键中引入bucket_id,因此主键将是((sourceId,bucket_id),timestamp)。Bucketing使用cassandra来约束属于单个分区的数据行,即分区将被分割成更小的块。要计数所有行,对每个分区(source_id、bucket_id)发出带有附加时间戳字段的异步查询。Bucket_id可以从时间戳派生出来,这样就可以定义需要访问哪个Bucket_id。

另一种解决方案:

  • 使用Cassandra的计数器(但我读到它会影响性能,并且不能正确处理重复查询和推测查询)
  • 使用另一个db,比如redis,它有原子计数器(但是如何同步redis和Cassandra?)
  • 在写入过程中预先计算值并保存它(例如,写入静态列)
  • 其他东西
 类似资料:
  • 我对Cassandra相当陌生,在过去的一个月里读了很多书。 我正在研究一个小用例。 查询:基于在某个时间范围内播放的金额排名前 X 的玩家。 因此,在任何给定的时间范围内,我都希望汇总玩家的总游戏次数,并得出排名前X的玩家。 我遵循了创建UDF(使用C*-2.2.0版本)的方法,用于聚合AmountPlay by a Player。 下面是我为这个用例设计的时间序列数据模型。 请让我知道我的数据

  • 我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为

  • 我用Spring Data Cassandra 2.2.1开发了一个新的应用程序,想在Cassandra 2.1.9服务器上运行它(旧的,我知道)。但是我们得到了错误 Spring数据卡桑德拉手册声称Spring数据2.2.1至少需要卡桑德拉2.1,所以这应该有效,但它没有。我们包含的唯一特定于卡桑德拉的依赖项是 我怎样才能让这个工作?

  • 我们运行的cassandra集群有3个节点,复制因子为2。 我们的nodejs服务器是查询这个集群的唯一地方。 是否有其他任何地方的参数设置可能导致不一致的查询? cassandra v2.2.4 nodejs驱动程序v3.0.0 编辑-添加我正在做的事情的示例: 1)检查用户名是否被占用 2)创建用户

  • 我们一直在使用Spark RDD API(Spark 2.0)来处理在Cassandra.Note中建模的数据,这些数据在Cassandra中建模以实现高效的读写。 然而,现在还有SparkSQLAPI,Spark DataFrame API,它也是一种替代的数据访问方法-http://spark.apache.org/docs/latest/sql-programming-guide.html