================================================================ リファレンス編(α版) ================================================================ ---------------------------------------------------------------- 7. ひとつのデータベースライブラリを構成するファイル ---------------------------------------------------------------- ひとつのデータベースライブラリのファイル空間上の構成は、 以下のようなディレクトリとファイルのセットによって作られています。 $NOMOS/lib/$libName/base/ 構造情報ディレクトリ Configuration.pl 環境設定ファイル class.java クラス構造の定義ファイル $NOMOS/lib/$libName/txt/ 内容情報ディレクトリ OBJECTID "クラス名" → "オブジェクトID"の列 INSTANCE "クラス名:オブジェクトID:属性名" → "属性値" or "オブジェクトIDの列" RESOURCE "クラス名:オブジェクトID:リソース名" → "リソース値" $NOMOS/lib/$libName/dbm/ 動作中のデータベースのスワップ用ディレクトリ $NOMOS/lib/$libName/log/ 動作中のデータベースの情報用ディレクトリ access_log アクセス状況に関するlog session_log データベース更新に関するlog nomos.pid プロセスIDファイル nomos.port ポート番号格納ファイル ---------------------------------------------------------------- 8. データベース動作の内部プロセス ---------------------------------------------------------------- 8.1 データベースとなるディレクトリの確定 起動時の設定にしたがって、サーバは ディレクトリを確定します。デフォルトでは、 $NOMOS/lib/default が選ばれます。 以下は、データベースとなるディレクトリ名(ライブラリ名)を $libNameと表します。 たとえばデフォルトでは $libName=default です。 8.2 設定ファイルの読み込み システムの動作用の情報を設定するファイルを読み込みます。 このファイルを編集することで動作を細かくチューニングできますが、 基本的な利用用途では変更の必要はありません。 $NOMOS/lib/$libName/base/Configuration.pl 8.3 class定義ファイルの読み込み データベースのclass定義ファイルを読み込みます。 classとは、いわばリレーショナルデータベースでの「表」に 相当する概念で、データベース内の情報の「入れ物」です。 (classファイルは、サーバ実行中に動的に再読み込みを行うことも可能です) $NOMOS/lib/$libName/base/class.java 8.4 dbmの初期化 データベースは、dbmというライブラリを利用することで 動作します。 これにより、システムに実装されたメモリよりも 大量のデータを扱うことが出来ます。 動作中のデータベースは、 $NOMOS/lib/$libName/dbm というディレクトリの下に作られます。 このdbmは、ハッシュテーブルアルゴリズムによって情報を格納しています。 このアルゴリズムは、項目数が大きい、読み出し主体のデータベースの 検索スピードに優れています。 一方、新規書き込みや項目の削除などの操作により、 項目数が大きく増減するタイプのデータベースにおいては、 計算量が大きく、コストがかかるという欠点があります。 このサーバは、あらかじめデータベースにダミーの値を設定することで、 テーブルのサイズに余裕を持たせておくことで、この欠点を補っています。 このdbmの初期化作業に、数秒間かかります。 8.5 データベース開始:instance情報ファイルの読み込み 前回終了時のデータベースの内容(インスタンス情報)は、 $NOMOS/lib/$libName/txt/OBJECTID $NOMOS/lib/$libName/txt/INSTANCE $NOMOS/lib/$libName/txt/RESOURCE という3つのファイルに保存されています。 サーバはこのファイルを読み込み、 classファイル $NOMOS/lib/$libName/base/class.java によって定義された「入れ物」に従って、 $NOMOS/lib/$libName/dbm のディレクトリの中にデータベースを構築します。 8.6 データベース動作中 動作中のデータベースの実体は、メモリ空間と、 $NOMOS/lib/$libName/dbm というディレクトリの内部に存在します。 動作中は、 $NOMOS/lib/$libName/txt/OBJECTID $NOMOS/lib/$libName/txt/INSTANCE $NOMOS/lib/$libName/txt/RESOURCE の3つのファイルは、サーバ起動開始時の値が保たれます。 8.7 データベース終了:instance情報ファイルの書き出し データベースは終了時に、 動作中のデータベースの実体をファイル化し、 $NOMOS/lib/$libName/txt/OBJECTID $NOMOS/lib/$libName/txt/INSTANCE $NOMOS/lib/$libName/txt/RESOURCE の3つに保存します。 ---------------------------------------------------------------- 9. データベースの静的状態ファイル ---------------------------------------------------------------- txtデータ内部の表記は、 ・keyとvalueの組は、tabによって区切られた1行の情報によってます。 ・value内の改行記号はコントロールM記号に置換されて保存されています。 ---------------------------------------------------------------- 10. データベースの動的状態ファイル ---------------------------------------------------------------- サーバは自身の動的状態を2種類のログファイルに記録しています。 $NOMOS/lib/$libName/log/access_log /session_log 10.1 access_log サーバはNCSAのログ互換の書式で、access_logを保存します。 このログは主に、サーバーに対するリクエスト内容の統計処理や、 負荷の状況などを監視するために使うことが出来ます。 access_logの書式は以下の通りです。 クライアントホスト名 - ユーザログイン名 [時間] "HTTPの1行目" HTTPのステータスコード HTTPの転送バイト数 10.2 session_log データベースの更新に対するトランザクションを記録するsession_logが 保存されます。このログは障害復旧のための情報として利用されます。 ※参考:session_logの書式は以下の通りです。 UNIX時間 ユーザログイン名 deleteInstance クラス名 オブジェクトID または、 UNIX時間 ユーザログイン名 setAttribute CGI問い合わせ文字列 オブジェクトID ※UNIX時間:1970年1月1日午前0時0分からの秒数で現在の時間を表したものです。 ※CGI問い合わせ文字列は、x-www-form-urlencodedに従ってencodeされています。 ----------------------------------------------------------------