为什么 DJB CDB(常量数据库)设计为使用 256 个哈希表?
为什么不是单个更大的 252 * 256 哈希表?
只是为了节省空间还是有其他原因?
DJB CDB 使用两级哈希表。第一个表在文件开头是固定大小的 2K。第二组表位于文件末尾,并在数据流式传输到 cdb 时构建在内存中。一旦所有数据都流入 cdb,第二组哈希表就会流出到磁盘,然后第一个表(在文件的开头)填充第二组中每个表的偏移量。
换句话说,多级哈希表允许 cdb 的流式创建,除了在 cdb 创建结束时写入文件的开头 2K 之外。
访问cdb速度很快,打第一张表(文件开头2K)找到cdb文件末尾第二张表(在第二组表中)的偏移量,提供了数据的位置在 cdb 中。
更多信息可以在https://github.com/gstrauss/mcdb/的注释中找到,这是对 DJB 古老的 cdb 的重写。mcdb 比 cdb 更快,并且消除了 4GB cdb 的限制,还有其他好处。