2014-11-28 6 views
0

Я работаю в HBase последние несколько недель. Мой вопрос:Получение строк таблицы HBase на основе метки времени в Java

У меня есть таблица HBase со 100 записями, и каждая запись имеет три столбца в одном семействе столбцов и есть только одно семейство столбцов. Теперь я хочу получить строки на основе метки времени. Средство, которое добавляется последним, должно быть восстановлено первым. Это похоже на (LIFO). Теперь эта функциональность доступна в HBase? Если да, то как я могу это сделать? Я использую 0.98.3.

ПРИМЕЧАНИЕ: При вводе данных я не указывал временные метки вручную.

Я пытаюсь сделать это на языке Java.

Привет

ответ

0

Строки естественно сортируются в лексикографическом по ключу строки (по возрастанию), метка времени не участвует вообще при выполнении полного сканирования таблицы, в первой строке будет получен самый низкий.

Это было бы порядок в случае ключей строки строки:

STRING ROW 
0  \x30 
00  \x30\x30 
0000 \x30\x30\x30\x30 
0001 \x30\x30\x30\x31 
0002 \x30\x30\x30\x32 
... 
0010 \x30\x30\x31\x30 
1  \x31 
10  \x31\x30 
2  \x32 
a  \x61 
ab  \x61\x62 
... 
zzzz \x7A\x7A\x7A\x7A 

Это будет порядок в случае 4 байта знаковых целых числа строк ключей:

INT  ROW 
1  \x00\x00\x00\x01 
2  \x00\x00\x00\x02 
3  \x00\x00\x00\x03 
4  \x00\x00\x00\x04 
... 
100  \x00\x00\x00\x64 
... 
10000 \x00\x00\x27\x10 
... 
MAX_INT \x7F\xFF\xFF\xFF 

Если вам нужно проверить чтобы работать как LIFO, вы должны включить инвертированную временную метку в качестве префикса для вашей строки (хотя этот дизайн не рекомендуется для тяжелых условий записи из-за hotspotting).

byte[] rowKey = Bytes.add(Byte.toBytes(Long.MAX_VALUE - System.currentTimeMillis()), "-myRow".getBytes()); 

Если вы не инвертируете временную метку, она будет работать как LILO.

Для получения дополнительной информации ознакомьтесь с данным разделом HBase Book: https://hbase.apache.org/book/rowkey.design.html

Смежные вопросы