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

Re: MDB_INTEGERDUP in back-mdb's indexer for attr-tables.



Thanks, Howard.

It would be nice if some clarification, like these, will be in the lmdb.h.

Leonid.

2015-05-01 4:42 GMT+03:00 Howard Chu <hyc@symas.com>:
> Леонид Юрьев wrote:
>>
>> Hi, Howard.
>>
>> I would like to refine my question.
>>
>> Currently I develop a mdb_chk tool for deep check LMDB-files, like a fsck
>> tool.
>> It is needed for us, but let this stay aside for now.
>>
>> On some step I plan to check the size of each key in each DBI with
>> MDB_INTEGERKEY and/or MDB_INTEGERDUP flags.
>>
>> Initially I assumed - if one of these flags is set, the the length of
>> all keys must be sizeof(int) or sizeof(long). As will be used the
>> corresponding comparison functions (mdb_cmp_int, mdb_cmp_long) , which
>> can handle only keys of such sizes.
>>
>> But this approach has failed. A dbi-tables created for attr by
>> mdb_attr_dbs_open() have MDB_DUPSORT|MDB_DUPFIXED|MDB_INTEGERDUP flags
>> and may contain records with a 5-byte keys. For instance as the
>> 'entryCSN'.
>>
>> Later you have written that MDB_INTEGERDUP is required.
>>
>> Now I do not understand how it all works:
>>   - MDB_INTEGERDUP is set for attr tables.
>>   - indexer could create a 5-byte keys.
>>   - mdb-backend set custom comparison function only for MDB_DN2ID table.
>>   - under debugger I see that md_dcmp is pointed to the default.
>>   - assert for key-size in default comparators was not failed while "make
>> test".
>>   - all test are passed without MDB_INTEGERDUP.
>>   - but you told MDB_INTEGERDUP is necessary
>>
>> So,
>> - how and when MDB_INTEGERDUP will have an impact?
>> - in which cases keys in the table definitely should be sizeof(int) or
>> sizeof(long)?
>
>
> MDB_INTGERKEY means the *keys* must be int/long.
> MDB_INTEGERDUP means the *values* must be int/long.
>
> When either flag is set, all of the corresponding (keys|values) in the DB
> must be the same size.
>
> The indexer only uses MDB_INTEGERDUP - it doesn't care what size the keys
> are, but the values must be (longs in this case).
>
> --
>   -- Howard Chu
>   CTO, Symas Corp.           http://www.symas.com
>   Director, Highland Sun     http://highlandsun.com/hyc/
>   Chief Architect, OpenLDAP  http://www.openldap.org/project/