Paul J Stevens <[EMAIL PROTECTED]> said:

>>>> This structure will make it very easy to query all the headers from a 
>>>> given message or find all the messages with a given header, or a 
>>>> given header value.  It also leaves our current structure intact 
>>>> which will make it easier to phase in.
> 
> It will work, but you still require a lookup on an extra table to do
> header searches. There has to be hidden cost there. Also the added
> db-interaction at insertion time is very significant.

We could probably do it in one query:

  SELECT header, header_idnr FROM dbmail_headers
    WHERE header IN ('To', 'From', 'Subject', etc...)

[snip]
> preparse certain headers for common attributes: the in-reply-to and
> references headers will be used for threading. These headers contain 
> one or more message-id header values, which are stored separately.
> With this approach building message-threads can be done with fully
> indexed, single-table queries! Of course a union with the msgids from
> the opened mailbox is still required, but you can't beat such a setup
> wrt threading.

Neato!

[snip]
>>>> What do you think?  I don't think we need to special case any headers 
>>>> not even sendername or subject.
> 
> The more I think about this, the more convinced I am that we do need to
> treat common headers differently in the end. And your suggestion to
> preseed the header_names table and hardcode their ids tells me we're
> agreed here.

I'm skeptical. If we can remain generic at similar cost, let's go generic.
Performance numbers showing that special casing is *significantly* faster
should be a hard requirement here.

[snip]
> If I want to store mime-part headers the same as message-headers, first
> thing I have to do is change the physmessage_id references in the header
> tables to messageblk_idnr references. Next I would have to store mime-part
> headers same as message-headers.

Is that going to be smart enough to know *which* mime part is in which
messageblk? I'm still only getting a mental picture of knowing which
messageblks correspond to which physmessage and not the association of
mime parts to messageblks. Wouldn't we need one more layer of relation
table?

> Finally I would have to change the messageblks model
> 
> from:
> 
> block[0]: message-header
> block[1]: message-body[slice1]
> block[N]: message-body[sliceN]
> 
> to
> 
> block[0]: raw message-headers
> block[1]: mime-part[0]
> block[N]: mime-part[N]

block[0]: raw message-headers
block[1]: mime-part[0][slice1]
block[N]: etc.

If we decide to keep the slicing model for large mime parts.

> Where the only really tricky part is converting an existing dbmail
> storage to this modified approach. Still, way cool stuff.

Reparse everything! It'll be fun to write the migration tool :-P


Aaron

Reply via email to