Cassandra 部分密钥滤波器

Cassandra 部分密钥滤波器,cassandra,cql,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

我在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)。但是,键的数量很高

从业务角度来看,仅查询一个特定密钥(如B C D E F)是非常不寻常的。用户将仅应用部分筛选,如:

* * C D * *
在这种情况下,查询应该返回所有6条记录。他可能还希望筛选日期/月份,但是,鉴于数据量较低,这是一个较低的优先级

因为CQL不允许部分表键过滤(除了允许过滤之外),所以我不确定如何构造我的表。有什么想法吗?或者这是一个不适合卡桑德拉的案例


谢谢

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


您的另一个选择是进行全表扫描和手动筛选,或者使用类似Spark的方法处理整个数据集。不久前我写了一篇博文,展示了Spark&Cassandra的功能

谢谢你,乔恩。我来看看Spark。然而,我是一个可能使用错误的技术来解决我的问题的人?在大数据世界里,有什么东西更适合你吗?关系数据库可以工作,但由于数据量巨大,我们存在性能问题。您可以使用物化视图(cassandra 3.0+)。同一个表的多个视图没有问题,这是在大数据世界中获得高性能的唯一方法。我给Cassandra做了一个关于RDBMS的视频,你可能会发现这有助于更好地理解折衷和架构决策:FWIW,如果你知道你的分区键,并且愿意在下个月推出Cassandra 3.4时使用它,你可能会使用它的新的二级索引。