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标志),则为bsize,ffactor,lorder和nelem指定的值将被忽略,并使用创建树时指定的值。
如果指定了哈希函数,则hash_open会尝试确定指定的哈希函数是否与创建数据库的哈希函数相同,否则将失败。
错误说明
哈希访问方法例程可能会失败,并为库例程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/。