有没有办法在 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 中过滤计数器列?的主要内容,如果未能解决你的问题,请参考以下文章