On 09/02/2013 03:57 PM, Pavlo Lavrenenko wrote:
> On 09/02/2013 04:47 PM, Pavlo Lavrenenko wrote:
>> Hi. What I am interested in is the reason of checking both blob contents
>> and its hash. It doesn't seem to be required to compare the hashes
>> and moreover to derive those hashes at all.
>>
>> Please advise.
>>
> 
> Oh, its dm_message.c::blob_exists()

It's used to quickly lookup the existence of a blob in the database. The
hash can and is indexed. The blob itself isn't, can't and shouldn't be
indexed.

So:

SELECT id FROM dbmail_mimeparts WHERE hash=<HASH> AND data=<DATA>;

prevents the extremely slow full table-scan used when you just do:

SELECT id FROM dbmail_mimeparts WHERE data=<DATA>;

The reason for also checking the data value is to prevent
hash-collisions, which can and will happen. Google 'birthday attack'






-- 
________________________________________________________________
Paul J Stevens        pjstevns @ gmail, twitter, skype, linkedin

  * Premium Hosting Services and Web Application Consultancy *

           www.nfg.nl/i...@nfg.nl/+31.85.877.99.97
________________________________________________________________
_______________________________________________
Dbmail-dev mailing list
Dbmail-dev@dbmail.org
http://mailman.fastxs.nl/cgi-bin/mailman/listinfo/dbmail-dev

Reply via email to