incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Lanny Ripple <la...@spotright.com>
Subject Re: TimeUUID Order Partitioner
Date Wed, 27 Mar 2013 13:42:24 GMT
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 <aaron@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 <cperezmig@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 <aaron@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 <cperezmig@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
>> 
>> 
> 


Mime
View raw message