cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dan Washusen <...@reactive.org>
Subject Re: I: Re: Are row-keys sorted by the compareWith?
Date Tue, 01 Mar 2011 20:45:48 GMT
Pelops moved to github several months ago...

https://github.com/s7/scale7-pelops/blob/master/src/main/java/org/scale7/cassandra/pelops/Selector.java#L1179

Cheers,
-- 
Dan Washusen
On Wednesday, 2 March 2011 at 3:35 AM, Matthew Dennis wrote: 
> I'm not really familiar with pelops code, but I found two implementations (~ line 454
and ~ line 559) of getColumnsFromRows in Selector.java in pelops trunk.
> 
> The first uses a HashMap so it clearly isn't ordered, the second uses a LinkedHashMap
but it inserts the keys in the order returned by C* which we already know isn't ordered.
> 
> See http://bit.ly/egZaXi for relevant code.
> 
> Like I said, I'm not really familiar with pelops so I could be completely off on this,
but it looks like if pelops was intending to preserve the order of the requested keys that
it's not actually doing it...
> 
> On Wed, Feb 23, 2011 at 3:44 PM, Dan Washusen <dan@reactive.org> wrote:
> > Hi Matthew,
> > As you mention the map returned from multiget_slice is not order preserving, Pelops
is doing this on the client side...
> > 
> > Cheers,
> > Dan
> > 
> > -- 
> > Dan Washusen
> > Sent with Sparrow
> > On Wednesday, 23 February 2011 at 8:38 PM, Matthew Dennis wrote:
> > > The map returned by multiget_slice (what I suspect is the underlying thrift
call for getColumnsFromRows) is not a order preserving map, it's a HashMap so the order of
the returned results cannot be depended on.  Even if it was a order preserving map, not all
languages would be able to make use of the results since not all languages have ordered maps
(though many, including Java, certainly do).
> > > 
> > > That being said, it would be fairly easy to change this on the C* side to preserve
the order the keys were requested in, though as mentioned not all clients could take advantage
of it.
> > > 
> > >  On Mon, Feb 21, 2011 at 4:09 PM, cbertu81@libero.it <cbertu81@libero.it>
wrote:
> > > > > 
> > > > > As Jonathan mentions the compareWith on a column family def. is defines
the order for the columns *within* a row... In order to control the ordering of rows you'll
need to use the OrderPreservingPartitioner (http://www.datastax.com/docs/0.7/operations/clustering#tokens-partitioners-ring).
> > > > > 
> > > > > Thanks for your answer and for your time, I will take a look at this.
> > > > > 
> > > > > As for getColumnsFromRows; it should be returning you a map of lists.
The map is insertion-order-preserving and populated based on the provided list of row keys
(so if you iterate over the entries in the map they should be in the same order as the list
of row keys). 
> > > > > 
> > > > > mmm ... well it didn't happen like this. In my code I had a CF named
comments and also a CF called usercomments. UserComments use an uuid as row-key to keep, TimeUUID
sorted, the "pointers" to the comments of the user. When I get the sorted list of keys from
the UserComments and I use this list as row-keys-list in the GetColumnsFromRows I don't get
back the data sorted as I expect them to be. 
> > > > > It looks like if Cassandra/Pelops does not care on how I provide
the row-keys-list. I am sure about that cause I did something different: I iterate over my
row-keys-list and made many GetColumnFromRow instead of one GetColumnsFromRows and when I
iterate data are correctly sorted. But this can not be a solution ...
> > > > > 
> > > > > I am using Cassandra 0.6.9
> > > > > 
> > > > > I profit of your knownledge of Pelops to ask you something: I am
evaluating the migration to Cassandra 0.7 ... as far as you know, in terms of written code,
is it an heavy job? 
> > > > > 
> > > > > Best Regards
> > > > > 
> > > > > Carlo
> > > > > 
> > > > > >  ----Messaggio originale----
> > > > > >  Da: dan@reactive.org
> > > > > > 
> > > > > > On Saturday, 19 February 2011 at 8:16 AM, cbertu81@libero.it
wrote:
> > > > > > > Hi all,
> > > > > > > I created a CF in which i need to get, sorted by time,
the Rows inside. Each 
> > > > > > > Row represents a comment.
> > > > > > > 
> > > > > > > <ColumnFamily name="Comments" compareWith="TimeUUIDType"
/ >
> > > > > > > 
> > > > > > > I've created a few rows using as Row Key a generated TimeUUID
but when I call 
> > > > > > > the Pelops method "GetColumnsFromRows" I don't get the
data back as I expect: 
> > > > > > > rows are not sorted by TimeUUID.
> > > > > > >  I though it was probably cause of the random-part of the
TimeUUID so I create 
> > > > > > > a new CF ...
> > > > > > > 
> > > > > > > <ColumnFamily name="Comments2" compareWith="LongType"
/ >
> > > > > > > 
> > > > > > > This time I created a few rows using the java System.CurrentTimeMillis()
that 
> > > > > > >  retrieve a long. I call again the "GetColumnsFromRows"
and again the same 
> > > > > > > results: data are not sorted!
> > > > > > > I've read many times that Rows are sorted as specified
in the compareWith but 
> > > > > > > I can't see it. 
> > > > > > >  To solve this problem for the moment I've used a SuperColumnFamily
with an 
> > > > > > > UNIQUE ROW ... but I think this is just a workaround and
not the solution.
> > > > > > > 
> > > > > > > <ColumnFamily name="Comments" type="Super" compareWith="TimeUUIDType"

> > > > > > >  CompareSubcolumnsWith="BytesType"/ >
> > > > > > > 
> > > > > > > Now when I call the "GetSuperColumnsFromRow" I get all
the SuperColumns as I 
> > > > > > > expected: sorted by TimeUUID. Why it does not happen the
same with the Rows? 
> > > > > > >  I'm confused.
> > > > > > > 
> > > > > > > TIA for any help.
> > > > > > > 
> > > > > > > Best Regards
> > > > > > > 
> > > > > > > Carlo
> > > > > > > 
> > > > > > 
> > > > > > 
> > > > > 
> > > > > 
> > > 
> > > 
> > 
> 

Mime
View raw message