1. システム構成

1.1 データベースサーバ(Original)×1

XMLによる情報を蓄積するサーバ.

サーバ上では,PostgreSQLサーバが稼働し,データベース名: edb_database にてXMLDBの原典情報を管理している.

データベース: edb_database で管理されているテーブルは以下のとおり.

  • edb_lock: ロック用ダミーテーブル.
    このテーブルをロックすることにより,本データベースへのアクセスの排他制御を行なう. ロックのモードは
    • SHARE: read only時(登録内容に変更を生じない).複数のreadアクセスが共存可能.
    • EXCLUSIVE: write 時(登録内容に変更を加える).唯一のアクセスのみ可能.
    の2種類を使う. これらのモードをセットすることによりデータベースソフトウェアのアクセス制御がかかるのではなく,プログラマ側の取り決めであることに注意.

    Read onlyでかつTRANSACTION内で得た情報をオリジナルデータベースの更新に用いない場合には,テーブル edb_lock をロックせずに TRANSACTION の ISOLATION LEVEL を SERIALIZABLE にセットする方法もある.

    • BEGIN;
    • SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

  • edb_xmldb: 登録情報(XML表現)を格納するテーブル.(原典情報)
    このテーブルに含まれる情報は,
    • テーブル情報: EDBにおける各テーブルの定義を記した情報.
    • タプル情報: EDBにおける各情報の登録内容.
    の2種類がある.
  • edb_authentication: 認証のための情報(XML表現)を登録するためのテーブル. (原典情報)
    このテーブルには,
    • 認証のための情報: 個人情報に対応する暗号化パスフレーズなどが含まれる.
    が登録されている.

1.2 データベースサーバ(RDB)×8

本データベースサーバは,登録情報の検索,およびデータのバックアップおよびバックアップサーバとして利用する.
データベースサーバ(RDB)は下記のテーブルからなる.

  • edb_lock: ロック用ダミーテーブル.(データベース(Original)サーバに同じ.
  • edb_xmldb: 登録情報(XML表現)を格納するテーブル.(複製)
  • edb_authentication: 認証のための情報(XML表現)を登録するためのテーブル. (複製)
  • edb_index: RDBにおいて,検索に必要な情報を管理するテーブル.
  • edb_auth: 認証のための情報をRDB形式に展開したテーブル.
  • edb_table: テーブル定義(XML表現)をRDB形式に展開したテーブル.
  • t_????: EDBの各テーブルに対応したRDB表現のテーブル群.
このデータベースをサーバ内にて複数作成し,多数のユーザのリクエストを振り分ける. 現在のデータベースの配置は以下の通り.

Original (XMLDB) Replica (XMLDB and RDB)
edb_database →(dwarf)→edb_database →(dwarf)→edb_latest
only latest information
→(dwarf)→edb_university
latest and readable in university
→(dwarf)→edb_public
latest and public readable

1.3 情報加工,文書処理×2

XMLとRDBから,文書作成に必要な情報を抽出し,冊子やweb頁を作成する.

1.4 各データベースサーバ間の連携

データベース間の変更通知は,PostgreSQLの機能として提供されているNOTIFYとLISTENコマンドを用いて行なう.

各データベース毎に,バックグラウンドプロセス(edb_dwarf)を起動し,メインのデータベースのおけるNOTIFYイベントを監視する.

edb_browse, edb_edit, その他は,メインのデータベースに何らかの情報の追加を行なった場合には,そのテーブルに対してNOTIFYコマンドを実行すると取り決める. NOTIFYの対象はテーブルであり,対象となるテーブルは,

  • edb_xmldb
  • edb_authentication
の2つである.

edb_dwarfは上記の2つのテーブルに対してLISTENコマンドを実行し,それらのテーブルへの変更イベントを受け取る.
変更イベントを受けとった後,edb_dwarfは以下の作業を行なう.

  • 追加情報(XML表現)の取得と,自データベースへの登録.
  • 追加情報(XML表現)をRDB形式に展開し,RDBテーブルの追加(もしくは変更)する.
    RDB形式に展開する際,edb_dwarfは参照形式で定義されているデータを補完し,文字列による検索が参照による定義にも適応できるように対応する.
  • RDB形式のテーブル上のマクロな情報を管理するedb_indexに抽出した情報を追加(もしくは変更)する.
また,edb_dwarfは対象となる追加情報ではなく,その情報を参照している既存の情報を検索し,それらの情報に追加情報の変更内容を反映させる.