如何在给定的复合键范围内获取Cassandra中的所有行?

时间:2013-01-08 19:41:52

标签: java cassandra hector java-client

我的数据存储格式为:

RowKey: a:b:c
=> ( counter=d:e:f:g, value=1)
where,
 a: Timestamp (Format : YYYYMMDDHH, HH varies from 00 - 23)
 b: encoded Url
 c: id (Varies from 0 - 9)

 d: string type
 e: floating value
 f: floating value
 g: integer type

我想要获取所有这些行(包含其列),其中url =来自整个列族的给定值,其中c是00 - 23.


如何在Java中完成(最好是使用Hector客户端)?

1 个答案:

答案 0 :(得分:2)

这在卡桑德拉是不可能的。 CompositeKeys非常简单,基本上只是将单独的部分转换为一个键。因此,数据按照其密钥的顺序存储(和排序)在cassandra中,这就是它的检索方式。

您将只能对整个复合键(a:b:c)进行范围/切片查询,并且首先按a,然后按b,然后按c进行排序。如果您希望能够在c上进行范围查询,那么您需要使用c:a:b形式的复合密钥存储数据 - 在这种情况下,您将无法对a和b进行范围查询单独

这里有两个选项:

1)使用关系数据库(这里可能不是一个好的解决方案) 2)复制数据。所以你的数据有两行 - 一个是CompositeKey是a:b:c,另一行是CompositeKey是c:a:b(和第三个b:c:a,如果你需要做范围/切片查询排序仅在b)。对于这两行中的所有两行(/三行),数据本身都是相同的,您可以根据所需的查询搜索相应的行。不幸的是,这是Cassandra的缺点之一,但却是完成BigData模型所必需的。