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 <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 > -- Andriy