LMDBv1 supports 1-node leaf pages so it can split a 2-node leaf to
make room for a 3rd node. (ITS#8237).
LMDBv2 could extend this, to use fewer pages: Allow oversized leaf
nodes. mdb_cursor_put() won't create ovpages directly, but call
page_split() which instead of splitting may kick an oversized node
and/or the new node out to an ovpage. Usually only the biggest of
the two. To assist page_split(), give such leaf pages a flag
P_HAS_BIGNODE and set mp_pad = size of the biggest oversized node.
That gets a bit simpler if we allow only 1 oversized node per leaf.
The inverse fix is "a page has room for 3 nodes". This reduces
me_nodemax from 2038 1358, max supported MDB_MAXKEYSIZE from 1982
to 1302, and uses more ovpages. Add mdb_env_set_pagesize() so
LMDBv2 with bigger pages can reload an LMDBv1 DB with big keys.
Show replies by thread