【问题标题】: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 客户端)?

【问题讨论】:

  • 我认为我们不能查询复合分区键的一部分。检查this thread。您需要更改数据模型。

标签: 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 的缺点之一,但却是完成大数据模型所必需的。

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多