2012-10-15 27 views
1

我想使用Hector存儲雙值(作爲列名稱)。據我所知,我必須將LONGTYPE比較器與DoubleSerializer結合使用。 我創建了一個ComparatorType.LONGTYPE作爲比較器並將ComparatorType.UTF8TYPE作爲驗證器的columnFamily。 我將數據插入我的列族是這樣的:使用Hector從Cassandra檢索(負值)雙值給出錯誤結果

Mutator<String> m = HFactory.createMutator(_keyspace, _ss); 
m.addInsertion(rowKey, cf, HFactory.createColumn(colKey, "", _ds, _ss)); 

其中rowKey是一個字符串,colKey是雙,_ds一個DoubleSerializer和_ss一個StringSerializer。 一切似乎都適用於積極的雙重價值。但是,當我想要使用負開始和/或結束參數進行範圍查詢時,情況會變得很奇怪。 這是我使用的查詢代碼:

SliceQuery<String, Double, String> q = 
      HFactory.createSliceQuery(ks, _ss, _ds, _ss); 
q.setRange(START, FINISH., false, 500); 

當起點和終點是積極的,一切正常。

當START爲負數且FINISH爲正時,它將返回正確的正值,但只有那些實際上小於START的負值。

當兩個爲負,且開始小(因爲它應該是!?),然後完成後,會拋出一個

​​

當兩個是否定的,但開始是更大然後FINISH(即少負) ,它會返回正確的結果,但是順序不正確(負數最小,即最大,最先)。

任何人都可以對此發表評論嗎?我做錯了什麼,或者在某個地方可能存在一個錯誤?

編輯:不幸的是,在先前版本的hector中已經刪除了DoubleType。我忘了提及使用的版本是1.1-0。

回答

0

由於似乎沒有辦法「解決」這個問題,所以我爲hector實現了Double和Float格式。它已被拉入主枝,因此可在目前snapshot。 我認爲它也會進入下一個版本。

1

您應該使用LongSerializer,因爲雙精度浮點數和64位整數是不一樣的。 64位負整數在使用期望雙精度的解串器時奇怪地出現並不奇怪,因爲編碼是不同的。