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

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

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

counter_value < threshold value

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

谢谢

【问题讨论】:

    标签: cassandra cassandra-2.0


    【解决方案1】:

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

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

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

    计数器是在 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 中不可用。
    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多