2012-06-21 42 views
3

我有一個列家庭使用計數器作爲創建表命令如下:(關鍵我用bigin過濾時查詢)。使用奇怪的結果在CQL中的哪裏過濾器cassandra

CREATE TABLE BannerCount (
KEY bigint PRIMARY KEY 
) WITH 
comment='' AND 
comparator=text AND 
read_repair_chance=0.100000 AND 
gc_grace_seconds=864000 AND 
default_validation=counter AND 
min_compaction_threshold=4 AND 
max_compaction_threshold=32 AND 
replicate_on_write='true' AND 
compaction_strategy_class='SizeTieredCompactionStrategy' AND 
compression_parameters:sstable_compression='SnappyCompressor'; 

但是,當我將數據插入到該列的家庭,並選擇使用Where命令過濾數據 結果我retrived很奇怪:(這樣的:

使用查詢:

select count(1) From BannerCount where KEY > -1 

count 
------- 
71 

使用查詢:

select count(1) From BannerCount where KEY > 0; 
count 
------- 
3 

使用查詢:

select count(1) From BannerCount ; 
count 
------- 
122 

什麼跟我的查詢情況發生,任何誰告訴我爲什麼我得到:(:(

回答

2

要理解這樣做的原因,你應該明白Cassandra的數據模型。您可能在這裏使用了RandomPartitioner,因此表中的每個KEY值都被標記爲哈希值,因此它們將以分佈方式存儲在您的環中。

因此,查找鍵值高於X的所有行並不是Cassandra優化的查詢類型。您應該在其他值上鍵入行,然後使用寬行來表示bigint值(因爲列已排序)或將其放入第二列,並在其上創建索引。

爲了更詳細地解釋爲什麼你的結果看起來很奇怪:CQL 2隱式地將「KEY >= X」變成了「token(KEY) >= token(X)」,以便查詢者可以以一種有效的方式遍歷所有行。所以真的,你會發現散列大於散列的所有行。請參閱CASSANDRA-3771瞭解如何解決CQL 3中的這種混淆。也就是說,適當的修復方法是構造數據根據你期望在其上運行的查詢。