Hector を使用して double 値を (列名として) 格納したいと考えています。私が理解している限り、LONGTYPE コンパレーターを DoubleSerializer と組み合わせて使用する必要があります。ComparatorType.LONGTYPE をコンパレータとして、ComparatorType.UTF8TYPE をバリデータとして columnFamily を作成しました。次のように列ファミリーにデータを挿入します。
Mutator<String> m = HFactory.createMutator(_keyspace, _ss);
m.addInsertion(rowKey, cf, HFactory.createColumn(colKey, "", _ds, _ss));
ここで、rowKey は String、colKey は double、_ds は DoubleSerializer、_ss は StringSerializer です。すべてが正の double 値に対して機能するようです。ただし、負の開始パラメータや終了パラメータを使用して範囲クエリを実行したい場合、状況は奇妙になります。これは、クエリに使用するコードです。
SliceQuery<String, Double, String> q =
HFactory.createSliceQuery(ks, _ss, _ds, _ss);
q.setRange(START, FINISH., false, 500);
START と FINISH が正の場合、すべて問題ありません。
START が負で FINISH が正の場合、正しい正の値が返されますが、実際には START よりも小さい負の値のみが返されます。
両方が負で、START の方が小さい場合 (そうあるべき!?)、FINISH をスローします。
InvalidRequestException(why:range finish must come after start in the order of traversal).
両方とも負で、START が FINISH よりも大きい (つまり、負の値が小さい) 場合、正しい結果が返されますが、順序が間違っています (最小の負、つまり最大のものが最初)。
誰もそれについてコメントできますか?私は何か間違ったことをしていますか、それともヘクターのどこかにバグがあるのでしょうか?
編集: 残念ながら、以前のバージョンの hector では DoubleType が削除されました。私が使用しているバージョンが 1.1-0 であることを忘れていました。