【问题标题】:Hector Component Equality赫克托分量相等
【发布时间】:2012-07-16 01:23:06
【问题描述】:

我正在阅读以下link,它介绍了复合列,我几乎没有疑问,特别是关于 ComponentEquality.EQUAL 和 ComponentEquality.GREATER_THAN_EQUAL 的用法。

在下面的例子中:

Composite start = compositeFrom(startArg, Composite.ComponentEquality.EQUAL);
Composite end = compositeFrom(startArg, Composite.ComponentEquality.GREATER_THAN_EQUAL);
start.addComponent(1,"CA",Composite.ComponentEquality.EQUAL);
end.addComponent(1,"CA",Composite.ComponentEquality.GREATER_THAN_EQUAL);

我无法理解为什么最终组件需要 GREATER_THAN_EQUAL 作为相等组件。 举例说明会很有帮助

【问题讨论】:

    标签: cassandra composite-key hector


    【解决方案1】:

    切片查询在 cassandra 中的工作方式是您指定一个开始列和一个结束列(limit/isDescending 标志也是如此,但这在这里无关紧要)。查询您的用例的一种方法是传递以 US:CA 开头的第一个复合列和以 US:CA 开头的最后一个复合列的完整(复合)列名称。但是,您事先并不知道这一点。

    切片查询的好处是开始和结束列不需要是实际的列名。由于列名总是排序的,如果切片查询中的起始列不存在,cassandra 将从比提供的起始列大的下一列开始。

    因此,我们需要为您的查询构造一个开始列和一个结束列。如链接中所述,复合对象具有 e-o-c 位。该位由切片查询使用。

    复合列有多个组件。每个组件都有 e-o-c 位。当一个组件将此位设置为 Equal 时,Cassandra 继续查看下一个组件。当组件将此位设置为 GREATER_THAN_EQUAL 时,Cassandra 将继续查看列,直到找到相应组件不等于我们正在查找的组件的内容。

    因此,现在考虑链接中的示例:我们想要对具有包含三个组件的复合比较器的列族进行切片查询。我们想要获取第一个组件是 US 而第二个组件等于 CA 的所有列。

    我们必须创建一个开始列和一个结束列。开始列将有两个组件(均以 EQUAL 为 e-o-c),结束列将具有第一个组件为 EQUAL,第二个组件为 GREATER_THAN_EQUAL。这将匹配所有第一个组件是 US 而第二个组件是 CA 的列。

    如果您将此位设置为 EQUAL,切片查询将匹配它找到的第一列,其起始分量等于“CA”。这很好,但 Cassandra 还需要知道切片查询的结束列。为此,它将查看您提供的最终组合。

    希望这会有所帮助。

    编辑:为了更好地解释

    【讨论】:

    • 很好的解释。谢谢!
    猜你喜欢
    • 2013-07-10
    • 2012-02-23
    • 2012-07-19
    • 1970-01-01
    • 2012-07-03
    • 2013-03-17
    • 2011-07-03
    • 2012-06-10
    • 2012-07-16
    相关资源
    最近更新 更多