名 前
hash − hash デ ー タ ベ ー ス へ の ア ク セ ス メ ソ ッ ド
書 式
#include
<sys/types.h>
#include <db.h>
説 明
大 事 な 注 意 : こ の ペ ー ジ は 、 バ ー ジ ョ ン 2.1 ま で の glibc が 提 供 す る イ ン タ ー フ ェ ー ス に つ い て 説 明 し て い る 。 バ ー ジ ョ ン 2.2 以 降 の glibc で は 、 も は や こ れ ら の イ ン タ ー フ ェ ー ス は 提 供 さ れ て い な い 。 お そ ら く 、 こ の ペ ー ジ で は な く 、 libdb ラ イ ブ ラ リ が 提 供 す る API を お 探 し な の だ ろ う 。 ル ー チ ン dbopen(3) は デ ー タ ベ ー ス フ ァ イ ル に 対 す る ラ イ ブ ラ リ イ ン タ ー フ ェ ー ス で あ る 。 サ ポ ー ト さ れ て い る フ ァ イ ル フ ォ ー マ ッ ト の ひ と つ に hash フ ァ イ ル が あ る 。 デ ー タ ベ ー ス へ の ア ク セ ス メ ソ ッ ド に 関 す る 一 般 的 な 記 述 は dbopen(3) に 書 か れ て い る 。 こ の マ ニ ュ ア ル ペ ー ジ で は hash 特 有 の 情 報 に つ い て の み 記 述 す る 。
hash デ ー タ 構 造 は 、 拡 張 可 能 な 動 的 ハ ッ シ ュ ス キ ー ム で あ る 。
dbopen(3) に 渡 さ れ る hash ア ク セ ス メ ソ ッ ド に 特 有 の デ ー タ 構 造 体 は 、 <db.h> イ ン ク ル ー ド フ ァ イ ル で 以 下 の よ う に 定 義 さ れ て い る 。
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 |
hash テ ー ブ ル バ ケ ッ ト (table bucket) の サ イ ズ を 定 義 す る 。 デ フ ォ ル ト は 256 バ イ ト で あ る 。 デ ィ ス ク に 置 か れ る テ ー ブ ル や デ ー タ ア イ テ ム が 大 き い テ ー ブ ル で は ペ ー ジ サ イ ズ を 大 き く す る ほ う が 良 い だ ろ う 。
ユ ー ザ
ー が 望 む hash テ ー
ブ ル 中 の 密 度
で あ る 。 こ れ
は そ れ ぞ れ の
バ ケ ッ ト に 格
納 で き る キ ー
の 概 数 で あ り
、 hash テ ー ブ ル を
拡 大 ・ 縮 小 を
作 用 す る 。 デ
フ ォ ル ト は 8 で
あ る 。 hash テ ー ブ ル の 最 終 サ イ ズ を 大 ま か に 見 積 も っ た 値 で あ る 。 こ の 値 が セ ッ ト さ れ て い な か っ た り 、 あ ま り に 低 く セ ッ ト さ れ て い る と 、 hash テ ー ブ ル は キ ー が 入 っ て く る に 応 じ て 拡 張 さ れ る 。 し か し 少 し パ フ ォ ー マ ン ス が (お そ ら く 気 付 く 程 度 に ) 落 ち る 。 デ フ ォ ル ト 値 は 1 で あ る 。
メ モ リ ー キ ャ ッ シ ュ の 最 大 値 (バ イ ト 単 位 ) の 参 考 値 。 こ の 値 は あ く ま で 参 考 で あ り 、 ア ク セ ス メ ソ ッ ド は こ の 値 を 越 え た メ モ リ ー の 割 り 当 て に 成 功 す る こ と も あ る 。
は ユ ー ザ ー 定 義 の hash 関 数 で あ る 。 全 て の デ ー タ に 対 し て う ま く 作 用 す る hash 関 数 と 言 う の は な い か ら 、 特 定 の デ ー タ セ ッ ト に 対 し て は 組 み 込 み の hash 関 数 で は パ フ ォ ー マ ン ス が 低 い こ と も あ る か も し れ な い 。 ユ ー ザ ー 定 義 の hash 関 数 は 二 つ の 引 数 を と ら な く て は な ら な い (バ イ ト 文 字 列 へ の ポ イ ン タ ー と 、 長 さ )。 そ し て hash 値 と し て 使 わ れ る 32ビ ッ ト の 値 を 返 さ な く て は な ら な い 。 デ ー タ ベ ー ス に 格 納 さ れ て い る メ タ デ ー タ の 整 数 値 の バ イ ト オ ー ダ ー 。 こ の 数 字 は 、 順 序 を 整 数 で 表 し た も の で あ る 。 例 え ば ビ ッ グ エ ン デ ィ ア ン な ら 、 こ の 数 値 は 4,321 と な る 。 lorder が 0 (指 定 さ れ て い な い )場 合 、 現 在 の ホ ス ト で 使 わ れ て い る 並 び 順 が 使 わ れ る 。 フ ァ イ ル が 既 に 存 在 す る 場 合 、 指 定 し た 値 は 無 視 さ れ ツ リ ー が 作 ら れ た 時 に 指 定 さ れ て い た 値 が 使 わ れ る 。 フ ァ イ ル が 既 に 存 在 し て い る (ま た は O_TRUNC フ ラ グ が 指 定 さ れ て い な い ) と 、 bsize, ffactor, lorder, nelem に 指 定 さ れ た 値 は 無 視 さ れ 、 ハ ッ シ ュ が 作 ら れ た 時 に 使 っ た 値 が 使 わ れ る 。 hash 関 数 が 指 定 さ れ る と 、 hash_open は デ ー タ ベ ー ス が 作 ら れ た 時 に 指 定 さ れ て い た hash 関 数 と 今 回 指 定 さ れ た hash 関 数 が 同 じ か ど う か を 調 べ 、 同 じ で な い 場 合 に は 失 敗 す る 。 dbm(3), と ndbm(3) に 記 述 さ れ て い る ル ー チ ン へ の 過 去 互 換 を 取 る た め の イ ン タ ー フ ェ イ ス が 存 在 す る 。 し か し こ れ ら の イ ン タ ー フ ェ イ ス は 以 前 の フ ァ イ ル フ ォ ー マ ッ ト と は 互 換 性 が な い 。 エ ラ ーhash ア ク セ ス メ ソ ッ ド ル ー チ ン は 、 失 敗 す る と ラ イ ブ ラ リ ル ー チ ン dbopen(3) で 指 定 さ れ て い る エ ラ ー に 応 じ た errno を セ ッ ト す る 。 バ グバ イ ト オ ー ダ ー と し て は ビ ッ グ エ ン デ ィ ア ン と リ ト ル エ ン デ ィ ア ン の み が サ ポ ー ト さ れ て い る 。 関 連 項 目btree(3), dbopen(3), mpool(3), recno(3) Dynamic Hash Tables, Per−Ake Larson, Communications of the ACM, April 1988. A New Hash Package for UNIX, Margo Seltzer, USENIX Proceedings, Winter 1991. こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |