0

我的数据存储格式是:

RowKey: a:b:c
=> ( counter=d:e:f:g, value=1)
在哪里,
 a:时间戳(格式:YYYYMMDDHH,HH 从 00 - 23 变化)
 b:编码的网址
 c: id(从 0 - 9 变化)

 d:字符串类型
 e:浮动值
 f:浮动值
 g:整数类型

我不想获取所有此类行(及其包含的列),其中 url = 来自整个列族的给定值,其中 c 为 00 - 23。

如何在 Java 中实现这一点(最好使用 Hector 客户端)?

4

1 回答 1

2

这在 Cassandra 中是不可能的。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 的缺点之一,但却是完成大数据模型所必需的。

于 2013-01-14T15:34:47.187 回答