Accumulo - Получение правильно отсортированного результата сканера

Есть ли способ сортировки записей, полученных со сканера? Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть суффиксные индексы для устранения повторяющихся идентификаторов строк, и когда я сканирую, я не получаю идеально упорядоченный список по возрастанию. Например, я получаю что-то вроде следующего:

RowId: 2013-08-05 15:29:45.872        Value: 0
RowId: 2013-08-05 15:29:45.879        Value: 1
RowId: 2013-08-05 15:29:45.88         Value: 2
RowId: 2013-08-05 15:29:45.881        Value: 11 
//The previous should be the following:
RowId: 2013-08-05 15:29:45.88_a       Value: 3

Как видите, 0,881 > 0,88, и все же правильная строка размещается примерно через 30 записей после этого. Есть ли способ переопределить сортировку или есть удобный способ вернуть правильно заказанный сканер?


person Mastergeek    schedule 05.08.2013    source источник


Ответы (2)


Записи в Accumulo отсортированы лексикографически. В ASCII «1» сортируется перед «_», поэтому у вас есть «881» перед «88_a». Когда вы пытаетесь сохранить числовую сортировку в Accumulo, один из подходов состоит в том, чтобы дополнить числа до фиксированной длины нулями. Если самое большое число, которое у вас есть, равно 999, вы должны сделать все числа длиной 3 символа, поэтому «8» станет «008», а «88» будет «088».

person billie    schedule 06.08.2013
comment
Вы говорите, что в моем случае я должен добавить наносекунды в конце метки времени? - person Mastergeek; 06.08.2013
comment
Также я не знал, что Accumulo сортируется таким образом и ценит подстрекательство. - person Mastergeek; 06.08.2013
comment
Да, точно. Это заставит его отсортировать так, как вы ожидаете. - person billie; 07.08.2013

Как сказала Билли, Accumulo сортирует лексикографически. На GitHub есть проект под названием Orderly, который вы, возможно, захотите проверить.

Этот проект сериализует широкий спектр простых и сложных ключевых типов данных в кодировку байтов с сохранением порядка сортировки. Сортировка сериализованных массивов байтов приводит к тому же порядку, что и естественный порядок сортировки базового типа данных.

К сожалению, он не обновлялся в течение 6 месяцев. Хотя это интересная концепция.

person FuriousGeorge    schedule 09.08.2013
comment
Действительно интересная концепция. Спасибо за ссылку на проект. - person Mastergeek; 12.08.2013