How to implement a messaging system?

Chris Muller asqueaker at gmail.com
Mon Jan 3 18:33:11 UTC 2011


> I originally thought to create a mailbox for each user in a MagmaPreallocatedDictionary, with the association User -> OrderedCollection (where 'User' is an instance of class 'User', so each item would be unique).

Why are you wanting to use a MagmaPreallocatedDictionary to hold
Users?  How many users are in the system and how fast do they need
access to their list of new messages?

When I pull up my mail client, it takes a couple of seconds for my
Inbox to be displayed.  This is analagous to using a MagmaCollection
for each user's message.

Recall what I said MagmaCollections were designed for:  For end-user
query requirements, which is exactly the case you've stated:  A user
comes to check on their messages.  So a MagmaCollection is perfectly
appropriate for that, not a MagmaPreallocatedDictionary.

I don't know how many users you will have, but given the extremely
simple access requirements, you could put htem into a MagmaCollection
as well.

So, you have one MC for "AllUsers" and then one MC for each user
containing that users messages.

> So, checking up on one's own mailbox would simply entail finding oneself's User in the Dictionary and reading the associated collection of messages.
>
> However, if another user were to drop a message into this collection, the same OrderedCollection would have to be accessed by another session.  Isn't this a no-no, even with refreshing a session?

I'm wondering what you mean by "the same OrderedCollection".  The same
one in the database?  Or the same one in image memory?

Yes, it will be the same one in the database, but it will be different
ones in image memory if they are retrieved by different sessions.

>
> Are you suggesting to use MagmaCollections instead of OrderedCollections?  Isn't that far more 'expensive', especially since each user on the system would be assigned such a collection just to hold their messages?

MagmaCollections consume more resources than a OrderedCollection, yes,
but the reason I stated was that it would allow multiple messages to
come into the same user and avoid a commit-conflict.

 - Chris


More information about the Magma mailing list