Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
cdb(5)			       File Formats Manual			  cdb(5)

NAME
     cdb - Constant DataBase file format

DESCRIPTION
     A	cdb  database  is  a  single file used to map `keys' to `values', having
     records of (key,value) pairs.  File consists of 3 parts: toc (table of con-
     tents), data and index (hash tables).

     Toc has fixed length of 2048 bytes, containing 256 pointers to hash  tables
     inside  index sections.  Every pointer consists of position of a hash table
     in bytes from the beginning of a file, and a size of a hash  table  in  en-
     tries,  both are 4-bytes (32 bits) unsigned integers in little-endian form.
     Hash table length may have zero length, meaning that corresponding hash ta-
     ble is empty.

     Right after toc section, data section follows without  any  alingment.   It
     consists  of  series of records, each is a key length, value (data) length,
     key and value.  Again, key and value length are 4-byte  unsigned  integers.
     Each next record follows previous without any special alignment.

     After  data  section,  index  (hash  tables) section follows.  It should be
     looked to in conjunction with toc section, where each of max 256  hash  ta-
     bles  are	defined.   Index section consists of series of hash tables, with
     starting position and length defined in toc section.  Every hash table is a
     sequence of records each holds two numbers: key's hash value and record po-
     sition inside data section (bytes from the beginning of  a  file  to  first
     byte of key length starting data record).	If record position is zero, then
     this is an empty hash table slot, pointed to nowhere.

     CDB hash function is
       hv = ((hv << 5) + hv) ^ c
     for every single c byte of a key, starting with hv = 5381.

     Toc  section  indexed  by (hv % 256), i.e. hash value modulo 256 (number of
     entries in toc section).

     In order to find a record, one should: first, compute the hash  value  (hv)
     of  a  key.   Second,  look  to  hash table number hv modulo 256.	If it is
     empty, then there is no such key exists.  If it is not empty,  then  third,
     loop by slots inside that hash table, starting from slot with number hv di-
     vided  by 256 modulo length of that table, or ((hv / 256) % htlen), search-
     ing for this hv in hash table.  Stop search on empty slot (if record  posi-
     tion  is  zero)  or  when all slots was probed (note cyclic search, jumping
     from end to beginning of a table).  When hash value in question is found in
     hash table, look to key of corresponding record, comparing it with  key  in
     question.	If them of the same length and equals to each other, then record
     is  found, overwise, repeat with next hash table slot.  Note that there may
     be several records with the same key.

SEE ALSO
     cdb(1), cdb(3).

AUTHOR
     The tinycdb package written by Michael Tokarev  <mjt+cdb@corpit.ru>,  based
     on ideas and shares file format with original cdb library by Dan Bernstein.

LICENSE
     Tinycdb is licensed under MIT license.

				    Apr, 2005				  cdb(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=cdb&sektion=5&manpath=FreeBSD+Ports+15.1.quarterly>

home | help