以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には本実施形態に係る、特定金融機関に設けられたコンピュータ・システム10が示されている。コンピュータ・システム10は、特定金融機関の情報センタ等に設置されたホスト・コンピュータ12と、特定金融機関内に構築されたコンピュータ・ネットワーク18を含んで構成されている。なお、ホスト・コンピュータ12は請求項9に記載のコンピュータに対応しており、後述する第1ストレージ14及び第2ストレージ16と共に本発明に係るデータベース管理装置に対応している。
ホスト・コンピュータ12は汎用の大型コンピュータから成り、CPU12A、RAM等から成るメモリ12B、磁気ディスク等から成る不揮発性の記憶部12C、ネットワークインタフェース(I/F)部12Dを備えている。ホスト・コンピュータ12は、ネットワークI/F部12Dに接続された通信回線を介してコンピュータ・ネットワーク18(詳しくはネットワーク18内のブランチ・サーバ20)に接続されている。また、ホスト・コンピュータ12には、大容量の磁気ディスク等から成る第1ストレージ14及び第2ストレージ16が各々接続されている。第1ストレージ14には口座情報第1データベース(口座情報第1DB)を記憶するための記憶領域が設けられており、第2ストレージ16には口座情報第2データベース(口座情報第2DB)を記憶するための記憶領域が設けられている。なお、第1ストレージ14に記憶される口座情報第1DBと第2ストレージ16に記憶される口座情報第2DBは、各々を区別するために異なる物理DB名が付与されているが、論理的には単一のデータベース(顧客が特定金融機関に開設した口座に関する情報を登録・管理するための口座情報DB)として扱われる。第1ストレージ14及び第2ストレージ16は本発明に係る記憶手段に対応しており、詳しくは、第1ストレージ14は請求項5に記載の第1記憶手段に、第2ストレージ16は請求項5に記載の第2記憶手段に対応している。
また、ホスト・コンピュータ12の記憶部12Cには、ホスト・コンピュータ12をDB制御部として機能させるためのDB制御プログラム、ホスト・コンピュータ12をアプリケーション制御部として機能させるためのアプリケーション制御プログラム、ホスト・コンピュータ12をDB操作アプリケーション部として機能させるためのDB操作アプリケーション・プログラムが各々記憶されている。なお、上記各プログラムのうち、アプリケーション制御プログラムは請求項9に記載のデータベース管理プログラムに対応している。
一方、コンピュータ・ネットワーク18は、特定金融機関の各支店に各々設置されたブランチ・サーバ20(PC、ワークステーション、大型コンピュータの何れでもよい)が通信回線20を介して互いに接続されて構成されており、個々のブランチ・サーバ20には、個々のブランチ・サーバ20と同一の支店に設置された複数台のATM(Automatic Teller Machine:現金自動預け払い機)22及び複数台の営業店端末(金融機関の従業員が操作するための端末)24が各々接続されている。ATM22には、特定金融機関に口座を開設している顧客が所持しているキャッシュカードを装填可能で、装填されたキャッシュカードに磁気的に記録された情報を読み取り可能なカードリーダが取り付けられており、営業店端末24には、特定金融機関に口座を開設している顧客が所持している通帳を装填可能で、装填された通帳に磁気的に記録された情報を読み取り可能で、且つ任意の情報を通帳に記録することも可能な記帳機が取り付けられている。
次に本実施形態の作用を説明する。本実施形態に係る口座情報DBは、顧客が特定金融機関に開設した口座に関する情報を登録・管理するためのデータベースであり、単一の顧客の情報が単一のレコードとして登録される。また口座情報DBは階層型のデータベースであり、個々のレコードは、図2(A)に示すように、予め定められた互いに異なるカテゴリの情報を設定するための複数のセグメントが、最上位階層のセグメント(ルートセグメント)を起点として階層的に関連付けられた論理構造を有している。上記の論理構造における各セグメントのうち、ルートセグメントは、口座情報DBに情報を登録する全ての顧客について生成・登録されるセグメントである。図2(B)に示すように、口座情報DBに登録される個々のセグメントの情報は、各種の制御情報やポインタ情報が設定されるヘッダ、個々のセグメントを識別するためのキー情報、及び、本体情報から構成されているが、ルートセグメントでは、上記の本体情報として顧客ID等の顧客の属性情報が設定される。
また、第2階層のセグメントは、個々の顧客が特定金融機関に開設した個々の口座に関する情報を登録するためのセグメントであり、個々のレコードには、第2階層セグメントとして、対応する顧客が特定金融機関に開設した口座の数と同数のセグメントが各々生成・登録される。個々の第2階層セグメントは、対応する顧客が特定金融機関に開設した各口座のうち互いに異なる口座に対応しており、個々の第2階層セグメントの本体情報には、対応する口座の口座番号や残高等の情報が設定される。個々の第2階層セグメントは、論理的にはルートセグメントと各々関連付けされている。
また、第3階層セグメントは、個々の顧客が特定金融機関に開設した特定口座を対象とした金融取引の明細を登録するためのセグメントであり、個々の第3階層セグメントは任意の数のオカレンスを作成・登録可能とされている。個々の第3階層セグメントは第2階層の各セグメントのうち同一の口座に対応する第2階層セグメントと論理的に関連付けされており、任意の顧客の任意の口座を対象とした金融取引が発生する毎に、前記任意の顧客に対応する特定レコードに、前記任意の口座に対応する特定の第2階層セグメントと関連付けられた第3階層セグメントの情報として、発生した金融取引の明細を表す取引明細情報が本体情報に設定されたオカレンスが作成・登録される。
口座情報DBに対する情報の登録、読み出し、更新等のアクセスはDB制御部によって行われる。図3(A)に示すように、口座情報DBを記憶するための第1ストレージ14及び第2ストレージ16の記憶領域は、入出力の論理的単位としての一定サイズの多数個の単位領域(CI)に区画されていると共に、記憶領域全体が基本域と従属あふれ域、独立あふれ域に分けられており、個々の単位領域には各々アドレスが付与されている。DB制御部は、口座情報DBへの情報の登録が指示され、登録対象の情報がルートセグメントの情報であった場合、該登録対象のルートセグメントの情報と共に通知されたルートセグメントのキー情報に基づき、キー情報のハッシュ値を計算する等のアルゴリズムにより、基本域内の各単位領域のうち登録対象のルートセグメントの情報を格納すべき単位領域のアドレス(キー情報から一意に定まるアドレス)を導出する。
但し、予め想定した顧客の最大数(に応じて定まるキー情報の桁数)にも依存するが、基本域内の単位領域の数を顧客の最大数だけ確保することは困難であるので、上記のアルゴリズムは、互いに異なる複数種のキー情報から同一のアドレスが導出されるように定められている。一方、図3(B)にも示すように、個々の単位領域は複数のセグメントの情報を格納可能なサイズ(例えば単一のセグメントの情報の最大サイズ1kバイトに対し、該情報を8個程度格納可能な8kバイト)とされているが、個々の単位領域に情報を格納可能なセグメントの数には限りがあり、また基本域内の単位領域に従属セグメントの情報も格納されることがあるので、導出したアドレスが付与された特定の単位領域に、登録対象のルートセグメントの情報を格納可能な空き領域が無い可能性もある。
このため、DB制御部は単位領域のアドレスを導出すると、当該単位領域に登録対象のルートセグメントの情報を格納可能な空き領域が有るか否かを確認する。そして、前記空き領域があれば、導出したアドレスが付与された特定の単位領域に登録対象のルートセグメントの情報を格納する。また、前記空き領域が無い場合には、従属あふれ域内の各単位領域のうち特定の単位領域と同一列の単位領域群(図3(A)の「情報格納対象CI列」も参照)の中から、登録対象のルートセグメントの情報を格納する単位領域を選択し、選択した単位領域に登録対象のルートセグメントの情報を格納すると共に、基本域内の特定の単位領域に設けられた制御情報格納領域に、登録対象のルートセグメントの情報の格納位置を指し示すポインタ情報(単位領域のアドレスとオフセットを表す情報)を、登録対象のルートセグメントのキー情報と対応付けて登録する。なお、制御情報格納領域にはキー情報とポインタ情報を複数組登録可能とされており、制御情報格納領域にキー情報とポインタ情報が複数組登録される際には、登録情報はキー情報の昇順(降順でもよい)にソートされる。
またDB制御部は、口座情報DBへの情報の登録が指示され、登録対象の情報が従属セグメントの情報であった場合、ルートセグメントの情報を登録する場合と同様にして、登録対象の従属セグメントの情報を格納可能な空き領域が有る単位領域を探索する(優先順位が最も高い単位領域は登録対象の情報の格納位置を指し示すポインタ情報が設定されるセグメントの情報が既に登録された単位領域であり、該単位領域に空き領域がない場合に一定のロジックに従って他の単位領域が探索される)。なお、従属セグメントの情報の登録(又は読み出し又は更新)が指示される際には、前述した論理構造においてルートセグメントから処理対象のセグメントに至る経路上の各セグメントの情報を順次登録又は読み出す指示が事前に入力されるので、これらの指示に応じた処理の履歴を記憶しておくことで、登録対象の従属セグメントと同一レコードのルートセグメントのキー情報は容易に認識できる。そして、探索によって抽出された単位領域に登録対象の従属セグメントの情報を格納すると共に、登録対象の従属セグメントの情報の格納位置を指し示すポインタ情報を、登録対象の従属セグメントと同一のレコードに属し、かつ口座情報DBに既に登録されているセグメントの情報のヘッダに設定する。
なお、ヘッダにポインタ情報を設定するセグメントの情報は以下のようにして選択される。すなわち、登録対象の従属セグメントは1階層上位の特定セグメントと論理的に関連付けられているが(この特定セグメントを親セグメントと称する)、登録対象の従属セグメントの情報と同一セグメントの他のオカレンス(関連オカレンス)が口座情報DBに登録されていない場合には、登録対象の従属セグメントの情報のポインタ情報を親セグメントの情報のヘッダに設定する。また、登録対象の従属セグメントの情報と同一セグメントの他のオカレンスの情報が口座情報DBに1個のみ登録されている場合には、登録対象の従属セグメントの情報のポインタ情報を当該他のオカレンスの情報のヘッダに設定する。
また、登録対象の従属セグメントの情報と同一セグメントの他のオカレンスが口座情報DBに複数登録されている場合(該当するオカレンスが複数登録されているか否かは、親セグメントのヘッダに設定されたポインタ情報が指し示す他のオカレンスのヘッダに、同一セグメントの他のオカレンスを指し示すポインタ情報が設定されているか否かに基づいて判断できる)には、親セグメントのヘッダに設定されたポインタ情報が指し示す他のオカレンスの情報のヘッダに設定されている同セグメントの他のオカレンスを指し示すポインタ情報を参照し、当該ポインタ情報が指し示すオカレンスのヘッダに同一セグメントの他のオカレンスを指し示すポインタ情報が設定されているか否かを判定し、ポインタ情報が設定されている場合には、当該ポインタ情報が指し示す他のオカレンスのヘッダに同一セグメントの他のオカレンスを指し示すポインタ情報が設定されているか否かを判定することを繰り返すことで、同一セグメントの他のオカレンスを指し示すポインタ情報がヘッダに設定されていない他のオカレンス(同一セグメントのオカレンスの列のうちの最後に位置しているオカレンス)を探索し、この探索によって抽出されたオカレンスのヘッダに、登録対象の従属セグメントの情報(追加登録するオカレンス)を指し示すポインタ情報を設定する。これにより、登録対象の従属セグメントの情報が、ポインタ情報によってリンク付けされたオカレンスの既存の列の最後にリンク付けされる。
DB制御部が上記処理を行うことで、図2(B)にも示すように、口座情報DBに登録されている各レコードの情報は、口座情報DBに登録されている各セグメントの情報のうち、1階層下位でかつ関連するセグメントの情報が口座情報DBに登録されているセグメントの情報のヘッダに、1階層下位でかつ関連する各セグメントの情報の格納位置を指し示すポインタ情報が各セグメントについて1つずつ各々設定される(ルートセグメントを参照)と共に、同一セグメントの情報が口座情報DBに複数登録されている場合(複数のオカレンスが存在している場合)には、これらの複数のオカレンスのヘッダにポインタ情報が各々設定されることで、親セグメントの情報のヘッダに対応するポインタ情報が設定されているオカレンスを先頭として、同一セグメントのオカレンスの列が形成された物理構造となる。なお、DB制御部による上述した処理は本発明に係る登録手段(詳しくは請求項6に記載の登録手段)に対応している。
口座情報DBからの情報の読み出しについては、口座情報DBからのルートセグメントの情報の読み出しが指示された場合、DB制御部は、上記指示と共に通知された読出対象のルートセグメントのキー情報から一意に定まる単位領域のアドレスを導出し、導出したアドレスが付与された単位領域に対するアクセスをロックした後に当該単位領域の情報を読み出し、読み出した情報の中に読出対象のルートセグメントの情報が存在しているか否か判定する。読み出した情報の中に読出対象のルートセグメントの情報が存在していた場合には、この情報を出力すると共に前記単位領域に対するアクセスのロックを解除するが、読出対象のルートセグメントの情報が含まれていなかった場合には、読み出した情報から制御情報格納領域に設定されているポインタ情報(読出対象のルートセグメントのキー情報と対応付けられているポインタ情報)を抽出し、抽出したポインタ情報が指し示す単位領域に対するアクセスをロックした後に当該単位領域の情報を読み出し、読み出した情報に含まれる読出対象のルートセグメントの情報を出力すると共に、読み出し完了後に各単位領域に対するアクセスのロックを解除する。
また、従属セグメントの情報の読み出しが指示される際には、前述した論理構造においてルートセグメントから読出対象のセグメントに至る経路上の各セグメントの情報を順次読み出す指示が事前に入力される。このため、口座情報DBからの従属セグメントの情報の読み出しが指示された場合、DB制御部は、前回の読出指示によって読み出した情報のヘッダに設定されているポインタ情報が指し示す単位領域を認識し、認識した単位領域が前回読み出しを行った単位領域と同一であれば、前回読み出した情報に含まれる前記ポインタ情報が指し示す特定情報を参照し、認識した単位領域が前回読み出しを行った単位領域と相違していれば、認識した単位領域に対するアクセスをロックした後に前記単位領域の情報を読み出し、読み出した情報に含まれる前記ポインタ情報が指し示す特定情報を参照する。そして、参照した特定情報に設定されているキー情報が読出指示と共に通知された読出対象の従属セグメントの情報のキー情報と一致しているか否か判定する。キー情報が一致していた場合は前記特定情報は読出対象の従属セグメントの情報であるので、当該特定情報を読出対象の従属セグメントの情報として出力すると共に、読み出し完了後に前記単位領域に対するアクセスのロックを解除する。
また、読出対象の従属セグメントの情報が、同一セグメントの情報として登録されて列を形成している複数のオカレンスの何れかである場合には、前回の読出指示によって読み出した情報のヘッダに設定されているポインタ情報は読出対象のオカレンスとは別のオカレンスの情報である可能性が高く、この場合、前述のキー情報は不一致となる。キー情報が不一致となった場合には、特定情報のヘッダに設定されているポインタ情報が指し示す単位領域を認識し、必要に応じて単位領域の情報の読み出しを行って上記ポインタ情報が指し示す次の特定情報を参照し、キー情報が一致しているか否かを判定することを、キー情報が一致している情報が出現する迄繰り返し(この処理により、同一セグメントのオカレンスの列が順に参照されることになる)、キー情報が一致した情報を読出対象のオカレンスとして出力する。なお、DB制御部による上述した処理は本発明に係る読出手段に対応している。
なお、口座情報DBに対する情報の更新については、口座情報DBからの更新対象の情報の読み出しが指示された後に、続いて前記情報の更新が指示されるので、DB制御部は、前回の読出指示により口座情報DBからの読み出しを行った情報を、通知された更新対象の情報で上書きすることで、口座情報DBに対する情報の更新を行う。
また、口座情報DBに対する情報の登録、読み出し、更新等のアクセスは、例えば新規顧客によって特定金融機関の口座開設が指示されたり、特定金融機関に既に口座を開設している顧客によって別口座の開設が指示されたり、顧客から入金・残高照会・預金の引き出し・振込・振替等の金融取引の実行が指示されたことを契機として、口座情報DBへのアクセスを要求する電文がATM22又は営業店端末24から送信され、この電文がコンピュータ・ネットワーク18やブランチ・サーバ20を経由してホスト・コンピュータ12で受信されることによって行われる。ホスト・コンピュータ12では、口座情報DBへのアクセスを要求する電文を受信する毎に、DB操作アプリケーション部により、受信した電文の要求に基づき、アプリケーション制御部を介してDB制御部へ口座情報DBへのアクセスを指示すると共に、アプリケーション制御部を介してDB制御部からアクセス結果を受け取り、口座情報DBに対する要求されたアクセスが完了すると、要求元のATM22又は営業店端末24へ応答(電文)を送信するDB操作処理を行う。
具体的には、例えば新規顧客によって特定金融機関の口座が開設が指示され、この指示に基づき営業店端末24から送信された電文により、口座情報DBへの情報登録が要求された場合、図4(A)に示すように、DB操作アプリケーション部は、まず新規顧客の属性情報をルートセグメントの情報として口座情報DBへ登録するようアプリケーション制御部へ指示する(図4(A)のステップ30も参照)。なお、DB操作アプリケーション部による口座情報DBへの情報の登録指示では、登録対象DB(この場合は口座情報DB)の論理DB名、登録対象の情報のセグメント名(セグメントの階層を識別するための名称)及び登録対象データ(キー情報や本体情報)がパラメータとしてアプリケーション制御部へ引き渡される。
アプリケーション制御部はDB操作アプリケーション部から上記指示が入力されると、入力されたパラメータのうちの論理DB名をDB制御部が認識可能な物理DB名へ変換し(詳細は後述するが、ルートセグメントの情報は口座情報第1DBに登録されるので、この場合は論理DB名が口座情報第1DBの物理DB名へ変換される)た後に、入力された指示をDB制御部へ伝達する(図4(A)のステップ32も参照)。これにより、DB制御部によって口座情報DB(詳しくは第1ストレージ14に記憶されている口座情報第1DB)へのルートセグメントの情報の登録が行われる(図4(A)のステップ34も参照)。口座情報DBへのルートセグメントの情報の登録が完了すると、DB制御部はアプリケーション制御部へ処理完了を通知し(図4(A)のステップ36も参照)、アプリケーション制御部はDB操作アプリケーション部へ処理完了を通知する(図4(A)のステップ38も参照)。
口座情報DBへのルートセグメントの情報の登録が完了すると、続いてDB操作アプリケーション部は、新規顧客が開設した口座の情報を第2階層セグメントの情報として口座情報DBへ登録するようアプリケーション制御部へ指示する(図4(A)のステップ40も参照)。アプリケーション制御部はDB操作アプリケーション部から上記指示が入力されると、入力された論理DB名を物理DB名(この場合も口座情報第1DBの物理DB名)へ変換した後に、入力された指示をDB制御部へ伝達する(図4(A)のステップ42も参照)。これにより、DB制御部によって口座情報DB(詳しくは第1ストレージ14に記憶されている口座情報第1DB)へ第2階層セグメントの情報が登録されると共に、今回登録した第2階層セグメントの情報の格納位置を指し示すポインタ情報が、前回の処理(ステップ34)で口座情報DBに登録したルートセグメントの情報のヘッダに設定される(図4(A)のステップ44も参照)。
口座情報DBへの第2階層セグメントの情報の登録が完了すると、DB制御部はアプリケーション制御部へ処理完了を通知し(図4(A)のステップ46も参照)、アプリケーション制御部はDB操作アプリケーション部へ処理完了を通知する(図4(A)のステップ48も参照)。これにより、新規顧客によって特定金融機関の口座が開設が指示された場合の口座情報DBへの情報登録が完了するので、DB操作アプリケーション部は情報登録要求元の営業店端末24へ処理完了を通知し、DB操作処理を終了する。
また、例えば特定金融機関に口座を開設している顧客によってATM22が操作されることで、顧客が開設している特定口座の残高照会が指示され、この指示に基づきATM22から送信された電文により、口座情報DBからの情報読み出しが要求された場合、図4(B)に示すように、DB操作アプリケーション部は、まず前記顧客に対応するレコードのルートセグメントの情報を口座情報DBからの読み出すようアプリケーション制御部へ指示する(図4(B)のステップ50も参照)。なお、DB操作アプリケーション部による口座情報DBからの情報の読出指示では、読出対象DB(口座情報DB)の論理DB名、読出対象の情報のセグメント名、読出対象の情報に付与されたキー情報及び読出情報格納領域のアドレス(ポインタ)がパラメータとしてアプリケーション制御部へ引き渡される。
アプリケーション制御部はDB操作アプリケーション部から上記指示が入力されると、入力された論理DB名を物理DB名へ変換した後に、入力された指示をDB制御部へ伝達する(図4(B)のステップ52も参照)。これにより、DB制御部によって口座情報DB(詳しくは第1ストレージ14に記憶されている口座情報第1DB)からのルートセグメントの情報の読み出しが行われる(図4(B)のステップ54も参照)。口座情報DBからのルートセグメントの情報の読み出しが完了すると、DB制御部は、読み出した情報を通知されたアドレスの格納領域に書き込んだ後にアプリケーション制御部へ処理完了を通知し(図4(B)のステップ56も参照)、アプリケーション制御部はDB操作アプリケーション部へ処理完了を通知する(図4(B)のステップ58も参照)。
口座情報DBからのルートセグメントの情報の読み出しが完了すると、続いてDB操作アプリケーション部は、残高照会が要求されている口座に対応する第2階層の特定セグメントの情報を口座情報DBから読み出すようアプリケーション制御部へ指示する(図4(B)のステップ60も参照)。アプリケーション制御部はDB操作アプリケーション部から上記指示が入力されると、入力された論理DB名を物理DB名(この場合も口座情報第1DBの物理DB名)へ変換した後に、入力された指示をDB制御部へ伝達する(図4(B)のステップ62も参照)。これにより、DB制御部は、前回の処理(ステップ54)で口座情報DBから読み出したルートセグメントの情報のヘッダに設定されているヘッダが指し示す第2階層セグメントの情報を読み出し、読み出した情報に設定されているキー情報が通知されたキー情報と一致しているか否かを判断することで読み出した情報が読出対象の第2階層セグメントの情報か否か判定する。また、この判定が否定された場合には、読出対象の第2階層セグメントに複数のオカレンスが存在しているので(例えば同一の顧客が同一種の口座を複数開設している等の場合)、読み出した情報のヘッダに設定されているポインタ情報が指し示す同一セグメントの別のオカレンスを読み出し、読み出したオカレンスが読出対象の情報か否かを判定することを繰り返す。
そして、上記の処理を行うことで読出対象の第2階層セグメントの情報を口座情報DBから読み出すと、DB制御部は、読み出した情報を通知されたアドレスの格納領域に書き込んだ後にアプリケーション制御部へ処理完了を通知し(図4(B)のステップ66も参照)、アプリケーション制御部はDB操作アプリケーション部へ処理完了を通知する(図4(B)のステップ68も参照)。上記処理によって読み出された情報には、残高照会が要求された口座の残高を表す情報が含まれているので、DB操作アプリケーション部は、読み出された情報を編集した後に残高照会要求元のATM22へ送信し、DB操作処理を終了する。
ところで、ATM22や営業店端末24が口座情報DBへのアクセスを要求してから処理完了が通知されるまでの待ち時間は、要求されたアクセスが完了する迄に必要なI/Oの回数(登録や読み出し、更新を行う単位領域の個数)によって大きく左右され、I/O回数が増大するに従って、ホスト・コンピュータ12、第1ストレージ14及び第2ストレージ16から成るデータベース・システムのレスポンスが低下し、ATM22や営業店端末24の待ち時間も増大する。これに対し、口座情報DBに登録される各レコードの情報のうちの第3階層セグメントについては、対応する顧客からの指示により新たな金融取引が行われる毎に、対応する新たな取引明細がオカレンスとして追加登録されるので、オカレンスの数が非常に多くなり易いという性質を有している。口座情報DBに対しては取引明細を合算する等のバッチ処理が定期的に行われ、このバッチ処理の実行直後は第3階層セグメントのオカレンスの数は非常に少ない状態となっているが、顧客によっては、次にバッチ処理が行われる迄の間に第3階層セグメントのオカレンスが1000〜2000個も追加登録されることもある。
また、前述のように、同一の顧客の同一の口座の取引明細はオカレンスの列として直列にリンク付けされており、オカレンスの列の中の特定のオカレンス(特定の取引明細)へのアクセスが要求された場合には、オカレンスの列を順に辿っていくことでアクセス対象のオカレンスが探索される。本実施形態では、単一の単位領域に格納可能なオカレンスの数が8個程度であるので、多数個のオカレンスから成るオカレンスの列の中から特定のオカレンスへのアクセスが要求された場合、要求されたアクセスを完了させるために必要なI/Oの回数が非常に多くなる可能性が高い。例えば500個のオカレンスから成るオカレンスの列の最後のオカレンス(取引明細)へのアクセスが要求された場合、単一の単位領域に格納可能なオカレンスの数を8個とすると、500個のオカレンスは最小でも63個の単位領域に分けて格納されるので、ルートセグメントの情報及び500個のオカレンスが登録されている第3階層セグメントと関連する第2階層のセグメントの情報が単一の単位領域に格納されていたとしても、I/Oの回数は最小で1+63=64回となる。また、特定の口座に対応する取引明細の全数読み出しが要求された場合にも、上記と同様にI/Oの回数は非常に多くなる。このように、多数個のオカレンスから成るオカレンスの列がI/Oの回数の大幅な増大を招き、データベース・システムのレスポンスの低下、ATM22や営業店端末24の待ち時間の増大を引き起こしていた。
また、コンピュータ・ネットワーク18には多数台のATM22及び営業店端末24が接続されており、口座情報DBに対するアクセスは個々のATM22、営業店端末24から非同期に要求されることから、ホスト・コンピュータ12では、アクセス要求が集中した場合にも、個々のATM22や営業店端末24が口座情報DBへのアクセスを要求してから処理完了が通知されるまでの待ち時間が大幅に増大することを回避する(ホスト・コンピュータ12、第1ストレージ14及び第2ストレージ16から成るデータベース・システムのレスポンスを速くする)ために、個々のATM22や営業店端末24から口座情報DBに対するアクセスが要求される毎に、要求されたアクセスを行うプロセスを生成し、複数のプロセスを並列に処理することで、個々のATM22や営業店端末24からのアクセス要求を並列に処理している。
個々のプロセスによる口座情報DBへのアクセスは非同期に行われ、またアクセス対象の単位領域もランダムであるので、特定の単位領域に対して複数のプロセスが同時にアクセスすることで、特定の単位領域に格納されている情報に矛盾が生ずることを避けるために、DB制御部は、個々のプロセスにおいて、アクセス対象の単位領域をロックする(他のプロセスのDB制御部が処理対象の単位領域にアクセスすることを禁止する)排他制御を行っている。但し、この排他制御に伴ってデッドロックが発生する可能性がある。
例えば図5に示すように、レコードxにアクセスするプロセスA(のDB制御部)が、まずレコードxの第n階層のセグメントの情報が格納されている単位領域iをロックし、単位領域iの情報を読み出した後に、レコードxの第n階層のセグメントの情報のヘッダに設定されているポインタ情報に基づき、レコードxの第n+1階層のセグメントの情報が格納されている単位領域jにアクセスしようとしたときに、レコードyにアクセスする別のプロセスB(のDB制御部)が、レコードyの第m階層のセグメントの情報が格納されている単位領域jをロックし、単位領域jの情報を読み出した後に、レコードyの第n+1階層のセグメントの情報のヘッダに設定されているポインタ情報に基づき、レコードyの第m+1階層のセグメントの情報が格納されている単位領域iにアクセスしようとしていた場合、プロセスAはプロセスBによる単位領域jのロックが解除されるのを待機する状態になる一方、プロセスBはプロセスAによる単位領域iのロックが解除されるのを待機する状態になる(デッドロック)。
このデッドロックは、1回のアクセス要求に対するI/Oの回数が多くなる程発生し易いが、口座情報DBは、前述のように第3階層セグメントのオカレンスの数が非常に多くなり易く、多数個のオカレンスから成るオカレンスの列がI/Oの回数の大幅な増大を招くのでデッドロックが発生し易いという問題もある。
このため本実施形態では、口座情報DBに登録されている各レコード(各顧客の口座情報)のうち、大量のオカレンスが登録されている、又はその可能性がある第3階層の特定セグメント(本実施形態に係る口座情報DBでは、各レコードの第3階層の各セグメントのうちの一部が上記の特定セグメントに該当する)を有する一部のレコードに対し、前記特定セグメント(分割対象のセグメント)のオカレンスをブロック化して(複数個のオカレンスを単位として纏めて)口座情報第2DBに登録する(同一レコードかつ同一の分割対象セグメントのオカレンスを複数登録するための領域をブロック化エリアと称する:図8も参照)と共に、口座情報第2DBにブロック化して登録した複数のオカレンスのインデックスもブロック化して口座情報第2DBに登録する(複数のオカレンスのインデックスをブロック化して登録するための領域をコントロールブロックと称する:図8も参照)ことによって上記の問題を解決している。なお、上記のように特定セグメントの多数のオカレンスをブロック化し、コントロールブロックと共に異なるDBに登録する(異なるストレージに記憶させる)ことを、本明細書ではコントロール分割と称する。また、第3階層は請求項2に記載の所定階層に対応している。
以下、このコントロール分割を実現するために、アプリケーション制御部によって実行されるアプリケーション制御処理について、図6のフローチャートを参照して説明する。なお、このアプリケーション制御処理は、DB操作アプリケーション部から口座情報DBへのアクセス(情報の登録、読み出し、更新の何れか)が指示される毎に実行される。ステップ150では、指示されたアクセスが口座情報DBに対する情報の登録か読み出しか更新かを判定し、判定結果に応じて分岐する。指示された要求が口座情報DBへの情報の登録である場合はステップ152で情報登録処理を行う。なお、この情報登録処理は、後述する図6のステップ154と共に本発明に係る登録制御手段(詳しくは請求項3〜請求項8に記載の登録制御手段)に対応している。
図7に示すように、この情報登録処理では、まずステップ200において、登録対象の情報のセグメントがコントロール分割対象のセグメントか否か判定する。本実施形態では、コントロール分割対象のセグメントに対し、該コントロール分割対象セグメントよりも1階層上位でかつコントロール分割対象セグメントと関連するセグメント(例えばコントロール分割対象のセグメントが普通口座を対象とした金融取引の取引明細を登録するための第3階層のセグメントであれば、前記普通口座に関する情報を登録するための第2階層のセグメント:請求項7に記載の関連セグメントに相当)のヘッダに、コントロール分割の対象であることを表す分割定義情報が設定される(図8に示す「コントロール分割=オン」を参照)。この分割定義情報は、多数の取引明細(オカレンス)が登録されることが予想される特定顧客(例えば法人の顧客)のレコードに対しては事前に設定されるが、後述するように、特定顧客のレコードの特定セグメントのオカレンス数が所定値以上になったことを契機として自動的に設定される場合もある。
ステップ200では、上記の関連セグメントのヘッダに設定される分割定義情報を参照することで、登録対象の情報のセグメントがコントロール分割対象のセグメントか否かを判定しており、判定が否定された場合はステップ202へ移行し、登録対象情報と同一レコードかつ同一セグメントの情報(関連オカレンス)の数が口座情報DBに所定値以上登録されているか否か判定する。例えば登録対象情報がルートセグメントや第2階層セグメントの情報である場合、或いは登録対象情報が第3階層セグメントの情報であるものの口座情報DBに既登録の関連オカレンスの数が所定値未満の場合には上記判定が否定されてステップ204へ移行し、DB操作アプリケーション部から通知された論理DB名を口座情報第1DBの物理DB名へ変換しキー情報やセグメント名と共にDB制御部へ引き渡すと共に、DB操作アプリケーション部から転送された登録対象情報をDB制御部へ転送することで、DB制御部に対し、登録対象情報を口座情報第1DBへ登録するよう指示する。そして、DB制御部から登録完了が通知されると情報登録処理を終了してステップ154(図6)へ移行し、登録対象情報の登録が完了したことをDB操作アプリケーション部へ通知し、アプリケーション制御処理を終了する。
このように、登録対象の情報がルートセグメントや第2階層セグメントの情報である場合、或いは登録対象情報が第3階層セグメントの情報であるものの、この第3階層セグメントはコントロール分割対象ではなく、かつ口座情報DBに既登録の関連オカレンスの数が所定値未満の場合には、登録対象情報は従来通り口座情報第1DBに登録される。なお、前述のステップ202の判定が肯定された場合はステップ206でレコード分割・登録処理が行われるが、この処理については後述する。
一方、特定金融機関に既に開設されている口座に対して新たな金融取引が行われた等を契機として、DB操作アプリケーション部により、ルートセグメント及び第2階層セグメントの情報の読み出しが順次指示された後に(図12のステップ70〜ステップ88も参照)、口座情報DBへの取引明細(第3階層のコントロール分割対象セグメントの情報)の登録が指示された場合(図12のステップ90)場合には、ステップ200の判定が肯定されてステップ210へ移行し、DB制御部に対し、登録対象情報のセグメント(コントロール分割対象のセグメント)に対応するコントロールブロックを口座情報第2DBから読み出すよう指示する(図12のステップ92も参照)。
本実施形態において、コントロール分割対象のセグメントのオカレンスは、前述のように口座情報第2DB(第2ストレージ16の記憶領域)に確保されたブロック化エリアに登録されるが、単一のブロック化エリアに登録可能なオカレンスの数には限りがある(例えば4個程度)ので、口座情報DBに登録される同一レコードかつ同一セグメントのオカレンス(取引明細)の数が増加するに従い、対応するブロック化エリアの数も増加される(詳細は後述)。このため、本実施形態では同一レコードかつ同一セグメントに対応する個々のブロック化エリアの各々を識別するために、個々のブロック化エリアに「0001」を初期値とする通番を個々のブロック化エリアの発生順(登録順)に付与しており、個々のブロック化エリアを、ルートセグメントのキー情報、第2階層セグメントのキー情報及び個々のブロック化エリアに付与した通番を羅列して成るキー情報によって識別している。なお、ブロック化エリアは本発明に係るブロック化記憶領域に対応している。一方、ブロック化エリアと区別するために、コントロールブロックには通番「0000」を付与しており、個々のコントロールブロックはルートセグメントのキー情報、第2階層セグメントのキー情報及びコントロールブロックに付与した通番「0000」を羅列して成るキー情報によって識別している。また、コントロールブロック及びブロック化エリアは、何れもルートセグメントとして口座情報第2DBに登録される。
このため、ステップ210におけるコントロールブロックの読み出し指示は、DB操作アプリケーション部から通知された論理DB名を口座情報第2DBの物理DB名へ変換すると共に、コントロール分割対象のセグメントに対応するルートセグメントのキー情報、第2階層セグメントのキー情報及び通番「0000」を羅列したキー情報を生成し、読出対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を設定し、これらの情報をパラメータとしてDB制御部へ引き渡すことによって成される。これにより、DB制御部によって、登録対象情報のセグメント(コントロール分割対象のセグメント)に対応するコントロールブロックの口座情報第2DBからの読み出しが試行される(図12のステップ94も参照)。
DB制御部から何らかの応答(図12のステップ96も参照)を受信するとステップ212へ移行し、コントロールブロックの読み出しが正常に行われたか否か判定する。この判定は、登録対象情報のセグメントに対応するコントロールブロック(及びブロック化エリア)が口座情報第2DBに登録されていない場合に否定されるが、この場合、今回の登録対象情報は、対応するセグメント(コントロール分割対象のセグメント)の情報として口座情報DBへ初めて登録されるオカレンスであると判断できるので、ステップ218へ移行し、ステップ218以降で口座情報第2DBへのブロック化エリア及びコントロールブロックの新規登録を行う。
すなわち、ステップ218では口座情報第2DBに新規登録するコントロールブロックの情報を生成する。図8に示すように、コントロールブロックはヘッダ情報設定領域、キー情報設定領域及びインデックス設定領域から成り、ヘッダ情報設定領域には各種の制御情報が設定される。また、ヘッダ情報設定領域には対応するブロック化エリアの先頭及び末尾の通番を設定するための領域が設けられており(図10に示す「先頭通番」及び「最終通番」を参照)、口座情報第2DBに新規登録されるコントロールブロックには、先頭通番及び最終通番として各々「0001」が設定される。また、キー情報設定領域には登録対象情報のセグメントに対応するルートセグメントのキー情報、第2階層セグメントのキー情報及びコントロールブロック用の通番「0000」を羅列したキー情報が設定され、インデックス設定領域には登録対象情報のインデックスが設定される。このインデックスは、登録対象情報の日付(登録対象情報(取引明細)が表す金融取引の実行日付)と、登録対象情報が登録されるブロック化エリアの通番から成り、コントロールブロックの新規登録では登録対象情報が通番「0001」のブロック化エリアに登録されるので、インデックスの通番にも「0001」が設定される。なお、コントロールブロックは本発明に係る制御情報領域に、インデックスは本発明に係る制御情報(詳しくは請求項3に記載の制御情報)に対応している。
そしてステップ218では、登録対象DBの物理DB名として口座情報第2DBの物理DB名を設定すると共に、登録対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を設定し、登録対象情報のキー情報として先にコントロールブロックのキー情報設定領域に設定したキー情報を設定し、これらの情報をパラメータとしてDB制御部へ引き渡すと共に、生成したコントロールブロックの情報をDB制御部へ転送することで、登録対象情報のセグメント(コントロール分割対象のセグメント)に対応するコントロールブロックを口座情報第2DBへルートセグメントの情報として新規登録するようDB制御部へ指示する。
これにより、DB制御部は、まずパラメータとして引き渡されたキー情報に基づき、第2ストレージ16の基本域内の各単位領域のうち、転送されたコントロールブロックの情報を登録すべき単位領域のアドレスを導出した後に、導出した単位領域にコントロールブロックの情報を登録するが、図9に示すように、本実施形態では第2ストレージ16の基本域がコントロールブロックを登録するための記憶領域とブロック化エリアを登録するための記憶領域に区画されており、上記の単位領域のアドレス導出のアルゴリズムは、アドレス導出に用いるキー情報に含まれる通番が「0000」の場合(すなわちコントロールブロックを登録する場合)には、コントロールブロック登録用領域内に存在している基本領域のアドレスが導出され、キー情報に含まれる通番が「0000」以外の場合(すなわちブロック化エリアを登録する場合)には、ブロック化エリア登録用領域内に存在している基本領域のアドレスが導出されるように定められている。このため、新規登録を指示したコントロールブロックは、DB制御部により、第2ストレージ16の基本域のうちコントロールブロック登録用領域内の特定の基本領域(DB制御部へ引き渡したキー情報より一意に特定されるアドレスの基本領域)に、ルートセグメントの情報として新規登録されることになる。
DB制御部によって口座情報第2DBへのコントロールブロックの新規登録が完了し、DB制御部からコントロールブロックの新規登録完了が通知されると、次のステップ220へ移行し、口座情報第2DBに新規登録するブロック化エリアの情報を生成する。図8に示すように、ブロック化エリアはヘッダ情報設定領域、キー情報設定領域及びオカレンス設定領域から成り、新規登録するブロック化エリアの情報生成は、ヘッダ情報設定領域に各種の制御情報を設定し、キー情報設定領域に、登録対象情報のセグメント(コントロール分割対象のセグメント)に対応するルートセグメントのキー情報、第2階層セグメントのキー情報及びブロック化エリアに付与する通番の初期値である「0001」を羅列したキー情報を設定し、オカレンス設定領域に登録対象情報を設定することによって成される。
そしてステップ222では、登録対象DBの物理DB名として口座情報第2DBの物理DB名を、登録対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を、登録対象情報のキー情報として先にブロック化エリアのキー情報設定領域に設定したキー情報を各々設定し、これらの情報をパラメータとしてDB制御部へ引き渡すと共に、生成したブロック化エリアの情報をDB制御部へ転送することで、登録対象情報を含むブロック化エリアを口座情報第2DBへルートセグメントの情報として新規登録するようDB制御部へ指示する。これにより、DB制御部は、まず転送されたブロック化エリアの情報を登録すべき単位領域のアドレスとして、パラメータとして引き渡されたキー情報から一意に特定されるアドレスを導出し(このとき導出されるアドレスは、第2ストレージ16の基本域のうちブロック化エリア登録用領域内に存在している特定の基本領域のアドレスとなる)、導出した単位領域に、転送されたブロック化エリアの情報をルートセグメントの情報として新規登録する。
以上の処理により口座情報第2DBへのブロック化エリア及びコントロールブロックの新規登録が完了し、DB制御部から登録完了が通知されると情報登録処理を終了してステップ154(図6)へ移行し、登録対象情報の登録が完了したことをDB操作アプリケーション部へ通知し、アプリケーション制御処理を終了する。
また、前述したステップ210におけるコントロールブロックの読み出し指示に対し、DB制御部から該当するコントロールブロックの読出完了が通知されると共に、読出対象のコントロールブロックの情報が転送された場合には、今回の登録対象情報と同一のセグメント(コントロール分割対象のセグメント)の他のオカレンスが既に口座情報第2DBに登録されていると判断できるので、ステップ212の判定が肯定されてステップ226へ移行し、ステップ226以降で今回の登録対象情報を口座情報第2DBにオカレンスとして追加登録する処理を行う。
すなわち、まずステップ226では、DB制御部より転送されたコントロールブロックの情報から、ヘッダ情報設定領域に設定されているブロック化エリアの最終通番を抽出すると共に、DB制御部より転送されたコントロールブロックの情報をメモリ12Bに一時記憶させる。次のステップ228では、読出対象DBの物理DB名として口座情報第2DBの物理DB名を、読出対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を各々設定すると共に、読出対象情報のキー情報として、登録対象情報のセグメントに対応するルートセグメントのキー情報、第2階層セグメントのキー情報及び先のステップ226で抽出したブロック化エリアの最終通番を羅列したキー情報を設定し、これらの情報をパラメータとしてDB制御部へ引き渡すことで、該当するブロック化エリア(登録対象情報のセグメントに対応するブロック化エリアのうち登録対象情報をオカレンスとして登録すべき最終通番のブロック化エリア)を口座情報第2DBから読み出すようDB制御部へ指示する(図12のステップ98も参照)。
DB制御部によって口座情報第2DBからのブロック化エリアの読み出しが行われ(図12のステップ100も参照)、DB制御部からブロック化エリアの読出完了が通知されると(図12のステップ102も参照)、ステップ230へ移行し、DB制御部によって口座情報第2DBから読み出されたブロック化エリアに、登録対象情報を登録可能な空き領域が有るか否か判定する。なお、上述したステップ228,230は請求項4に記載の登録制御手段に対応している。判定が肯定された場合はステップ232へ移行し、まずDB制御部によって読み出されたブロック化エリア(最終通番のブロック化エリア)のオカレンス設定領域に登録対象情報をオカレンスとして追加設定する(図12のステップ104も参照)。そして、登録対象DBの物理DB名として口座情報第2DBの物理DB名を、登録対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を、登録対象情報のキー情報として先のステップ228で設定したキー情報を各々設定し、これらの情報をパラメータとしてDB制御部へ引き渡すと共に、登録対象情報を追加設定したブロック化エリアの情報をDB制御部へ転送することで、登録対象情報を含むブロック化エリアをDB制御部によって口座情報第2DBへルートセグメントの情報として上書き登録させ(図12のステップ106〜110も参照)、ステップ240へ移行する。
一方、ステップ230の判定が肯定された場合は、登録対象情報を登録するためのブロック化エリアを口座情報第2DBに追加登録する必要があるので、ステップ234へ移行し、口座情報第2DBへ追加登録するブロック化エリアの情報をメモリ12B上に生成する。なお、追加登録するブロック化エリアの情報生成に際し、該ブロック化エリアのオカレンス設定領域には登録対象情報がオカレンスとして設定される。そしてステップ236では、登録対象DBの物理DB名として口座情報第2DBの物理DB名を、登録対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を設定すると共に、登録対象情報のキー情報として、先のステップ228で設定したキー情報における通番を1だけインクリメントしたキー情報(1インクリメントした後の通番が追加登録するブロック化エリアの通番となる)を設定し、これらの情報をパラメータとしてDB制御部へ引き渡すと共に、ステップ250で生成したブロック化エリアの情報をDB制御部へ転送することで、登録対象情報を含むブロック化エリアをDB制御部によって口座情報第2DBへルートセグメントの情報として追加登録させる。またステップ238では、ステップ226でメモリ12Bに一時記憶させたコントロールブロックのヘッダ情報設定領域に設定されている最終通番を1だけインクリメントし、ステップ240へ移行する。
ステップ240では、先のステップ210の読出指示に従いDB制御部から読み出されたコントロールブロックが、今回の登録対象情報のセグメント(コントロール分割対象のセグメント)に対応する最終のコントロールブロックか否か判定する。本実施形態ではコントロールブロックのサイズを一定としており、コントロールブロックのインデックス設定領域に設定可能なインデックスの数にも限りがあるので、特定レコードのコントロール分割対象の特定セグメントのオカレンスが口座情報第2DBに多数登録されると、これに伴ってインデックス設定領域に新たなインデックスを追加設定できない状態も生じ得る。このため、口座情報第2DBへの特定レコードの特定セグメントのオカレンスの登録に際し、図11(A)に示すように、口座情報第2DBに既登録のコントロールブロックのインデックス設定領域に登録対象情報のインデックスを追加設定するための空き領域が無かった場合には、図11(B)に示すように、特定レコードの特定セグメントに対応する既登録のコントロールブロックのインデックス設定領域が削除されると共に、特定レコードの特定セグメントに対応する新たなコントロールブロックとして、既登録のコントロールブロックのインデックス設定領域に設定されていたインデックス及び追加設定すべきインデックスがインデックス設定領域に設定されたコントロールブロックが口座情報第2DBに追加登録され、同一レコードかつ同一のセグメントに対応するこれらのコントロールブロックがヘッダ情報設定領域に設定されたポインタ情報によってリンク付けされることで、同一レコードかつ同一セグメントに対応するコントロールブロック群が階層化される(口座情報第2DBに最初に登録したコントロールブロックがルートブロック(第1階層のブロック)として扱われ、口座情報第2DBに追加登録した各コントロールブロックは第2階層のブロックとして扱われる)。
上記のコントロールブロックの追加登録は、コントロールブロックへのインデックスの追加設定に際し、インデックスを追加設定するための空き領域が無い状態が生じる毎に繰り返され、図11(B)に示す状態から更にインデックスの追加設定が繰り返されることで空き領域が無い状態が再度生じた場合には、図11(C)に示すようにコントロールブロックが更に追加登録される。また、コントロールブロックには、コントロールブロックの最後を示すストッパが設定される。このストッパは、特定レコードの特定セグメントに対応するコントロールブロックが最初に登録されたとき(特定レコードの特定セグメントに対応するコントロールブロックの数が1のとき)には、最初に登録されたコントロールブロックの末尾に設定され(図8参照)、特定レコードの特定セグメントに対応するコントロールブロックが追加登録される毎に、図11に示すように追加登録された最終のコントロールブロックへ移動される(図11ではストッパの領域にハッチングを付して示している)。このため、前述のステップ240の判定は、ステップ210の読出指示に従いDB制御部から読み出されたコントロールブロックの情報にストッパが設定されているか否かに基づいて行うことができる。
登録対象情報のセグメントに対応するコントロールブロックとして、口座情報第2DBに単一のコントロールブロックが登録されていた場合にはステップ240の判定が肯定されるが、登録対象情報のセグメントに対応するコントロールブロックが複数登録されていた場合(階層化されていた場合)には、ステップ240の判定が否定されてステップ242へ移行し、DB制御部に対し同一レコードかつ同一セグメントに対応する次のコントロールブロック(ステップ210の読出指示に従いDB制御部から読み出されたコントロールブロックのヘッダ情報設定領域に設定されているポインタ情報が指し示すコントロールブロック)の読み出しを指示してステップ240に戻る。このステップ242はステップ240の判定が肯定される迄繰り返されるので、同一レコードかつ同一セグメントに対応する複数のコントロールブロックが口座情報第2DBに登録されている(コントロールブロックが階層化されている)場合には、同一レコードかつ同一セグメントに対応する全てのコントロールブロックの情報が順に読み出されることになる。
DB制御部によって登録対象情報のセグメントに対応する最終のコントロールブロックの情報が読み出されると、ステップ240の判定が肯定されてステップ244へ移行し、最終のコントロールブロックのインデックス設定領域に最終インデックスとして設定されている日付(最終日付)を抽出し、登録対象情報の日付が抽出した最終日付に一致しているか否か判定する。コントロールブロックのインデックス設定領域に設定される単一のインデックスのサイズは12バイト程度であり、コントロールブロックのインデックス設定領域には対応する全てのオカレンスのインデックスを設定することも可能であるが、この場合、多数のオカレンスが登録されるレコードに対して多数のコントロールブロックが登録されることで、当該レコードにアクセスする際のI/Oの回数が増大する可能性があり、これを回避するために本実施形態では、対応する金融取引の実行日付が互いに相違するオカレンスについてのみコントロールブロックのインデックス設定領域にインデックスを設定し、同日に実行された異なる金融取引に対応する複数のオカレンスの登録が順次指示された場合には、最初に登録が指示されたオカレンスのインデックスのみをインデックス領域に設定するようにしている。
具体的には、例えば図10に示すように、日付が"3/10"のオカレンスが4個、日付が"3/11"のオカレンスが7個、日付が"3/12"のオカレンスが1個、日付が"3/13"のオカレンスが2個存在しており、日付が"3/10"のオカレンスが通番=1のブロック化エリアにのみ登録され、日付が"3/11"のオカレンスが通番=1〜3のブロック化エリアに分けて登録され、日付が"3/12"のオカレンス及び日付が"3/13"のオカレンスが通番=3のブロック化エリアにのみ登録されていた場合、日付が"3/10"のオカレンス群に対応するインデックスとして日付が"3/10"、通番が"1"のインデックスが設定され、日付が"3/11"のオカレンス群に対応するインデックスとして日付が"3/11"、通番が"1"のインデックスが設定され、日付が"3/12"のオカレンス群に対応するインデックスとして日付が"3/12"、通番が"3"のインデックスが設定され、日付が"3/13"のオカレンス群に対応するインデックスとして日付が"3/13"、通番が"3"のインデックスが設定されることになる。
このため、前述のステップ244の判定が肯定された場合、すなわち同日に実行された異なる金融取引を表す同一セグメントの他のオカレンスのインデックスがコントロールブロックに既に登録されている場合には、今回の登録対象情報に対応するインデックスをコントロールブロックに登録する必要は無いと判断できるので、何ら処理を行うことなくステップ258へ移行する。また、ステップ244の判定が否定された場合には、同日に実行された異なる金融取引を表す同一セグメントの他のオカレンスのインデックスがコントロールブロックに登録されていないので、今回の登録対象情報のインデックスをコントロールブロックのインデックス設定領域に設定する必要がある。このため、次のステップ246では、DB制御部によって読み出された登録対象情報のセグメントに対応する最終のコントロールブロックのインデックス設定領域を参照し、該インデックス設定領域に登録対象情報のインデックスを登録可能な空き領域が有るか否か判定する。
判定が肯定された場合は登録対象情報のセグメントに対応するコントロールブロックを追加登録する必要はないので、ステップ248へ移行し、前記最終のコントロールブロックのインデックス設定領域に、今回の登録対象情報に対応するインデックス(登録対象情報が表す取引明細に対応する金融取引の実行日付、前述のステップ232又はステップ234,236で今回の登録対象情報を設定したブロック化エリアの通番)を設定する(図12のステップ112も参照)。そして、登録対象DBの物理DB名として口座情報第2DBの物理DB名を、登録対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を設定すると共に、登録対象情報のキー情報としてコントロールブロックのキー情報を設定し、これらの情報をパラメータとしてDB制御部へ引き渡すと共に、今回の登録対象情報のインデックスを追加設定した最終のコントロールブロックの情報をDB制御部へ転送することで、今回の登録対象情報のインデックスを追加設定した最終のコントロールブロックをDB制御部によって口座情報第2DBへルートセグメントの情報として上書き登録させ(図12のステップ114〜118も参照)、ステップ258へ移行する。
一方、ステップ246の判定が否定された場合はステップ250へ移行し、前述のステップ226でメモリ12Bに一時記憶させたコントロールブロック(口座情報第2DBから最初に読み出されたコントロールブロック)が階層化されたコントロールブロック群におけるルートブロックに相当するフォーマット(インデックス設定領域が削除されたフォーマット)か否かを判定することで、登録対象情報のセグメントに対応するコントロールブロックが口座情報第2DBに複数登録されているか否か判定する。なお、コントロールブロックが複数登録されているか否かを判定することは、ステップ226でメモリ12Bに一時記憶させたコントロールブロックにストッパが設定されているか否かを判定する、或いは前述のステップ240の判定が否定された回数が0回か否かを判定することで行うことも可能である。
上記判定が肯定された場合は何ら処理を行うことなくステップ254へ移行するが、ステップ250の判定が否定された場合はステップ252へ移行し、登録対象情報のセグメントに対応する新たなコントロールブロックを追加登録してコントロールブロックを階層化するために、前述のステップ226でメモリ12Bに一時記憶させたコントロールブロック(最初に読み出されたコントロールブロック)のインデックス設定領域に設定されている全てのインデックスをメモリ12B上の別領域に記憶させる(退避させる)と共に、前記コントロールブロックの情報からインデックス設定領域を除去し、同一レコード・同一セグメントに対応する第2階層のコントロールブロックを指し示すポインタ情報をヘッダ情報設定領域に設定することで、最初に読み出されたコントロールブロックをルートのブロック(第1階層のブロック)に相当するフォーマットへ変更し、ステップ254へ移行する。
ステップ254では、口座情報第2DBに追加登録するコントロールブロックの情報をメモリ12B上で生成する。なお、追加登録するコントロールブロックのインデックス設定領域には、少なくとも今回の登録対象情報のインデックスが設定されるが、ステップ252の処理が行われた場合、インデック設定領域には、ステップ252でメモリ12B上の別領域に退避させたインデックスを含む各インデックスが日付の昇順に設定される。そしてステップ256では、登録対象DBの物理DB名として口座情報第2DBの物理DB名を、登録対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を設定すると共に、登録対象情報のキー情報としてコントロールブロックのキー情報を設定し、これらの情報をパラメータとしてDB制御部へ引き渡すと共に、ステップ254で生成した追加登録対象のコントロールブロック(新たに最終のコントロールブロックとなるコントロールブロック)の情報をDB制御部へ転送することで、少なくとも今回の登録対象情報のインデックスを設定したコントロールブロックを、DB制御部によって口座情報第2DBへルートセグメントの情報として追加登録させ、ステップ258へ移行する。
ステップ258では、ステップ226でメモリ12Bに一時記憶させたコントロールブロック(ルートのコントロールブロック)の情報が更新されたか否か判定する。この判定は、上記のコントロールブロックに対して最終通番の更新もインデックス設定領域へのインデックスの追加も行われていない場合には否定されると共に、上記のコントロールブロックに対してインデックス設定領域へのインデックスの追加等が行われたものの、今回の登録対象情報のセグメントに対応するコントロールブロックの数が1つであるために、既に先のステップ248で上記のコントロールブロックの上書き登録が行われていた場合にも否定されるが、ブロック化エリアが追加登録されたもののコントロールブロックへのインデックスの追加登録が行われなかった場合(ステップ244の判定が肯定された場合)や、ステップ252で上記のコントロールブロックが階層化されたコントロールブロック群におけるルートブロックに相当するフォーマットへ変更された場合には肯定される。
上記の判定が否定された場合は何ら処理を行うことなく情報登録処理を終了するが、ステップ258の判定が肯定された場合はステップ260へ移行し、登録対象DBの物理DB名として口座情報第2DBの物理DB名を、登録対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を、登録対象情報のキー情報としてコントロールブロックのキー情報を各々設定し、これらの情報をパラメータとしてDB制御部へ引き渡すと共に、メモリ12Bに一時記憶しているコントロールブロックの情報をDB制御部へ転送することで、DB制御部によって口座情報第2DBに登録されているルートのコントロールブロックの情報を上書き登録させた後に情報登録処理を終了する。そして、アプリケーション制御処理のステップ154(図6)へ移行し、登録対象情報の登録が完了したことをDB操作アプリケーション部へ通知し(図12のステップ120も参照)、アプリケーション制御処理を終了する。
続いて、図7のステップ206におけるレコード分割・登録処理について簡単に説明する。特定レコードの第3階層のコントロール分割対象でない特定セグメントのオカレンスの登録が指示されたものの、口座情報第1DBに既登録の特定セグメントに対応するオカレンスの数が所定値以上の場合(図7のステップ202の判定が肯定された場合)には、口座情報第1DBに登録されている特定レコードの規模がかなり大きくなっているので、特定レコードへのアクセス時に多数回のI/Oが必要となる可能性が高く、口座情報第1DBへのオカレンスの追加登録をこのまま継続すると、状況は更に悪化すると判断できる。このため、ステップ202の判定が肯定された場合はステップ206へ移行し、特定レコードの特定セグメントのオカレンスをブロック化して口座情報第2DBに記憶させるレコード分割・登録処理が行われる。
このレコード分割・登録処理では、まず通番「0001」のブロック化エリアの情報をメモリ12B上で生成した後に、口座情報第1DBに登録されている特定レコードの特定セグメントのオカレンスを順に読み出しながら、読み出したオカレンスをメモリ12B上のブロック化エリアのオカレンス設定領域に設定し、かつ対応するインデックスをメモリ12B上の所定領域に順次記憶させ、オカレンス設定領域に新たなオカレンスを登録可能な空き領域が無くなる毎に、メモリ12B上のブロック化エリアを口座情報第2DBに新規登録すると共に、次の通番のブロック化エリアの情報をメモリ12B上で生成することを、特定レコードの特定セグメントの全てのオカレンスの読み出しが完了する迄繰り返す。そして、最後のオカレンスが設定されたブロック化エリアも口座情報第2DBに新規登録させる。
次に、メモリ12B上の所定領域に記憶させたインデックスの数を計数し、インデックスの数に応じた数のコントロールブロックの情報をメモリ12B上で生成し、メモリ12B上の所定領域に記憶させたインデックスを、生成したコントロールブロックのうちルートブロック以外のコントロールブロックのインデックス設定領域に順に設定した後に、これらのコントロールブロックを口座情報第2DBに新規登録させる。そして、特定レコードのうち、特定セグメントよりも1階層上位でかつ特定セグメントと関連するセグメントの情報の口座情報第1DBからの読み出しを指示し、読み出された情報のヘッダに分割定義情報を設定し、口座情報第1DBへの上書き登録を指示する。これにより、以後の処理では特定レコードの特定セグメントがコントロール分割対象のセグメントとして扱われることになり、特定セグメントのオカレンスは口座情報第2DBに登録されることになる。なお、上述したステップ206の処理は請求項8に記載の登録制御手段に対応している。
続いて、アプリケーション制御処理のうち、口座情報DBからの情報の読み出しがDB操作アプリケーション部より指示された場合の処理を説明する。指示されたアクセスが情報の読み出しである場合には、ステップ150からステップ156へ移行し、前述したステップ200と同様に、読出対象情報のセグメントの1階層上位で前記セグメントと関連するセグメントのヘッダに設定される分割定義情報を参照することで、読出対象の情報のセグメントがコントロール分割対象のセグメントか否かを判定する。
読出対象情報がルートセグメント又は第2階層セグメントの情報である場合、或いは読出対象情報が第3階層セグメントの情報であるものの当該セグメントがコントロール分割対象でない場合には、上記判定が否定されてステップ158へ移行し、DB操作アプリケーション部から通知された論理DB名を口座情報第1DBの物理DB名へ変換してDB制御部へ引き渡すことで、DB制御部に対し、口座情報第1DBから読出対象の情報を読み出すよう指示する。そして、DB制御部から読出完了が通知されるとステップ170へ移行し、DB操作アプリケーション部に対して読み出し完了を通知すると共にDB制御部によって口座情報DB(の口座情報第1DB)から読み出された情報をDB操作アプリケーション部へ転送し、処理を終了する。このように、読出対象情報がコントロール分割対象のセグメントの情報でない場合には、従来通り口座情報第1DBに対して情報の読み出しが行われる。
一方、口座情報DBからの取引明細(第3階層のコントロール分割対象セグメントのオカレンス)の読み出しが要求された等の場合には、図13のステップ130〜ステップ139に示すように、DB操作アプリケーション部により、ルートセグメント及び第2階層セグメントの情報の読み出しが順次指示された後に、口座情報DBからの取引明細(第3階層のコントロール分割対象セグメントのオカレンス)の読み出しが指示される(図13のステップ140)。この場合、前述のステップ156の判定が肯定されてステップ160へ移行し、DB操作アプリケーション部から通知された論理DB名を口座情報第2DBの物理DB名へ変換すると共に、コントロール分割対象のセグメントに対応するルートセグメントのキー情報、第2階層セグメントのキー情報及び通番「0000」を羅列したキー情報を生成し、読出対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を設定し、これらの情報をパラメータとしてDB制御部へ引き渡すことで、読出対象オカレンスのセグメントに対応するコントロールブロックの口座情報第2DBからの読み出しをDB制御部へ指示する(図13のステップ141も参照)。
これにより、DB制御部によって、読出対象オカレンスのセグメント(コントロール分割対象のセグメント)に対応するコントロールブロック(このコントロールブロックが階層化されている場合にはルートブロックに相当するコントロールブロック)が口座情報第2DBから読み出され、読み出された情報がDB制御部から転送されると共に、DB制御部から読出完了が通知される(図13のステップ142,143も参照)。
読出完了が通知されるとステップ162へ移行し、読み出されたコントロールブロックの情報に読出対象の取引明細(オカレンス)のインデックスが設定されているか否か判定する。取引明細の読み出しに際しては、読出対象の取引明細の日付又は日付の範囲が指定されるか、又は読出対象が全ての取引明細であることを表す情報が設定される。全ての取引明細が読出対象の場合は上記判定が無条件で肯定される(この場合、読出開始通番として先頭通番「0001」が、読出終了通番として最終通番が各々設定され、対応する全てのブロック化エリアが先頭通番のブロック化エリアから順に読み出される)が、読出対象の取引明細の日付が指定された場合、ステップ162の判定は、指定された日付のインデックスがインデックス設定領域に設定されたコントロールブロック、及び指定された日付の次の日付のインデックスがインデックス設定領域に設定されたコントロールブロックが読み出される迄否定され、読出対象の取引明細の日付範囲が指定された場合、ステップ162の判定は、指定された日付範囲の先頭の日付のインデックスがインデックス設定領域に設定されたコントロールブロック、及び指定された日付範囲の末尾に相当する日付の次の日付のインデックスがインデックス設定領域に設定されたコントロールブロックが各々読み出される迄否定される。
ステップ162の判定が否定された場合はステップ164へ移行し、DB制御部に対して同一レコードかつ同一セグメントに対応する次のコントロールブロック(ステップ160の読出指示に従いDB制御部から読み出されたコントロールブロックのヘッダ情報設定領域に設定されているポインタ情報が指し示すコントロールブロック)の読み出しを指示する。そして、DB制御部による該当するコントロールブロックの情報が読み出しが完了するとステップ162に戻り、ステップ162の判定が再度行われる。このように、ステップ164はステップ162の判定が肯定される迄繰り返されるので、読出対象の取引明細に対応するインデックスが設定されているコントロールブロックが探索される。
そして、読出対象の取引明細の日付が指定された場合には、ステップ162の判定が肯定されると、読出開始通番として指定された日付のインデックスに設定されている通番を、読出終了通番として指定された日付の次の日付のインデックスに設定されている通番を各々設定した後にステップ166へ移行し、読出対象の取引明細の日付範囲が指定された場合には、ステップ162の判定が肯定されると、読出開始通番として指定された日付範囲の先頭の日付のインデックスに設定されている通番を、読出終了通番として指定された日付範囲の末尾に相当する日付の次の日付のインデックスに設定されている通番を各々設定した後にステップ166へ移行する。
ステップ166では読出対象DBの物理DB名として口座情報第2DBの物理DB名を、読出対象情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を設定すると共に、読出対象情報のキー情報として、ルートセグメントのキー情報、第2階層セグメントのキー情報、及び先に設定した読出開始通番を羅列したキー情報を設定し、これらの情報をパラメータとしてDB制御部へ引き渡すことで、該当する情報を口座情報第2DBから読み出すようDB制御部へ指示する(図13のステップ144も参照)。これにより、DB制御部によって該当するブロック化エリア(読出対象の取引明細が登録されたブロック化エリア)が読み出され、読み出されたブロック化エリアの情報がDB制御部から転送されると共に、読出完了がDB制御部から通知される(図13のステップ145、146も参照)。
読出完了が通知されるとステップ168へ移行し、ブロック化エリアの読み出しを先に設定した読出終了通番まで行ったか否か判定する。判定が否定された場合はステップ166読出対象の取引明細を全て読み出したか否か判定する。判定が否定された場合はステップ166に戻り、先にDB制御部へ引き渡した読出対象情報のキー情報に含まれる通番を1だけインクリメントし、次のブロック化エリアの口座情報第2DBからの読み出しをDB制御部へ指示する。このように、ステップ168の判定が肯定される迄の間、ステップ166の処理が繰り返されることで、読出対象の取引明細が口座情報第2DBから全て読み出されることになる。そして、ステップ168の判定が肯定されると、DB制御部によって読み出されたブロック化エリアのオカレンス設定領域から、読出対象の取引明細(オカレンス)を抽出した後にステップ170へ移行し、DB操作アプリケーション部に対して読み出し完了を通知すると共に抽出した読出対象の取引明細をDB操作アプリケーション部へ転送し、処理を終了する(図13のステップ147も参照)。上述したステップ156〜ステップ170は本発明に係る読出制御手段(詳しくは請求項7に記載の読出制御手段)に対応している。
なお、口座情報DBに対する情報の更新が指示されるときには、その直前に更新対象情報の読み出しが指示され、この指示に従って更新対象情報の読み出しが行われているので、口座情報DBにおける更新対象情報の格納位置は既知の状態となっている。このため、指示されたアクセスが情報の更新であればステップ150からステップ172へ移行し、DB操作アプリケーション部から転送された更新情報をDB制御部へ転送すると共に、前回の情報読み出し時(更新対象情報の読み出し時)と同一のパラメータ(物理DB名、セグメント名、キー情報)を設定し、このパラメータに該当する情報(更新対象情報)を更新情報で上書きするようDB制御部へ指示する。これにより、DB制御部により口座情報DB(口座情報第1DB又は口座情報第2DB)に記憶されている更新対象情報が、DB操作アプリケーション部からアプリケーション制御部を経由して転送された更新情報で上書き更新されることになる。アプリケーション制御部では、DB制御部から更新完了が通知されるとステップ174へ移行し、DB操作アプリケーション部に対して更新完了を通知して処理を終了する。
このように、本実施形態では、コントロール分割対象のセグメントの取引明細(オカレンス)を読み出す際に、まずコントロールブロックに登録されているインデックスを読み出し、読出対象の取引明細が登録されているブロック化エリアの通番を認識した後に、読出対象の取引明細を読み出す必要がある。しかし、本実施形態に係るインデックスは日付と通番から成る12バイト程度の情報であるので、コントロールブロックには多数のインデックスを登録可能であり、コントロール分割対象のセグメントの情報として登録されている多数の取引明細の中から特定日付の取引明細を読み出す場合にも、インデックスの読み出しのために必要なI/Oの回数は1〜数回程度で済む。また、読み出したインデックスに基づいて読出対象の取引明細が登録されたブロック化エリアの通番を認識できるので、インデックスを読み出した後は必要最小限のI/O回数で読出対象の取引明細を読み出すことができ、取引明細自体の列(オカレンス自体の列)を順に参照して目的の取引明細を探索する場合と比較してI/O回数は大幅に削減される。
また、個々のブロック化エリアには同一レコードかつ同一セグメントのオカレンス(取引明細)のみが日付順に複数登録されると共に、同一レコードかつ同一セグメントに対応するブロック化エリアには「0001」を初期値とする通番が付与されるので、特定レコードの特定セグメントの取引明細を全数読み出すことも、対応するコントロールブロックの情報を読出して最終通番を認識した後に、対応するブロック化エリアを通番0001から認識した最終通番まで順に読み出すことで行うことができる。従って、処理が簡単になると共に、対応するブロック化エリアには読出対象の取引明細のみが格納されているので、I/O回数も必要最小限となる。更に、本実施形態では第2ストレージ16の記憶領域を、コントロールブロックを登録するための記憶領域とブロック化エリアを登録するための記憶領域に区画し、コントロールブロックとブロック化エリアを異なる記憶領域に登録しているので、上述したI/O回数削減との相乗効果によりデッドロックの発生を抑制できると共に、データベースへのアクセス要求に対するシステムのレスポンスの悪化を抑制することができる。
なお、上記では本発明に係るデータベースの一例として、各レコードの情報が3階層に分離された論理構造のデータベースを説明したが、これに限定されるものではなく、より多数の階層に分離された論理構造であってもよい。
また、上記では特定金融機関の各支店に設置されたATM22及び営業店端末24が、同一の支店に設置されたブランチ・サーバ20と接続されている構成のコンピュータ・システム10を例に説明したが、各支店にブランチ・サーバ20を設置することに代えて情報センタ等にサーバを集中配置し、各支店に設置されたATM22及び営業店端末24が集中配置したサーバに接続される構成を採用してもよい。
また、上記では本発明に係るデータベースの一例として、顧客が特定金融機関に開設した口座に関する情報を登録・管理するための口座情報DBを説明したが、本発明は階層型のデータベースであれば適用可能であり、データベースに登録される情報は上記に限定されるものではない。