GDBMを使ってみる4

GDBMを使ってみる3 - 日進月歩からの続き.

GDBMに関しては今回が最後かな.

  • データベースのエクスポートとインポート

データベースのバックアップをとるときや,異なるバージョンへ移行や移植する場合等にエクスポートとインポートを利用すれば便利.
だたし,計算機の間でintger型のビット数の違いであったり,バイトオーダーの違いがある場合には注意が必要.

まずエクスポートは以下の関数.

int gdbm_export (
GDBM FILE dbf,
const char *exportfile,
int flag ,
int mode )
第1引数ではエクスポートするデータベース,第2引数ではエクスポート先のファイル名をそれぞれ指定する.
第3引数では‘GDBM_WRCREAT’または‘GDBM_NEWDB’のいずれかを指定する.
GDBM_WRCREATの場合には指定したエクスポート先のファイル名
が既に存在知る場合には何もせず.GDBM_NEWDBの場合は上書きを行う.
第4引数はエクスポート先のファイルのパーミッションを指定.

インポート関数もほぼ同様.

int gdbm_import (
GDBM FILE dbf ,
const char *importfile ,
int flag )
第1引数はインポート先のデータベース,第2引数はインポートするファイルをそれぞれ指定.
第3引数はgdbm_storeのフラグと同じ(重複レコードの処理方法の指定).

  • データベースのファイル記述子の取得

gdbm_open関数を用いてデータベースをオープンした場合に‘GDBM_NOLOCK’を指定してしてデータベースのロックを自動的に行わない場合に,複数のwrite命令から整合性を維持するために,ユーザが独自のロック機構を利用することが考えられる.
このようなことをサポートする為に以下の関数が定義されている.

int gdbm_fdesc (GDBM FILE dbf )
gdbm_fdescを呼び出すことによって指定したデータベースのファイル記述子を戻り値から取得することが可能である.

  • データベースのオプション設定

以下の関数を用いて既にオープンされているデータベースに対して以下の関数によって,さまざまなオプションを設定できる.

int gdbm_setopt (
GDBM FILE dbf ,
int option ,
void *value ,
int size )
第1引数で設定対象のデータベースを指定し,第2引数でオプションの指定をする.
第3引数でオプション依存の値,第4引数で第3引数の値のサイズをそれぞれ指定する.

以下に指定するオプションについて説明していく.

  • GDBM SETCACHESIZE
  • GDBM CACHESIZE

 データベースに対して1度だけ設定することが出来る.
データベース内部のバケットキャッシュのサイズを第3引数(size_t型)で指定する.ちなみに最初は100に設定されている.

  • GDBM GETCACHESIZE

データベース内部のバケットキャッシュのサイズの値を第3引数(size_t型)にセットする.

  • GDBM GETFLAGS

データベースのフラグの情報を第3引数(int型)から得ることが可能.
第3引数はgdbm_openの時に指定するflagsと同じ扱い.

  • GDBM FASTMODE

データベースの同期を行わず高速化を目指すかどうかの指定.
第3引数(int型)によって'TRUE'を指定した場合には同期はぜずに高速に,'FALSE'を指定した場合には同期を行う.

  • GDBM SETSYNCMODE
  • GDBM SYNCMODE

GDBM FASTMODEオプションと逆の効果.
第3引数(int型)によって'TRUE'を指定した場合には同期を行う.

  • GDBM GETSYNCMODE

第3引数(int型)から同期の状態を得ることが出来る.

  • GDBM SETCENTFREE
  • GDBM CENTFREE

(検討中)
中央のフリーブロックプールを利用するかどうか.
利用することによってファイルスペースの再利用が迅速に行えるようになる.
デフォルトではオフとなっている.
第3引数(int型)によって'TRUE'か'FALSE'を指定.

  • GDBM SETCOALESCEBLKS
  • GDBM COALESCEBLKS

(検討中)
空きブロックをマージするかの指定.
設定すると隣接する秋ブロックがマージされるようになるが,
特にGDBM SETCENTFREEと併用して利用すると処理コストが大きくなる.
デフォルトではオフとなっている.
第3引数(int型)によって'TRUE'か'FALSE'を指定.

  • GDBM GETCOALESCEBLKS

第3引数(int型)からマージされている空きブロックの状態を得ることが出来る.

  • GDBM SETMAXMAPSIZE

メモリにmappingされる領域の最大サイズを第3引数(size_t型)で設定する.
実際の値はもっとも近いページの協会に設定される(ページサイズはsysconf(_SC_PAGESIZE)から得られる値).

  • GDBM GETMAXMAPSIZE

メモリにmappingされる領域の最大サイズを第3引数(size_t型)から得る.

  • GDBM SETMMAP

メモリマッピングモードの設定.
第3引数(int型)によって'TRUE'か'FALSE'を設定.

  • GDBM GETMMAP

第3引数(int型)からメモリマッピングモードが設定されているかが確認できる.

  • GDBM GETDBNAME

データベースのディスクファイルの名前を第3引数(char **型)から取得する.
呼び出し元は第3引数に割り当てられた領域を不要になった際に解放しなければならない.



GDBMの使い方に関する記事は今回が最後になります.
いろいろ分かり辛いところはごめんなさい.
間違っているところは教えて下さい.
いつかGDBMのソースコードの解析が出来たらと思っています.