In any case, the common approach to this in Cassandra is to not directly manipulate the user's total score but to insert columns representing changes to the score, later totaling them (and possibly inserting them elsewhere so you get the automatic sort). There are many fancy ways to approach this problem and reduce recalculation work.
To be more specific about my reason for asking about monotonicity, if user scores increased monotonically, you could simply keep a current "top ten" list and bump out old members as new people's scores qualified for the top ten. Thus, you'd be keeping an ordered set of the top ten instead of an ordered set of all people. Unfortunately, the possibility of decreasing scores means members of the top ten may self-disqualify by a score decline, requiring promotion of the former 11th person to the top ten and immediate identification of the former 12th person to fill the 11th spot. (With a lack of monotonicity, the top eleven -- not just ten -- must always be tracked to efficiently know when someone drops below the top ten.) ----- "David Timothy Strauss" <da...@fourkitchens.com> wrote: If user scores move in more than one direction, as they apparently do in your case, they are not monotonic. Monotonicity can make system design a bit easier for various reasons. ----- "JKnight JKnight" <beukni...@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 < da...@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 < da...@fourkitchens.com > <mailto: da...@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 > | da...@fourkitchens.com <mailto: da...@fourkitchens.com > > Four Kitchens > | http://fourkitchens.com > | +1 512 454 6659 [office] > | +1 512 870 8453 [direct] > > > > > -- > Best regards, > JKnight -- David Strauss | da...@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 -- David Strauss | da...@fourkitchens.com | +1 512 577 5827 [mobile] Four Kitchens | http://fourkitchens.com | +1 512 454 6659 [office] | +1 512 870 8453 [direct] -- David Strauss | da...@fourkitchens.com | +1 512 577 5827 [mobile] Four Kitchens | http://fourkitchens.com | +1 512 454 6659 [office] | +1 512 870 8453 [direct]