2012-07-17 52 views
2

我在閱讀以下link,它提供了組合列的介紹,並且我很少懷疑,特別是關於ComponentEquality.EQUAL和ComponentEquality.GREATER_THAN_EQUAL的用法。Hector組件平等

在下面的例子:

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作爲平等的內容。 帶示例的解釋會非常有幫助

回答

3

cassandra中片查詢的工作方式是指定起始列和結束列(limit/isDescending標誌,但在此不重要)。查詢用例的一種方法是傳遞以US:CA開頭的第一個組合列和以US:CA開頭的最後一個組合列的完整(複合)列名稱。但是,您不提前知道這一點。

關於切片查詢的好處是,開始和結束列不需要是實際的列名稱。由於列名總是被排序,所以如果分片查詢中的起始列不存在,cassandra將從大於所提供的起始列的下一列開始。

因此,我們需要爲您的查詢構建起始列和結束列。如鏈接中所述,複合對象具有e-o-c位。該位用於切片查詢。

一個複合列有幾個組件。每個組件都有e-o-c位。當一個組件將此位設置爲Equal時,Cassandra會繼續查看下一個組件。當一個組件將此位設置爲GREATER_THAN_EQUAL時,Cassandra將繼續查看列,直到找到其各個組件與我們正在查找的組件不相等的東西。

因此,現在考慮鏈接中的示例:我們希望對包含三個組件的組合比較器的列族進行分片查詢。我們希望獲得所有第一個組件是US的列和第二個組件等於CA的列。

我們必須創建一個起始列和一個結束列。起始列將包含兩個組件(均等於e-o-c),結束列將具有第一個組件作爲EQUAL,第二個組件作爲GREATER_THAN_EQUAL。這將匹配所有列的第一個組件是美國和第二個組件是CA.

如果將此位設置爲EQUAL,則切片查詢將匹配找到的第一列,並且其起始分量等於'CA'。這很好,但Cassandra也需要知道切片查詢的結束列。爲此,它將查看您提供的最終組合。

希望這有助於。

編輯:爲了使說明更好

+0

很好的解釋。謝謝! – 2012-11-21 18:08:10