On Thu, May 19, 2011 at 12:04 PM, Ioan Eugen Stan <stan.ieu...@gmail.com> wrote:
> I have forwarded this discussion to my mentors so they are informed

(I've hopped onto this list so no need to remember to copy me into the
thread ;-)

<snip>

> Eric, one of my mentors, suggested I use Gora for
> this and after a quick look at Gora I saw that it is an ORM for HBase
> and Cassandra which will allow me switch between them. The downside
> with this is that Gora is still incubating so a piece of advice about
> using it or not is welcomed. I will also ask on the Gora mailing list
> to see how things are there.

(I suspect there will be a measure of experimentation required in this
project, so don't be afraid to try a spike or two)

>>> I would encourage you to look at a system like HBase for your mail
>>> backend. HDFS doesn't work well with lots of little files, and also
>>> doesn't support random update, so existing formats like Maildir
>>> wouldn't be a good fit.

(Apache James closer to the Microsoft Exchange space than traditional
*nix mail user agents)

> I don't think I understand correctly what you mean by random updates.
> E-mails are immutable so once written they are not going to be
> updated. But if you are referring to the fact that lots of (small)
> files will be written in a directory and that this can be a problem
> then I get it. This will also mean that mailbox format (all emails in
> one file) will be more inappropriate than Maildir. But since e-mails
> are immutable and adding a mail to the mailbox means appending a small
> piece of data to the file this should not be a problem if Hadoop has
> append.

Essentially, there are two classes of data that mail storage requires

1. read only MIME documents (mail messages) embedding meta-data (headers)
2. read-write meta-data sets about each document including flags for
each (virtual) mail directory containing the document

The documents are searched rarely. The meta-data sets are read often
but written rarely.

I suspect that emails are relatively small in Hadoop terms, and are
often numerous. Might be interesting to see how a tuned HDFS instance
performs when storing large numbers of small MIME documents. Should be
easy enough to set up an experiment to benchmark. (I wonder whether a
RESTful distributed storage solution might end up working better.)

I suspect that the read-write meta-data sets will need HBase (or
Cassandra). Would need to think carefully about design, I think.

> The presentation on Vimeo it stated that HDFS 0.19 did not had append,
> I don't know yet what is the status on that, but things are a little
> brighter. You could have a mailbox file that could grow to a very
> large size. This will lead to all the users emails into one big file
> that is easy to manage, the only thing that it's missing is the
> fetching the emails. Since emails are appended to the file (inbox) as
> they come, and you usually are interested in the latest emails
> received you could just read the tail of the file and do some indexing
> based on that.

I'm not hopeful about adopting an append based approach. (Might be
made to work but I suspect that the locking required for IMAP or POP3
is likely to kill performance.)

Robert

Reply via email to