[Date Prev][Date Next] [Chronological] [Thread] [Top]

Avoiding read() of meta pages (was: Fwd: adding support to mdb)

In openldap-technical, Quanah Gibson-Mount wrote:
> As per Howard Chu (Author of MDB, Primary OpenLDAP Developer):
> -------------------------------------------------------------
> Full details are in the paper.
> http://www.openldap.org/pub/hyc/mdm-paper.pdf
> MDB assumes a unified buffer cache. See section 3.1, references 17, 18, and 
> 19.
> Note that this requirement can be relaxed in the current version of the 
> library. If you create the environment with the MDB_WRITEMAP option then 
> all reads and writes are performed using mmap, so the file buffer cache is 
> irrelevant. Of course then you lose the protection that the read-only map 
> offers.

That's not quite true.  mdb_env_open() does a read() of the meta pages.

I presume this can only be a problem when other processes have the
database open?  In that situation, I think the read() can be avoided
by maintaining a copy of the relevant MDB_meta information in the
lock file.  The read() only needs enough info to know how to map
the data file.

This would require a version increase for the lock file and programs
using it, but not for the database file.