Я хочу хранить двойные значения (как имена столбцов), используя Hector. Насколько я понимаю, я должен использовать компаратор LONGTYPE в сочетании с DoubleSerializer. Я создал columnFamily с ComparatorType.LONGTYPE в качестве компаратора и ComparatorType.UTF8TYPE в качестве валидатора. Я вставляю данные в семейство столбцов следующим образом:
Mutator<String> m = HFactory.createMutator(_keyspace, _ss);
m.addInsertion(rowKey, cf, HFactory.createColumn(colKey, "", _ds, _ss));
где rowKey — это String, colKey — это double, _ds — это DoubleSerializer и _ss — это StringSerializer. Кажется, все работает для положительных двойных значений. Однако, когда я хочу выполнять запросы диапазона с отрицательными параметрами начала и/или окончания, все становится странным. Это код, который я использую для запроса:
SliceQuery<String, Double, String> q =
HFactory.createSliceQuery(ks, _ss, _ds, _ss);
q.setRange(START, FINISH., false, 500);
Когда СТАРТ и ФИНИШ положительны, все в порядке.
Когда START имеет отрицательное значение, а FINISH положительное, будут возвращены правильные положительные значения, но только те отрицательные значения, которые на самом деле меньше, чем START.
Когда оба отрицательные и START меньше (как и должно быть !?), затем FINISH, он выдаст
InvalidRequestException(why:range finish must come after start in the order of traversal).
Когда оба являются отрицательными, но START больше, чем FINISH (т.е. менее отрицательный), он вернет правильные результаты, но в неправильном порядке (наименее отрицательный, т.е. самый большой, первый).
Кто-нибудь может это прокомментировать? Я что-то не так делаю или может где-то в гекторе ошибка?
Редактировать: К сожалению, DoubleType был удален в предыдущей версии hector. Я забыл упомянуть, что я использую версию 1.1-0.