cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From JKnight JKnight <beukni...@gmail.com>
Subject Re: Cassandra Design or another solution
Date Mon, 05 Apr 2010 14:56:00 GMT
Thanks for your help,  David.


On Mon, Apr 5, 2010 at 7:25 PM, Andriy Bohdan <a.bohdan@gmail.com> wrote:

> It makes sense.
>
> Thanks, David!
>
> On Mon, Apr 5, 2010 at 2:34 PM, David Timothy Strauss
> <david@fourkitchens.com> wrote:
> > Cache the <product, tag> => <score> map as you write values (a
> "write-through" cache) so that reading the current score hits something like
> memcached instead of Cassandra. With a cache hit, you get an ideal,
> write-only path in Cassandra. Three blind writes in Cassandra is cheap -- no
> matter what your scale. The only risk is inability to efficiently remove old
> scores if you lose the contents of memcached, but that risk can be mitigated
> various ways.
> >
> > Of course, I'm assuming a single data center, here. Memcached isn't too
> useful for this if you need to update scores at two data centers.
> >
> > I'm not sure how much the 0.6 row cache might help in this case, too.
> >
> > ----- "Andriy Bohdan" <a.bohdan@gmail.com> wrote:
> >
> >> Hello guys
> >>
> >> I have a pretty similar task. There's a need to store tags of
> >> products
> >> with score. Score may go up and down and tags have to be ordered by
> >> their score for each product. Score is updated "very" often.
> >>
> >> I was thinking of using the following model (simplified here for
> >> clarity):
> >>
> >> Product = {
> >>     product_key: {
> >>          name: ....
> >>          etc..
> >>    }
> >>    ...
> >> }
> >>
> >> Product_Tags = {
> >>     product_key : {
> >>         tag_name: score
> >>          ...
> >>     }
> >>     ...
> >> }
> >>
> >> Product_Tags_Ordered (compareWith:BytesType) = {
> >>     product_key: {
> >>         (score, time_uuid) :  tag_name
> >>         ...
> >>     }
> >>     ...
> >> }
> >>
> >> So to update a score of a tag:
> >> 1) need to look old value of score to be able to remove it from
> >> Product_Tags_Ordered
> >> 2) remove Row from Product_Tags_Ordered with old score
> >> 3) update score in Product_Tags
> >> 4) insert new Row into Product_Tags_Ordered with new score
> >>
> >> 4 IO operations look like a bit too much to update one score as for
> >> me.
> >>
> >> I'm curious if there's any better solution I missed.
> >>
> >>
> >> On Mon, Apr 5, 2010 at 11:54 AM, JKnight JKnight <beuknight@gmail.com>
> >> wrote:
> >> > Thanks David,
> >> > But what's does "monotonicity" mean?
> >> >
> >> > User's score belongs to their action. When they win the game or
> >> sale
> >> > something, user's score  will increase. When user lose the game or
> >> buy
> >> > something, user's score will decrease.
> >> >
> >> > On Mon, Apr 5, 2010 at 4:09 AM, David Strauss
> >> <david@fourkitchens.com>
> >> > wrote:
> >> >>
> >> >> I need the question about monotonicity answered, too.
> >> >>
> >> >> You should also know: Cassandra is not ideal for directly tracking
> >> >> values you increment or decrement.
> >> >>
> >> >> On 2010-04-05 08:04, JKnight JKnight wrote:
> >> >> > Thanks for for reply, David.
> >> >> >
> >> >> > I will tell more the detail about the system. My system is used
> >> to store
> >> >> > the score (point) user earn when they play game.
> >> >> >
> >> >> > "Mark" is the score.
> >> >> > User's score changes when user win game, buy or sell anything.
> >> >> >
> >> >> > Sorry I make a mistake. My data model is:
> >> >> >
> >> >> > Mark{ //Column Family
> >> >> >     gameId:{ //row key
> >> >> >         mark_userId: ""// (column name : value),
> >> >> >         mark2_userId2: ""
> >> >> >     },
> >> >> >     gameId2:{//row key
> >> >> >         mark_userId: ""
> >> >> >     }
> >> >> > }
> >> >> >
> >> >> >
> >> >> > On Sun, Apr 4, 2010 at 11:44 PM, David Strauss
> >> <david@fourkitchens.com
> >> >> > <mailto:david@fourkitchens.com>> wrote:
> >> >> >
> >> >> >     On 2010-04-05 02:48, JKnight JKnight wrote:
> >> >> >     > I want to design the data storage to store user's mark
for
> >> a large
> >> >> >     > amount of user. When system run, user's mark changes
> >> frequently.
> >> >> >
> >> >> >     What is a "mark"?
> >> >> >
> >> >> >     > I want to list top 10 user have largest mark.
> >> >> >
> >> >> >     Do the "marks" increase monotonically? What other properties
> >> do they
> >> >> >     have?
> >> >> >
> >> >> >     > Could we use Cassandra for store this data?
> >> >> >     >
> >> >> >     > Ex, here my Cassandra data model design:
> >> >> >     > Mark{
> >> >> >     >     userId{
> >> >> >     >         mark_userId
> >> >> >     >     },
> >> >> >     > }
> >> >> >
> >> >> >     I do not understand that notation. What parts are the CF,
> >> key/row,
> >> >> > and
> >> >> >     column?
> >> >> >
> >> >> >     > When user's mark changes, we remove old mark_userId and
add
> >> new
> >> >> >     > mark_userId.
> >> >> >     > Because user's mark change frequently and with large
amount
> >>  of
> >> >> >     user, I
> >> >> >     > think Cassandra can not satisfy.
> >> >> >
> >> >> >     On the contrary, Cassandra excels at tracking rapidly
> >> changing data
> >> >> > and
> >> >> >     even shards rows to scale I/O horizontally.
> >> >> >
> >> >> >     --
> >> >> >     David Strauss
> >> >> >       | david@fourkitchens.com <mailto:david@fourkitchens.com>
> >> >> >     Four Kitchens
> >> >> >       | http://fourkitchens.com
> >> >> >       | +1 512 454 6659 [office]
> >> >> >       | +1 512 870 8453 [direct]
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > Best regards,
> >> >> > JKnight
> >> >>
> >> >>
> >> >> --
> >> >> David Strauss
> >> >>   | david@fourkitchens.com
> >> >>   | +1 512 577 5827 [mobile]
> >> >> Four Kitchens
> >> >>   | http://fourkitchens.com
> >> >>   | +1 512 454 6659 [office]
> >> >>   | +1 512 870 8453 [direct]
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Best regards,
> >> > JKnight
> >> >
> >>
> >>
> >>
> >> --
> >> Andriy
> >
> > --
> > David Strauss
> >   | david@fourkitchens.com
> >   | +1 512 577 5827 [mobile]
> > Four Kitchens
> >   | http://fourkitchens.com
> >   | +1 512 454 6659 [office]
> >   | +1 512 870 8453 [direct]
> >
>
>
>
> --
> Andriy
>



-- 
Best regards,
JKnight

Mime
View raw message