HBase is 8-bit clean, so you can use simple big-endian conversions.
The Bytes class included in HBase has a bunch of examples you can
use/reuse.

The Long.MAX - value advice is also solid.  I have used that myself as well.

-ryan

On Fri, Jun 25, 2010 at 12:03 PM, Andrey Stepachev <[email protected]> wrote:
> and even better use "string sortable long" (code taken from SOLR)
> (for reverse order don't forget to subtrcact value from Long.MAX as in
> message before)
>
>   // uses binary representation of an int to build a string of
>    // chars that will sort correctly.  Only char ranges
>    // less than 0xd800 will be used to avoid UCS-16 surrogates.
>    // we can use the lowest 15 bits of a char, (or a mask of 0x7fff)
>
>    public static int long2bytes(long val, byte[] out, int offset) {
>        val += Long.MIN_VALUE;
>        out[offset++] = (byte) 0;
>        out[offset++] = (byte) (val >>> 60);
>        out[offset++] = (byte) (val >>> 53 & 0x7f);
>        out[offset++] = (byte) (val >>> 45 & 0xff);
>        out[offset++] = (byte) (val >>> 38 & 0x7f);
>        out[offset++] = (byte) (val >>> 30 & 0xff);
>        out[offset++] = (byte) (val >>> 23 & 0x7f);
>        out[offset++] = (byte) (val >>> 15 & 0xff);
>        out[offset++] = (byte) (val >>> 8 & 0x7f);
>        out[offset] = (byte) (val & 0xff);
>        return SORTABLE_LONG_SIZEOF;
>    }
>
>   public static long bytes2long(byte[] in, int offset, int len) {
>        offset++; // skip 1 byte
>        long val = ((long) in[offset++] & 0xff) << 60;
>        val |= ((long) in[offset++] & 0x7f) << 53;
>        val |= ((long) in[offset++] & 0xff) << 45;
>        val |= ((long) in[offset++] & 0x7f) << 38;
>        val |= ((long) in[offset++] & 0xff) << 30;
>        val |= ((long) in[offset++] & 0x7f) << 23;
>        val |= ((long) in[offset++] & 0xff) << 15;
>        val |= ((long) in[offset++] & 0x7f) << 8;
>        val |= ((long) in[offset] & 0xff);
>        val -= Long.MIN_VALUE;
>        return val;
>    }
> 2010/6/25 Andrey Stepachev <[email protected]>:
>> use Long.MAX - incrementColumnValue() as qualifier
>>
>> 2010/6/25 N Kapshoo <[email protected]>:
>>> I have a 'long' number that I get by using
>>> HTable.'incrementColumnValue'. This long is used as the qualifier id
>>> on a columnFamily.
>>>
>>> However in my listings, I always want the latest number first
>>> (descending order basically).
>>>
>>> Currently I call the NavigableMap.descendingKeySet after I do the 'Get'.
>>>
>>> Is this the optimal way of doing it? Can I do something that can be
>>> faster? Especially if I start filtering out and getting only first
>>> 1000 etc then this wont work.
>>>
>>> How should I go about this? Change the key or is there something else
>>> I can do while creating the table, doing a Get etc?
>>>
>>> Thanks.
>>>
>>
>

Reply via email to