【问题标题】:CQL partial key filterCQL 部分键过滤器
【发布时间】:2016-01-06 21:54:18
【问题描述】:

我在 Cassandra 有一张桌子,其中关键(现在从业务角度来看)是这样的结构。 键 + 值示例:

Key (exists of 6 columns)             Date/value
A | B | C | D | E | F |    -> 2000-01 : 100, 2000-02 : 220, ....
A | B | C | D | X | F |    -> 2000-01 : 100, 2000-02 : 233, ....
A | B | C | D | Y | F |    -> 2000-01 : 111, 2000-02 : 210, ....
A | Z | C | D | E | F |    -> 2000-01 : 122, 2000-02 : 230, ....

每个键在特定日期或月份都有一个值(每个键的日期/值记录数量非常少。目前大约 200 个)。但是,密钥的数量很高。

从业务方面来说,只查询一个特定的键(如 A B C D E F)是非常不寻常的。用户将只应用部分过滤,如:

* * C D * *

在这种情况下,查询应该返回所有 6 条记录。他可能还想根据日期/月份进行过滤,但是,鉴于数据量较少,这是一个较低的优先级。

由于 CQL 不允许部分表键过滤(除了 ALLOW FILTERING),我不确定如何构建我的表。有任何想法吗?或者这是一个不适合 Cassandra 的案例?

谢谢

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    使用 Cassandra 进行建模时,您需要为每种查询数据的方式创建一个表。因此,如果您想通过D=some_val 进行查询,则需要另一个可以回答该查询的表——也就是说,它必须有 D 作为它的分区键。

    您的另一个选择是进行全表扫描并手动过滤,或者使用 Spark 之类的工具来处理您的整个数据集。不久前我写了一篇博文,展示了使用 Spark 和 Cassandra 可以做什么。 http://rustyrazorblade.com/2015/07/cassandra-pyspark-dataframes-revisted/

    【讨论】:

    • 谢谢乔恩。我将看看 Spark。但是,我可能为我的问题使用了错误的技术?大数据世界中有什么更适合的吗?关系数据库可以工作,但考虑到大量数据,我们会遇到性能问题。
    • 您可以使用物化视图(cassandra 3.0+)。同一张表的多个视图没有错,这是在大数据世界中获得高性能的唯一途径。我为 Cassandra 制作了一个关于 RDBMS 的视频,您可能会发现它有助于更​​好地理解权衡和架构决策:academy.datastax.com/courses/ds101-introduction-cassandra
    • FWIW,如果你知道你的分区键并且愿意在下个月发布的 Cassandra 3.4 时使用它,你可能会使用它的新二级索引。
    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    相关资源
    最近更新 更多