How to keep track of a private messaging system using MongoDB?

Posted by luckytaxi on Stack Overflow See other posts from Stack Overflow or by luckytaxi
Published on 2010-04-20T01:04:49Z Indexed on 2010/04/20 9:43 UTC
Read the original article Hit count: 431

Filed under:

Take facebook's private messaging system where you have to keep track of sender and receiver along w/ the message content. If I were using MySQL I would have multiple tables, but with MongoDB I'll try to avoid all that. I'm trying to come up with a "good" schema that can scale and is easy to maintain. If I were using mysql, I would have a separate table to reference the user and and message. See below ...

profiles table

user_id
first_name
last_name

message table

message_id
message_body
time_stamp

user_message_ref table

user_id (FK)
message_id (FK)
is_sender (boolean)

With the schema listed above, I can query for any messages that "Bob" may have regardless if he's the recipient or sender.

Now how to turn that into a schema that works with MongoDB. I'm thinking I'll have a separate collection to hold the messages. Problem is, how can I differentiate between the sender and the recipient? If Bob logs in, what do I query against? Depending on whether Bob initiated the email, I don't want to have to query against "sender" and "receiver" just to see if the message belongs to the user.

© Stack Overflow or respective owner

Related posts about mongodb