我的数据存储格式是:
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 客户端)?
我的数据存储格式是:
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 客户端)?
这在 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 的缺点之一,但却是完成大数据模型所必需的。