【问题标题】:Fast estimated count of rows in Cassandra tableCassandra 表中的快速估计行数
【发布时间】:2018-06-24 07:18:51
【问题描述】:

我很惊讶以前没有提出这个问题。

假设我们在 cassandra 中有一个巨大的表,我们需要获得其中的估计行数(不精确,只是近似值)。

显然简单的select count(*) from table 效率不高,可能需要很多时间。我们需要一些又脏又快的东西。

Datastax 博客建议the following:

我不关心确切的数字,我可以大致估计一下吗?

因为 Cassandra 知道每个 SSTable 中有多少行 可能得到一个估计。 “nodetool cfstats”输出告诉你 这些计数在“键数(估计)”行中。这是总和 每个 SStable 中的行数(由于使用的索引,再次近似 但默认关闭不能超过 128)。

我的问题:我们可以使用DataStax Enterprise Java driver 执行相同的操作吗?

P.S. 我无法更改表格结构或其他任何东西。考虑我使用旧模式。换句话说,我对添加计数器或其他特殊字段之类的解决方法不感兴趣。

【问题讨论】:

  • 如果没有自动方式,你可以只存储一个计数器。
  • @DonBranson 如果我在 prod 中有一个已经遗留的数据库,这将不起作用
  • 是的,不好。对 nodetool 的估计值初始化一个计数器将允许一个粗略的值。取决于您可以容忍多少粗略值。如果你能通过 api 得到一些东西肯定会更好。

标签: java cassandra datastax-java-driver


【解决方案1】:

Cassandra 也通过 JMX 公开了近似计数(从“nodetool cfstats”获得)。代码可以挂钩到这个 JMX 指标,以编程方式获取计数。

EstimatedPartitionCount Gauge 中的近似键数 表。

 {
    "type": "READ",
    "mbean": "org.apache.cassandra.metrics:type=Table,keyspace=*,scope=*,name=*",
    "attribute": "Count"
  }

这是公开的所有 JMX 指标的link

【讨论】:

  • 对所提供的解决方案有任何问题/意见吗?如果不能,请您接受答案。
  • JMX 类型的 hack,这在生产代码中不起作用。但是对于这个解决方案 +1。
  • @Andremoniy JMX 是所有监控工具与 Cassandra 指标挂钩的方式
  • 我不需要监控,我需要它以高负载方式在生产代码中使用。所以 JMX 在我的情况下不起作用
  • 您可以想象,监控几乎每隔几秒就会轮询一次数据。因此,我看不出应用程序无法复制该行为的原因。
猜你喜欢
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2018-02-19
  • 2017-10-31
  • 1970-01-01
相关资源
最近更新 更多