patternMinor
Scalability: Desiging a message table
Viewed 0 times
scalabilitymessagetabledesiging
Problem
This question might be deadly simple but I wanted to make sure I am going through the correct path and not making any simple and irrevertible mistakes.
My project will be based on messaging and it won't be as less-used as a side tool like in Twitter or Facebook (not that they are not used but it's not the key option presented to users)
I was wondering will a simple table design like;
will suffice because, even though it is planned to be a small project, I do not believe that all the messages should be stored in one table and for each user when they want to view their messaging history, I shouldn't be scanning the entire table to do so. I am thinking about how scalable would this structure be and how would I benefit using a NoSQL DB like mongoDB.
My project will be based on messaging and it won't be as less-used as a side tool like in Twitter or Facebook (not that they are not used but it's not the key option presented to users)
I was wondering will a simple table design like;
- from (id)
- to (id)
- content (text)
- created_at (date)
- isRead (boolean)
will suffice because, even though it is planned to be a small project, I do not believe that all the messages should be stored in one table and for each user when they want to view their messaging history, I shouldn't be scanning the entire table to do so. I am thinking about how scalable would this structure be and how would I benefit using a NoSQL DB like mongoDB.
Solution
You can go through the following embedded json document to implement
your message collection and can ensure index on "mail_id" key to avoid
scanning all documents. For your information here collection serve as
table and each document serve as row of a table.
I hope it will help.
your message collection and can ensure index on "mail_id" key to avoid
scanning all documents. For your information here collection serve as
table and each document serve as row of a table.
{
mail_id:string
sentMails:{
[
{
sent_at: datetime,
subject: string,
sent_to: string,
cc_to:[array of mailid strings],
bcc_to:[array of mailid strings],
attachments:[
{
attachment_name:string,
attachment_type:strng
}
],
sent_mail_content: string
}
]
}
receivedMails:{
[
{
received_at: datetime,
subject: string,
received_from: string,
cc_to:[array of mailid strings],
attachments:[
{
attachment_name:string,
attachment_type:strng
}
],
received_mail_content: string
}
]
}
}I hope it will help.
Code Snippets
{
mail_id:string
sentMails:{
[
{
sent_at: datetime,
subject: string,
sent_to: string,
cc_to:[array of mailid strings],
bcc_to:[array of mailid strings],
attachments:[
{
attachment_name:string,
attachment_type:strng
}
],
sent_mail_content: string
}
]
}
receivedMails:{
[
{
received_at: datetime,
subject: string,
received_from: string,
cc_to:[array of mailid strings],
attachments:[
{
attachment_name:string,
attachment_type:strng
}
],
received_mail_content: string
}
]
}
}Context
StackExchange Database Administrators Q#45894, answer score: 4
Revisions (0)
No revisions yet.