Thanks, Lanny. That is what I am doing. Actually I'm having another problem. My UUIDOrderedPartitioner doesn't order by time. Instead, it orders by byte order and I cannot find why. Which are the functions that control ordering between tokens? I have implemented time ordering in the "compareTo" function of my UUID token class, but it seems that Cassandra is ignoring it. For example:
Let's suppouse that I have a Users CF where each row represents a user in a cluster of 1 node. Rows are ordered by TimeUUID. I create some users in the next order: user a created with user_id: eac850fa-96f4-11e2-9f22-72ad6af0e500 user b created with user_id: f17f9ae8-96f4-11e2-98aa-421151417092 user c created with user_id: f82fccfa-96f4-11e2-8d99-26f8461d074c user d created with user_id: fee21cec-96f4-11e2-945b-f9a2a2e32308 user e created with user_id: 058ec180-96f5-11e2-8c88-4aaf94e4f04e user f created with user_id: 0c5032ba-96f5-11e2-95a5-60a128c0b3f4 user g created with user_id: 13036b86-96f5-11e2-80dd-566654c686cb user h created with user_id: 19b245f6-96f5-11e2-9c8f-b315f455e5e0 That is the order I would expect to find if I read the CF, but if I do, I obtain (with any client or library I've tried): user_id: 058ec180-96f5-11e2-8c88-4aaf94e4f04e name:"e" user_id: 0c5032ba-96f5-11e2-95a5-60a128c0b3f4 name:"f" user_id: 13036b86-96f5-11e2-80dd-566654c686cb name:"g" user_id: 19b245f6-96f5-11e2-9c8f-b315f455e5e0 name:"h" user_id: eac850fa-96f4-11e2-9f22-72ad6af0e500 name:"a" user_id: f17f9ae8-96f4-11e2-98aa-421151417092 name:"b" user_id: f82fccfa-96f4-11e2-8d99-26f8461d074c name:"c" user_id: fee21cec-96f4-11e2-945b-f9a2a2e32308 name:"d" Any idea what's happening? Carlos Pérez Miguel 2013/3/27 Lanny Ripple <la...@spotright.com> > Ah. TimeUUID. Not as useful for you then but still something for the > toolbox. > > On Mar 27, 2013, at 8:42 AM, Lanny Ripple <la...@spotright.com> wrote: > > > A type 4 UUID can be created from two Longs. You could MD5 your strings > giving you 128 hashed bits and then make UUIDs out of that. Using Scala: > > > > import java.nio.ByteBuffer > > import java.security.MessageDigest > > import java.util.UUID > > > > val key = "Hello, World!" > > > > val md = MessageDigest.getInstance("MD5") > > val dig = md.digest(key.getBytes("UTF-8")) > > val bb = ByteBuffer.wrap(dig) > > > > val msb = bb.getLong > > val lsb = bb.getLong > > > > val uuid = new UUID(msb, lsb) > > > > > > On Mar 26, 2013, at 3:22 PM, aaron morton <aa...@thelastpickle.com> > wrote: > > > >>> Any idea? > >> Not off the top of my head. > >> > >> Cheers > >> > >> ----------------- > >> Aaron Morton > >> Freelance Cassandra Consultant > >> New Zealand > >> > >> @aaronmorton > >> http://www.thelastpickle.com > >> > >> On 26/03/2013, at 2:13 AM, Carlos Pérez Miguel <cperez...@gmail.com> > wrote: > >> > >>> Yes it does. Thank you Aaron. > >>> > >>> Now I realized that the system keyspace uses string as keys, like > "Ring" or "ClusterName", and I don't know how to convert these type of keys > into UUID. Any idea? > >>> > >>> > >>> Carlos Pérez Miguel > >>> > >>> > >>> 2013/3/25 aaron morton <aa...@thelastpickle.com> > >>> The best thing to do is start with a look at ByteOrderedPartitoner and > AbstractByteOrderedPartitioner. > >>> > >>> You'll want to create a new TimeUUIDToken extends Token<UUID> and a > new UUIDPartitioner that extends AbstractPartitioner<> > >>> > >>> Usual disclaimer that ordered partitioners cause problems with load > balancing. > >>> > >>> Hope that helps. > >>> > >>> ----------------- > >>> Aaron Morton > >>> Freelance Cassandra Consultant > >>> New Zealand > >>> > >>> @aaronmorton > >>> http://www.thelastpickle.com > >>> > >>> On 25/03/2013, at 1:12 AM, Carlos Pérez Miguel <cperez...@gmail.com> > wrote: > >>> > >>>> Hi, > >>>> > >>>> I store in my system rows where the key is a UUID version1, TimeUUID. > I would like to maintain rows ordered by time. I know that in this case, it > is recomended to use an external CF where column names are UUID ordered by > time. But in my use case this is not possible, so I would like to use a > custom Partitioner in order to do this. If I use ByteOrderedPartitioner > rows are not correctly ordered because of the way a UUID stores the > timestamp. What is needed in order to implement my own Partitioner? > >>>> > >>>> Thank you. > >>>> > >>>> Carlos Pérez Miguel > >>> > >>> > >> > > > >