Download List

프로젝트 설명

Rhino(java)を使ったServer-side JavaScript(MaachangComet)を開発しています。

System Requirements

System requirement is not defined

Released at 2008-01-27 03:49
MaachangDBM b1.07 (1 files Hide)

Release Notes

今回は、Hash管理値を変更しました。
具体的には、下記の通りです。
今まで、Hash管理値を0x0000ffffとしていましたが、この場合、
最大データ長4250000 / 0x0000ffff = 約64となり、たとえば、
最大データ長分データを入れた場合、今までのHash値の場合、Hash衝突
平均が64となります。これだと、非常に検索効率が悪いのは、言うまでも
ありません。
なので、今回は、Hash管理値を0x000fffffとしました。この場合、
最大データ長4250000 / 0x000fffff = 約4となり、以前と比べると、
Hash衝突平均が4になります。

また、以下にファイルフォーマット表を添付します。

--------------------------------------------------------------------------------
1.Keyフォーマット.

A.((4byte * 1048575) + (8*64) = 4194812byte).
key開始ポジション管理(4byte).

B.1Key情報(532byte * 最大4250000件 = 2261000000byte).
key有効フラグ(1byte).
hashコード(4byte).
hash衝突に対するbeforeポジション(4byte).
hash衝突に対するnextポジション(4byte).
valueファイル項番(2byte).
valueファイル内開始ポジション(4byte).
key長(2byte).
key内容(512byte).

C.空きフラグ管理(531264byte).
全体スペース(4byte).
有効スペース(4byte).
管理int配列数(4byte).
int配列内容(((4250000 / 32)+((4250000 % 32)==1)) * 4 = 531252byte).

Aが1ファイル.
C+(B*n個)が1ファイル.

--------------------------------------------------------------------------------
2.Valueフォーマット((8206byte * 65536) + 8208byte = 537796624byte).

A.セクタサイズ(8206byte * 65536).
beforeファイル項番(2byte).
before項番(4byte).
nextファイル項番(2byte).
next項番(4byte).
データ長(2byte).
データ(8192byte).

B.空きフラグ管理(8204byte).
全体スペース(4byte).
有効スペース(4byte).
管理int配列数(4byte).
int配列内容(((65536 / 32)+((65536 % 32)==1)) * 4 = 8192byte).

B+Aが1ファイル.
Valueファイルは、最大1024個まで、自動作成※される。
※利用可能セクタが存在しない場合において。
また、ファイル項番の管理は、ファイル名で解決する。[番号.sector]のように。

--------------------------------------------------------------------------------
データの最大数は425万件.

Changelog

・Hash管理値を0x0000ffffから0x000fffffに変更しました。