well, no. my assumption is that he knows what the 5 itemTypes (or appropriate corresponding ids) are, so he can do a known 5-rowkey lookup. if he does not know, then agreed, my proposal is not a great fit.

could do (as originally suggested)

userId -> itemType:activityId

if you want to keep everything in the same row (again assumes that you know what the itemTypes are). but then you can't really do a multiget, you have to do 5 separate slice queries, one for each item type.

can also do some wacky stuff around maintaining a row that explicitly only holds the last 10 items by itemType (meaning you have to delete the oldest one everytime you insert a new one), but that prolly requires read-on-write etc and is a lot messier. and you will prolly need to worry about the case where you (transiently) have more than 10 'latest' items for a single itemType.

On 28/03/2012 09:49, Maciej Miklas wrote:
yes - but anyway in your example you need "key range quey" and that requires OOP, right?

On Tue, Mar 27, 2012 at 5:13 PM, Guy Incognito <dnd1...@gmail.com <mailto:dnd1...@gmail.com>> wrote:

    multiget does not require OPP.

    On 27/03/2012 09:51, Maciej Miklas wrote:
    multiget would require Order Preserving Partitioner, and this can
    lead to unbalanced ring and hot spots.

    Maybe you can use secondary index on "itemtype" - is must have
    small cardinality:
    http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/



    On Tue, Mar 27, 2012 at 10:10 AM, Guy Incognito
    <dnd1...@gmail.com <mailto:dnd1...@gmail.com>> wrote:

        without the ability to do disjoint column slices, i would
        probably use 5 different rows.

        userId:itemType -> activityId

        then it's a multiget slice of 10 items from each of your 5 rows.


        On 26/03/2012 22:16, Ertio Lew wrote:

            I need to store activities by each user, on 5 items
            types. I always want to read last 10 activities on each
            item type, by a user (ie, total activities to read at a
            time =50).

            I am wanting to store these activities in a single row
            for each user so that they can be retrieved in single row
            query, since I want to read all the last 10 activities on
            each item.. I am thinking of creating composite names
            appending "itemtype" : "activityId"(activityId is just
            timestamp value) but then, I don't see about how to read
            the last 10 activities from all itemtypes.

            Any ideas about schema to do this better way ?






Reply via email to