有没有办法在 cassandra 中过滤计数器列?

Posted

技术标签:

【中文标题】有没有办法在 cassandra 中过滤计数器列?【英文标题】:Is there a way to filter a counter column in cassandra? 【发布时间】:2015-09-29 10:21:51 【问题描述】:

我一直无法理解如何处理一个用例....

我想统计一些项目,并查询数据,这样

counter_value < threshold value

现在在 cassandra 中,无法在计数器上创建索引,这是个问题,是否有一种解决方法建模可以完成类似的事情??

谢谢

【问题讨论】:

【参考方案1】:

您已经部分回答了自己的问题,说出了您想查询的内容。因此,让我们先按照稍后查询的方式对数据进行建模。

如果要通过计数器值查询,则不能是计数器类型。因为它不符合查询数据所需的两个条件

    不能成为索引的一部分 不能作为分区键的一部分

计数器是在 Cassandra 中进行快速写入的最有效方式,用于计数器的使用。但不幸的是,由于上述两个限制,它们不能成为 where 子句的一部分。

因此,如果您想使用 Cassandra 解决问题,请在 Cassandra 中将类型更改为 long,使其成为 clustering key 或在该列上创建 index。在任何情况下,这都会减慢您的写入速度并增加更新计数器值的每个操作的延迟,因为您将使用 read-before-write 的反部分。

我建议使用 index

最后但同样重要的是,我会考虑使用 SQL 数据库来解决这个问题。

【讨论】:

我不能使用 mysql,我有一个巨大的数据集,而且很多写操作对我来说不适用于 sql 数据库,写前读是我真的不想做的事情,我会的必须使用更高的一致性级别,这会降低性能,还有其他方法可以解决这个问题吗? 您想实时进行这些查询吗?【参考方案2】:

根据您想要返回的结果,您也许可以使用用户定义的聚合函数来做一些事情。您可以在用户定义的函数中放置任意代码,以根据计数器的值进行过滤。

查看一些示例 here 和 here。

其他方法是在客户端过滤返回的行,或者将数据加载到 Spark 并过滤 Spark 中的行。

【讨论】:

我还认为找到一种汇总计数器数据的好方法将是进行此操作的方法。 @Aaron 是的,这是完美的,现在唯一的问题是,我必须等待 2.2 的稳定版本才能使用它,聚合在 2.1.9 中不可用。

以上是关于有没有办法在 cassandra 中过滤计数器列?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark 如何在内存中工作?

在 cassandra 中选择不同计数的方法是啥?

为啥 Cassandra 中的超级列不再受青睐?

根据某些共享列创建标识符/计数器,并根据其他列进行分隔

有没有办法在条件下使用多种数据类型过滤Python中的列?

特定列上的角度表过滤器