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

时间:2015-09-29 10:21:52

标签: cassandra cassandra-2.0

我无法解读如何处理用例....

我想保留一些项目的数量,并查询数据

counter_value < threshold value

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

感谢

2 个答案:

答案 0 :(得分:2)

您已经部分回答了自己的问题,说出了您想要查询的内容。因此,我们先说一下您将在以后查询数据的方式对数据进行建模。

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

  1. 不能成为索引的一部分
  2. 不能成为分区键的一部分
  3. 计数器是在Cassandra中进行快速写入的最有效方式,用于反复使用案例。但不幸的是,由于上述两个限制,它们不能成为where子句的一部分。

    因此,如果您想使用Cassandra解决问题,请在Cassandra中将类型更改为long,将其设置为群集密钥,或者在该列上创建索引。在任何情况下,这都会减慢您的写入速度并增加更新计数器值的每个操作的延迟,因为您将使用先读后读的反部件。

    我建议使用索引

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

答案 1 :(得分:2)

根据您尝试返回的内容,您可以使用用户定义的聚合函数执行某些操作。您可以在用户定义的函数中放置任意代码,以根据计数器的值进行过滤。

查看一些示例herehere

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