【问题标题】:How can I get all rows in Cassandra between a given Composite key range?如何在给定的复合键范围之间获取 Cassandra 中的所有行?
【发布时间】:2013-01-14 23:34:47
【问题描述】:
我的数据存储格式是:
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 客户端)?
【问题讨论】:
标签:
java
cassandra
hector
java-client
【解决方案1】:
这在 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 的缺点之一,但却是完成大数据模型所必需的。