HASH - Linux手册页

时间:2019-08-20 18:00:35  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-09-15

名称

hash-哈希数据库访问方法

语法

#include <sys/types.h>
#include <db.h>

说明

请注意:此页面记录了glibc所提供的接口,直至2.1版。从2.2版开始,glibc不再提供这些接口。可能您正在寻找libdb库提供的API。

例程dbopen(3)是数据库文件的库接口。支持的文件格式之一是哈希文件。数据库访问方法的一般说明在dbopen(3)中,此手册页仅描述特定于哈希的信息。

哈希数据结构是可扩展的动态哈希方案。

提供给dbopen(3)的特定于访问方法的数据结构在包含文件中定义如下:

typedef struct {
    unsigned int       bsize;
    unsigned int       ffactor;
    unsigned int       nelem;
    unsigned int       cachesize;
    uint32_t         (*hash)(const void *, size_t);
    int         lorder;
} HASHINFO;

此结构的元素如下:

bsize
定义哈希表存储桶的大小,默认情况下为256个字节。对于驻留在磁盘上的表和具有大数据项的表,增加页大小可能是更可取的。
ffactor
表示哈希表中的所需密度。它是允许在任何一个存储桶中累积的键数的近似值,确定哈希表何时增长或收缩。预设值为8。
nelem
是哈希表最终大小的估计值。如果未设置或设置得太低,则哈希表将在输入密钥时正常扩展,尽管可能会注意到性能略有下降。预设值是1。
cachesize
是内存缓存的建议最大大小(以字节为单位)。此值仅供参考,访问方法将分配更多的内存,而不是失败。
hash
是用户定义的哈希函数。由于没有哈希函数在所有可能的数据上均表现出色,因此用户可能会发现内置哈希函数在特定数据集上的表现不佳。用户指定的哈希函数必须接受两个参数(指向字节字符串和长度的指针),并返回32位数量用作哈希值。
lorder
是存储的数据库元数据中整数的字节顺序。该数字应将订单表示为整数;例如,大端顺序为4,321。如果lorder为0(未指定顺序),则使用当前主机顺序。如果文件已经存在,则将忽略指定的值,并使用创建树时指定的值。

如果文件已经存在(并且未指定O_TRUNC标志),则为bsizeffactor,lorder和nelem指定的值将被忽略,并使用创建树时指定的值。

如果指定了哈希函数,则hash_open会尝试确定指定的哈希函数是否与创建数据库的哈希函数相同,否则将失败。

提供了dbm(3)和ndbm(3)中描述的例程的向后兼容接口,但是这些接口与以前的文件格式不兼容。

错误说明

哈希访问方法例程可能会失败,并为库例程dbopen(3)指定的任何错误设置errno。

BUGS

仅支持大小端字节顺序。

另外参见

btree(3),dbopen(3),mpool(3),recno(3)

动态哈希表,Per-Ake Larson,ACM通讯,1988年4月。

UNIX的新哈希包,Margo Seltzer,USENIX会议录,1991年冬季。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/