CQL部分密钥过滤器

时间:2016-01-06 21:54:18

标签: cassandra cql

我在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的案例?

感谢你

1 个答案:

答案 0 :(得分:1)

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

您的另一个选择是进行全表扫描并手动过滤,或使用Spark之类的东西来处理整个数据集。我不久前写了一篇博文,展示了你可以用Spark& amp;卡桑德拉。 http://rustyrazorblade.com/2015/07/cassandra-pyspark-dataframes-revisted/