It was our original intention on discussing this feature was to have back-and-forth conversion from timestamps (we were modelling similar functionality in Pycassa). It's lack of inclusion may have just been an oversight. We will add this in Hector trunk shortly - thanks for the complete code sample.
On Tue, Jan 4, 2011 at 10:06 PM, Roshan Dawrani <roshandawr...@gmail.com> wrote: > Ok, found the solution - finally ! - by applying opposite of what > createTime() does in TimeUUIDUtils. Ideally I would have preferred for this > solution to come from Hector API, so I didn't have to be tied to the private > createTime() implementation. > > ================================================================ > import java.util.UUID; > import me.prettyprint.cassandra.utils.TimeUUIDUtils; > > public class TryHector { > public static void main(String[] args) throws Exception { > final long NUM_100NS_INTERVALS_SINCE_UUID_EPOCH = > 0x01b21dd213814000L; > > UUID u1 = TimeUUIDUtils.getUniqueTimeUUIDinMillis(); > final long t1 = u1.timestamp(); > > long tmp = (t1 - NUM_100NS_INTERVALS_SINCE_UUID_EPOCH) / 10000; > > UUID u2 = TimeUUIDUtils.getTimeUUID(tmp); > long t2 = u2.timestamp(); > > System.out.println(u2.equals(u1)); > System.out.println(t2 == t1); > } > > } > ================================================================ > > > On Wed, Jan 5, 2011 at 8:15 AM, Roshan Dawrani <roshandawr...@gmail.com> > wrote: >> >> If I use com.eaio.uuid.UUID directly, then I am able to do what I need >> (attached a Java program for the same), but unfortunately I need to deal >> with java.util.UUID in my application and I don't have its equivalent >> com.eaio.uuid.UUID at the point where I need the timestamp value. >> >> Any suggestion on how I can achieve the equivalent using Hector library's >> TimeUUIDUtils? >> >> On Wed, Jan 5, 2011 at 7:21 AM, Roshan Dawrani <roshandawr...@gmail.com> >> wrote: >>> >>> Hi Victor / Patricio, >>> >>> I have been using Hector library's TimeUUIDUtils. I also just looked at >>> TimeUUIDUtilsTest also but didn't find anything similar being tested there. >>> >>> Here is what I am trying and it's not working - I am creating a Time >>> UUID, extracting its timestamp value and with that I create another Time >>> UUID and I am expecting both time UUIDs to have the same timestamp() value - >>> am I doing / expecting something wrong here?: >>> >>> ======================================================= >>> import java.util.UUID; >>> import me.prettyprint.cassandra.utils.TimeUUIDUtils; >>> >>> public class TryHector { >>> public static void main(String[] args) throws Exception { >>> UUID someUUID = TimeUUIDUtils.getUniqueTimeUUIDinMillis(); >>> long timestamp1 = someUUID.timestamp(); >>> >>> UUID otherUUID = TimeUUIDUtils.getTimeUUID(timestamp1); >>> long timestamp2 = otherUUID.timestamp(); >>> >>> System.out.println(timestamp1); >>> System.out.println(timestamp2); >>> } >>> } >>> ======================================================= >>> >>> I have to create the timestamp() equivalent of my time UUIDs so I can >>> send it to my UI client, for which it will be simpler to compare "long" >>> timestamp than comparing UUIDs. Then for the "long" timestamp chosen by the >>> client, I need to re-create the equivalent time UUID and go and filter the >>> data from Cassandra database. >>> >>> -- >>> Roshan >>> Blog: http://roshandawrani.wordpress.com/ >>> Twitter: @roshandawrani >>> Skype: roshandawrani >>> >>> On Wed, Jan 5, 2011 at 1:32 AM, Victor Kabdebon >>> <victor.kabde...@gmail.com> wrote: >>>> >>>> Hi Roshan, >>>> Sorry I misunderstood your problem.It is weird that it doesn't work, it >>>> works for me... >>>> As Patricio pointed out use hector "standard" way of creating TimeUUID >>>> and tell us if it still doesn't work. >>>> Maybe you can paste here some of the code you use to query your columns >>>> too. >>>> >>>> Victor K. >>>> http://www.voxnucleus.fr >>>> >>>> 2011/1/4 Patricio Echagüe <patric...@gmail.com> >>>>> >>>>> In Hector framework, take a look at TimeUUIDUtils.java >>>>> >>>>> You can create a UUID using TimeUUIDUtils.getTimeUUID(long time); or >>>>> TimeUUIDUtils.getTimeUUID(ClockResolution clock) >>>>> >>>>> and later on, TimeUUIDUtils.getTimeFromUUID(..) or just >>>>> UUID.timestamp(); >>>>> >>>>> There are some example in TimeUUIDUtilsTest.java >>>>> >>>>> Let me know if it helps. >>>>> >>>>> >>>>> >>>>> On Tue, Jan 4, 2011 at 10:27 AM, Roshan Dawrani >>>>> <roshandawr...@gmail.com> wrote: >>>>>> >>>>>> Hello Victor, >>>>>> >>>>>> It is actually not that I need the 2 UUIDs to be exactly same - they >>>>>> need to be same timestamp wise. >>>>>> >>>>>> So, what I need is to extract the timestamp portion from a time UUID >>>>>> (say, U1) and then later in the cycle, use the same long timestamp value >>>>>> to >>>>>> re-create a UUID (say, U2) that is equivalent of the previous one in >>>>>> terms >>>>>> of its timestamp portion - i.e., I should be able to give this U2 and >>>>>> filter >>>>>> the data from a column family - and it should be same as if I had used >>>>>> the >>>>>> original UUID U1. >>>>>> >>>>>> Does it make any more sense than before? Any way I can do that? >>>>>> >>>>>> rgds, >>>>>> Roshan >>>>>> >>>>>> On Tue, Jan 4, 2011 at 11:46 PM, Victor Kabdebon >>>>>> <victor.kabde...@gmail.com> wrote: >>>>>>> >>>>>>> Hello Roshan, >>>>>>> Well it is normal to do not be able to get the exact same UUID from a >>>>>>> timestamp, it is its purpose. >>>>>>> When you create an UUID you have in fact two information : random 64 >>>>>>> bits number - 64 bits timestamp. You put that together and you have your >>>>>>> uuid. >>>>>>> . >>>>>>> So unless you save your random number two UUID for the same milli( or >>>>>>> micro) second are different. >>>>>>> Best regards, >>>>>>> Victor K. >>>>>>> http://www.voxnucleus.fr >>>>>>> >>>>>>> 2011/1/4 Roshan Dawrani <roshandawr...@gmail.com> >>>>>>>> >>>>>>>> Hi, >>>>>>>> I am having a little difficulty converting a time UUID to its >>>>>>>> timestamp equivalent and back. Can someone please help? >>>>>>>> >>>>>>>> Here is what I am trying. Is it not the right way to do it? >>>>>>>> >>>>>>>> =========================================================== >>>>>>>> UUID someUUID = TimeUUIDUtils.getUniqueTimeUUIDinMillis(); >>>>>>>> >>>>>>>> long time = someUUID.timestamp(); /* convery from UUID to a >>>>>>>> long timestamp */ >>>>>>>> UUID otherUUID = TimeUUIDUtils.getTimeUUID(time); /* do the >>>>>>>> reverse and get back the UUID from timestamp */ >>>>>>>> >>>>>>>> System.out.println(someUUID); /* someUUID and otherUUID >>>>>>>> should be same, but are different */ >>>>>>>> System.out.println(otherUUID); >>>>>>>> =========================================================== >>>>>>>> >>>>>>>> -- >>>>>>>> Roshan >>>>>>>> Blog: http://roshandawrani.wordpress.com/ >>>>>>>> Twitter: @roshandawrani >>>>>>>> Skype: roshandawrani >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Roshan >>>>>> Blog: http://roshandawrani.wordpress.com/ >>>>>> Twitter: @roshandawrani >>>>>> Skype: roshandawrani >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Patricio.- >>>> >>> > > > > -- > Roshan > Blog: http://roshandawrani.wordpress.com/ > Twitter: @roshandawrani > Skype: roshandawrani > >