[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openldap-technical
Subject:    Re: LMDB fix sized key and data question
From:       Howard Chu <hyc () symas ! com>
Date:       2024-03-07 14:47:20
Message-ID: 37317393-da8c-45b0-9667-f0c852654ce0 () symas ! com
[Download RAW message or body]

anton@pcloud.com wrote:
> Hello,
> 
> I'm designing an application that will use LMDB. All (or almost all) of my databases will have a fixed \
> size integer key (64bit) and fixed size data. Data is larger than a single integer but generally in \
> 16-32 bytes range (range is for different databases, each database has a fixed data format). 
> I'll not have duplicate key records. I'll mostly insert and retrieve single records. The question is \
> would I benefit and should I use MDB_DUPSORT|MDB_DUPFIXED?  Also the documentation says that \
> MDB_DUPFIXED may only be used with MDB_DUPSORT. However I see code that specifically checks for \
> MDB_DUPFIXED without MDB_DUPSORT and only then sets a flag for DUPFIXED records. However I did not get \
> too deep in the code.

The documentation doesn't lie.

> https://github.com/LMDB/lmdb/blob/mdb.master/libraries/liblmdb/mdb.c#L7743
> 
> My point is that with fixed sized keys and values the btree may chose not to store record sizes, may \
> not use pointers for the binary search but to search values instead and so on. Is that the optimization \
> that is being done for MDB_DUPFIXED or is it something that only concerns duplicate values?

Yes, with DUPFIXED the record sizes don't need to be stored per record, so you'll get some space and \
performance benefits from it.

In other projects, where we don't actually need duplicate keys but we still want to use DUPFIXED, we just
use a dummy key (e.g. 64bit zero) and concatenate the real key & value into the LMDB value.


-- 
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic