Hi TR,

The query I used is list email of user (also support paging)

Thanks for your reply.

On Tue, Dec 1, 2009 at 4:24 AM, Tux Racer <tuxracer69@gmail.com> wrote:
Hello QuyenPN,

You forgot to tell us what typical search queries you will do against your database.
If you know the user id and mail id, and just want to get the mail content, then you may even not need super columns:

key= userid_mailid->content:the_content

If you only know the user id and want to get the mails for that user, you could get the mails ID using and key ordered scanner.

Cheers
TR


Quyen Pham Ngoc wrote:
Hi all,

I know the limitation when using super column.

"# Cassandra has two levels of indexes: key and column. But in super columnfamilies there is a third level of subcolumns; these are not indexed, and any request for a subcolumn deserializes _all_ the subcolumns in that supercolumn. So you want to avoid a data model that requires large numbers of subcolumns"

I have Mail data model like
//Column Family
MailBox{
   userId{//row key
       "inbox":{//super column
           mailId1: mailData1,
           mailId2: mailData2            },
       "outbox":{//super column
           mailId3: mailData3,
           mailId4: mailData4
       }
       }
}

I know above design violate the Cassandra limitation with super column, because day by day, email user send and receive increase.
Try to avoid this, I have 2 solution:
1. Use 2 column Family: InboxMailBox and OutboxMailBox
//Column Family
InboxMailBox{
   userId{//row key
       mailId1: mailData1,
       mailId2: mailData2        }
}

//Column Family
OutboxMailBox{
   userId{//row key
       mailId3: mailData3,
       mailId4: mailData4            }
}

2. Use complex row key: I use a prefix append to userId, ex "inbox" or "outbox"

//Column Family
MailBox{
   prefix + userId{//row key
       mailId1: mailData1,
       mailId2: mailData2            }
}

Could you give me some advice?
Thanks a lot for support.


Best regards,
QuyenPN





--
Best regards,
QuyenPN

Mail: quyenpnq@gmail.com
Tel: 0909 269 792