Cassandra切割复合键的范围

时间:2014-04-15 07:00:12

标签: cassandra cql cassandra-2.0

我有像这样的复合键的columnfamily

CREATE TABLE sometable(
    keya varchar,
    keyb varchar,
    keyc varchar,
    keyd varchar,
    value int,
    date timestamp,
    PRIMARY KEY (keya,keyb,keyc,keyd,date)
);

我需要做的是

SELECT * FROM sometable
WHERE
    keya = 'abc' AND
    keyb = 'def' AND
    date < '2014-01-01'

这就是给我这个错误

Bad Request: PRIMARY KEY part date cannot be restricted (preceding part keyd is either not restricted or by a non-EQ relation)

解决这个问题的最佳方法是什么?我需要改变我的专栏吗? 我还需要使用所有keya,keyb, keyc 和日期查询这些表。

1 个答案:

答案 0 :(得分:0)

你不能在cassandra中做到这一点。而且,这种范围切片也是更昂贵的。您正试图根据您的架构切换一组优先级较低的等值。

  

我还需要使用所有keya,keyb,keyc和date来查询这些表。

如果您正在考虑解决此问题,请考虑使用此架构。我建议的是将密钥放在单独的模式中

创建表格( timeuuid id, keyType文本, 主键(timeuuid,keyType))

使用timeuuid存储值并根据该值进行范围扫描。

创建表格( timeuuid prevTableId, 值int, 日期时间戳, 主键(prevTableId,date))

猜测,通过这种方式,您的表被规范化以便在您的用例中获得更好的可伸缩性,并且如果密钥也是重复的,则可以节省大量磁盘空间。