Sorry, forgot to disclaim that this only works with unsigned integers. I assume based on the first post that this was for positive numbers? A proper sort of signed numbers when storing as strings is not totally straightforward either as just adding a - to the front would actually have the first entry being the largest negative number (closest to 0) rather than the smallest number. (ie. -1 is lexicographically before -100)
Using intToBytes, negatives would be after all positives and would be in increasing order (more positive). It's feasible to design a reverse twos-complement encoding that would give proper ordering (leading 1 on positives instead of negatives) if you need support for signed integers and wanted to store binary. JG > -----Original Message----- > From: [email protected] [mailto:[email protected]] On Behalf Of > Clint Morgan > Sent: Tuesday, December 16, 2008 2:41 PM > To: [email protected] > Subject: Re: Integer key range scan > > Actually, thats not the case: > > @Test > public void test() { > > Integer lastInt = 0; > byte[] lastBytes = null; > for (int i = -3; i < 3; i++) { > byte[] current = Bytes.toBytes(i); > > if (lastBytes != null) { > Assert.isTrue(lastInt.compareTo(i) < 0); > Assert.isTrue(Bytes.compareTo(lastBytes, current) < 0); > } > lastBytes = current; > lastInt = i; > } > } > > Fails... > > On Tue, Dec 16, 2008 at 2:32 PM, Jonathan Gray <[email protected]> > wrote: > > > intToBytes is really just a "cast" to bytes, allowing you to store > the > > actual binary value of the integer. It would be in increasing > numerical > > order. > > > > This is an example of the oddity that is Java... > > > > Great move by using big-endian in the virtual machine, but if you > want to > > actually access the binary the JVM is using for an integer you have > to > > write > > your own function that uses bitwise operations to extract the value > into a > > byte[]. > > > > Anyways, the answer is Yes. > > > > JG > > > > > -----Original Message----- > > > From: [email protected] [mailto:[email protected]] On Behalf Of > > > Clint Morgan > > > Sent: Tuesday, December 16, 2008 2:13 PM > > > To: [email protected] > > > Subject: Re: Integer key range scan > > > > > > Does intToBytes preserve ordering? IE is the leicographic ordering > of > > > the > > > resulting byte [] the same as the ordering of the original ints? > > > > > > I think Edward needs that for his scan to work... > > > > > > -clint > > > > > > On Tue, Dec 16, 2008 at 1:25 PM, Jonathan Gray <[email protected]> > > > wrote: > > > > > > > I believe there are intToBytes/bytesToInt functions in > Bytes.java. > > > Rather > > > > than padding and storing as strings, you can just store as binary > > > numbers. > > > > If you can't find those functions I can send you one of our > helper > > > classes > > > > that deals with binary data easily. > > > > > > > > Though this does make things a bit less pretty in web ui/shell > it's > > > far > > > > more efficient. > > > > > > > > JG > > > > > > > > > -----Original Message----- > > > > > From: [email protected] [mailto:[email protected]] On Behalf Of > > > Edward > > > > > J. Yoon > > > > > Sent: Tuesday, December 16, 2008 9:39 AM > > > > > To: [email protected] > > > > > Subject: Re: Integer key range scan > > > > > > > > > > Oh Yes, Thanks for tip J-D. > > > > > > > > > > On Wed, Dec 17, 2008 at 2:27 AM, Jean-Daniel Cryans > > > > > <[email protected]> wrote: > > > > > > Yes, then you would scan with startrow = 0000000035 and > stoprow = > > > > > 0000000236 > > > > > > if this is really what you want to do. > > > > > > > > > > > > J-D > > > > > > > > > > > > On Tue, Dec 16, 2008 at 12:25 PM, Edward J. Yoon > > > > > <[email protected]>wrote: > > > > > > > > > > > >> Like this? 0000000035 ~ 0000000235 > > > > > >> > > > > > >> On Wed, Dec 17, 2008 at 2:21 AM, Jean-Daniel Cryans > > > > > <[email protected]> > > > > > >> wrote: > > > > > >> > You can left pad with zeroes then use the scanning > facility > > > for > > > > > faster > > > > > >> > retrieval. > > > > > >> > > > > > > >> > J-D > > > > > >> > > > > > > >> > On Tue, Dec 16, 2008 at 12:18 PM, Edward J. Yoon > > > > > <[email protected] > > > > > >> >wrote: > > > > > >> > > > > > > >> >> I would use integer key and extract data from range > scans. > > > But, > > > > > hbase > > > > > >> >> row/column is alphabetically sorted. > > > > > >> >> > > > > > >> >> So, I wrote like below: > > > > > >> >> > > > > > >> >> for (int i = 35; i <= 235; i++) { > > > > > >> >> table.getRow(i, columns[]); > > > > > >> >> } > > > > > >> >> > > > > > >> >> It seems, causes too many requests over hbase. > > > > > >> >> Any suggestion? > > > > > >> >> > > > > > >> >> -- > > > > > >> >> Best Regards, Edward J. Yoon @ NHN, corp. > > > > > >> >> [email protected] > > > > > >> >> http://blog.udanax.org > > > > > >> >> > > > > > >> > > > > > > >> > > > > > >> > > > > > >> > > > > > >> -- > > > > > >> Best Regards, Edward J. Yoon @ NHN, corp. > > > > > >> [email protected] > > > > > >> http://blog.udanax.org > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Best Regards, Edward J. Yoon @ NHN, corp. > > > > > [email protected] > > > > > http://blog.udanax.org > > > > > > > > > > > >
