我想要使用hector API獲取具有公共前綴的所有行。我玩了一下RangeSuperSlicesQuery,但沒有找到讓它正常工作的方法。關鍵範圍參數是否適用於通配符等?在Cassandra中獲取具有公共前綴的鍵範圍
更新:我用ByteOrderedPartitioner而不是RandomPartitioner,它可以正常工作。這是預期的行爲?
我想要使用hector API獲取具有公共前綴的所有行。我玩了一下RangeSuperSlicesQuery,但沒有找到讓它正常工作的方法。關鍵範圍參數是否適用於通配符等?在Cassandra中獲取具有公共前綴的鍵範圍
更新:我用ByteOrderedPartitioner而不是RandomPartitioner,它可以正常工作。這是預期的行爲?
是的,這是預期的行爲。在RandomPartitioner中,行按其鍵的MD5哈希順序存儲,因此要獲得有意義的鍵範圍,需要使用像ByteOrderedPartitioner這樣的順序保留分區程序。
但是,使用ByteOrderedPartitioner or OrderPreservingPartitioner有缺點,通常可以通過稍微不同的數據模型和RandomPartitioner來避免。
要詳細說明上述答案,您應該考慮使用列名作爲您的「公共前綴」而不是密鑰。然後,您可以使用列切片來獲取特定範圍內的所有列名稱,也可以使用輔助索引,然後爲具有該列名稱的所有鍵執行索引切片。
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>
...