2011-06-09 60 views
3

我想要使用hector API獲取具有公共前綴的所有行。我玩了一下RangeSuperSlicesQuery,但沒有找到讓它正常工作的方法。關鍵範圍參數是否適用於通配符等?在Cassandra中獲取具有公共前綴的鍵範圍

更新:我用ByteOrderedPartitioner而不是RandomPartitioner,它可以正常工作。這是預期的行爲?

回答

5

是的,這是預期的行爲。在RandomPartitioner中,行按其鍵的MD5哈希順序存儲,因此要獲得有意義的鍵範圍,需要使用像ByteOrderedPartitioner這樣的順序保留分區程序。

但是,使用ByteOrderedPartitioner or OrderPreservingPartitioner有缺點,通常可以通過稍微不同的數據模型和RandomPartitioner來避免。

0

要詳細說明上述答案,您應該考慮使用列名作爲您的「公共前綴」而不是密鑰。然後,您可以使用列切片來獲取特定範圍內的所有列名稱,也可以使用輔助索引,然後爲具有該列名稱的所有鍵執行索引切片。

Column slice example: 

Key (without prefix) 
    <prefix1> : <data> 
    <prefix2> : <data> 
    ... 

Secondary index example: 

Key (with or without prefix) 
    "prefix" : <the_prefix> <-- this column is indexed 
    otherCol1 : <data>  
    ...