ところで、階層型データベースでは、情報の読み出し及び書き込みがセグメントを単位として行われるが、情報の読み出しにおける起点は常にルートセグメントであり、例えば読出対象情報のセグメントが従属階層(第2階層又はそれよりも低い階層)のセグメントであったとしても、読出対象情報の読み出しは、ルートセグメントから読出対象情報のセグメントに至る経路上の各セグメントの情報が、個々の情報に各々設定されたポインタ情報に基づいて順に読み出されることで行われる。また、階層型データベースにおいて、同一セグメントに複数のオカレンスが存在していた場合、この複数のオカレンスのうちの何れか1つの特定オカレンスのポインタ情報のみが1階層上位のセグメントの情報に設定され(1階層上位のセグメントとリンク付けされ)、他のオカレンスは特定オカレンスからディジーチェーンのように数珠繋ぎにリンク付けされる。このため、例えば読出対象のセグメントが従属セグメントで、この読出対象のセグメントに複数のオカレンスが存在しており、このうちの何れかのオカレンスが読出対象情報である場合、読出対象情報の読み出しは、ルートセグメントから読出対象のセグメントに至る経路上の各セグメントの情報を順に読み出すことで特定オカレンス(1階層上位のセグメントと直接リンク付けされたオカレンス)に到達した後に、この特定オカレンスから数珠繋ぎに関連付けられた各オカレンスを順に辿っていく(情報を順に読み出していく)ことによって成される。
データベースを記憶する記憶装置は、論理的な入出力の単位(CI:Control Intervalという)が定められており、このCIは階層型データベースにおける個々のセグメントの数個分程度のサイズとされ、記憶装置の記憶領域は多数個のCI(単位領域)に区画されているが、上記のように読出対象のレコードの第2階層以下の階層のセグメントに多数のオカレンスが存在しており、この多数のオカレンスのうちの何れかを読み出す場合、読出対象のオカレンスが読み出される迄に、ルートセグメントの情報が格納されている単位領域を始めとして多数の単位領域にアクセスして情報を読み出す必要があるので、I/Oの回数(読み出すべき単位領域の数)が大幅に増大し、読出対象の情報の読み出しが完了する迄に長い時間がかかることになる。そして、データベースに登録されている各レコードの多数(或いは殆ど)が上記のように多数のオカレンスが存在しているレコードであった場合、データベースへのアクセス要求に対するシステムのレスポンスが悪化するという問題がある。
一例として、第3階層の特定セグメントに500個のオカレンスが存在しているレコードから、特定セグメントの500個のオカレンスのうちの任意のオカレンスを読み出す場合、個々の単位領域のサイズが8kバイト、個々のオカレンスのサイズが1kバイト(すなわち、単一の単位領域に格納可能なオカレンスの数を8個)とすると、特定セグメントの500個のオカレンスは最小でも(個々の単位領域に詰めて格納されていたとしても)63個の単位領域に分けて格納されることになる。このため、読出対象のオカレンスが特定セグメントの500個のオカレンスの列の最後に繋がれていた場合、ルートセグメントの情報及び特定セグメントと関連付けられた第2階層のセグメントの情報が単一の単位領域に格納されていたとしても、I/Oの回数は最小で1+63=64回となる(500÷8=62.5≒63)。また、特定セグメントの個々のオカレンスが互いに異なるタイミングでデータベースに追加登録される等の場合には、500個のオカレンスがより多数個の単位領域にとびとびに格納される可能性が高く、I/Oの回数は更に増大する。
また、データベースに対する情報の読み出しや更新等のアクセスを複数のプロセスが並列に実行する環境では、単一の単位領域に対して複数のプロセスが同時にアクセスすることで、前記単位領域に格納されている情報に矛盾が生ずることを避けるために、個々のプロセスは、処理対象の単位領域をロックする(他のプロセスが処理対象の単位領域にアクセスすることを禁止する)排他制御を行う必要がある。この場合、或るプロセスが、第1の単位領域をロックしてアクセスし、続いて第2の単位領域をロックしてアクセスする処理を行うときに、別のプロセスにより、第2の単位領域をロックしてアクセスし、続いて第1の単位領域をロックしてアクセスする処理が同タイミングで行われると、双方のプロセスが共に相手のプロセスによって処理対象の単位領域に対するロックが解除されるのを待っている状態、すなわちデッドロックが発生する。
前述のように、第2階層以下の階層のセグメントに多数のオカレンスが存在しているレコードに対するアクセスでは、多数の単位領域がアクセスされることが多いので、登録されているレコードの多数(或いは殆ど)が上記のようなレコードであるデータベースではデッドロックが発生し易いという問題もある。
本発明は上記事実を考慮して成されたもので、データベースへのアクセス要求に対するシステムのレスポンスの悪化及びデッドロックの発生を抑制できるデータベース管理装置及びデータベース管理プログラムを得ることが目的である。
上記目的を達成するために請求項1記載の発明に係るデータベース管理装置は、 記憶領域が入出力の論理的単位としての多数個の単位領域に区画され、互いに異なるカテゴリの情報を設定するための複数セグメントが、ルートセグメントを起点として階層的に関連付けられた論理構造に従い、個々のレコードの情報が、何れかのセグメントに対応する情報を単位として分離されると共に、単一のセグメントに対応する情報として必要に応じて複数のオカレンスが生成され、1階層下位に関連するセグメントが存在するセグメントの情報に、前記1階層下位でかつ関連する単一の特定セグメントの情報又は該単一の特定セグメントの単一の特定オカレンスの格納位置を指し示すポインタ情報が設定され、前記特定セグメントに複数のオカレンスが存在している場合には、該複数のオカレンスに、前記特定オカレンスを先頭として、何れかのオカレンスの格納位置を指し示すポインタ情報が順に設定されるデータベースを記憶するための第1記憶手段と、任意のレコードの任意のセグメントの情報の前記データベースへの登録が指示される毎に、前記登録対象の情報がルートセグメントの情報である場合は、所定の選択基準に従い登録対象の情報を登録可能な空き領域が生じている単位領域を選択する一方、前記登録対象の情報が従属セグメントの情報である場合は、前記登録対象の情報と同一レコードに属し、前記データベースに既に登録され、かつ、前記登録対象の情報の格納位置を指し示す前記ポインタ情報の設定対象の特定の情報が格納されている特定単位領域に前記登録対象の情報を登録可能な空き領域があれば当該特定単位領域を選択し、前記特定単位領域に前記空き領域が無ければ前記登録対象の情報を登録可能な空き領域が有る単位領域を一定のロジックに従って選択し、選択した単位領域に前記登録対象の情報を登録すると共に、前記登録対象の情報が従属セグメントの情報である場合は前記特定の情報に前記ポインタ情報を設定する登録手段と、前記データベースからの任意のレコードの任意のセグメントの情報の読み出しが指示される毎に、前記ポインタ情報に基づいて読出対象の情報が登録されている単位領域を判断し、判断した単位領域の情報を前記データベースから読み出し、読み出した情報に含まれる読出対象の情報を出力する読出手段と、記憶領域が多数個の単位領域に区画された第2記憶手段と、前記論理構造において前記第1記憶手段に情報を登録すべき階層と前記第2記憶手段に情報を登録すべき階層の境界を規定する第1の分割条件情報を記憶する第1条件情報記憶手段と、任意のレコードの任意のセグメントの情報の登録が指示された場合に、前記第1条件情報記憶手段に記憶されている第1の分割条件情報に基づいて前記登録対象の情報が前記第2記憶手段へ登録すべき情報か否かを判定し、前記登録対象の情報が前記第2記憶手段へ登録すべき情報である場合には、前記登録対象の情報を前記登録手段によって前記第2記憶手段の特定単位領域に登録させると共に、前記第2記憶手段の前記特定単位領域を識別するための識別情報を含み前記登録対象の情報のうち前記登録が指示された情報本体を除去するか又は情報本体の一部を抽出した要約情報を加えた前記登録対象の情報のインデックス情報を、前記登録手段によって前記第1記憶手段に登録させる第1登録制御手段と、任意のレコードの任意のセグメントの情報の読み出しが指示された場合に、前記第1条件情報記憶手段に記憶されている第1の分割条件情報に基づいて前記読出対象の情報が前記第2記憶手段に登録されているか否かを判定し、前記読出対象の情報が前記第2記憶手段に登録されている場合には、前記読出対象の情報のインデックス情報を前記読出手段によって前記第1記憶手段から読み出させた後に、読み出された前記インデックス情報に含まれる前記識別情報を用いて前記読出対象の情報を前記読出手段によって前記第2記憶手段から読み出させ、読み出された読出対象の情報を出力する第1読出制御手段と、を備えている。
請求項1記載の発明に係るデータベース管理装置は、記憶領域が入出力の論理的単位としての多数個の単位領域(CI)に区画された第1記憶手段を備えており、この第1記憶手段には、互いに異なるカテゴリの情報を設定するための複数セグメントが、ルートセグメントを起点として階層的に関連付けられた論理構造に従い、個々のレコードの情報が、何れかのセグメントに対応する情報を単位として分離されると共に、単一のセグメントに対応する情報として必要に応じて複数のオカレンスが生成され、1階層下位に関連するセグメントが存在するセグメントの情報に、1階層下位でかつ関連する単一の特定セグメントの情報又は該単一の特定セグメントの単一の特定オカレンスの格納位置を指し示すポインタ情報が設定され、特定セグメントに複数のオカレンスが存在している場合には、該複数のオカレンスに、前記特定オカレンスを先頭として、何れかのオカレンスの格納位置を指し示すポインタ情報が順に設定されるデータベースが記憶される。
また、請求項1記載の発明に係るデータベース管理装置は、任意のレコードの任意のセグメントの情報のデータベースへの登録が指示される毎に、登録手段により、登録対象の情報がルートセグメントの情報である場合は、所定の選択基準に従い登録対象の情報を登録可能な空き領域が生じている単位領域が選択される一方、登録対象の情報が従属セグメントの情報である場合は、登録対象の情報と同一レコードに属し、データベースに既に登録され、かつ、登録対象の情報の格納位置を指し示すポインタ情報の設定対象の特定の情報(1階層上位でかつ関連するセグメントの情報、或いは1階層上位の同一セグメントと関連する同一階層の他のオカレンスの情報)が格納されている特定単位領域に登録対象の情報を登録可能な空き領域があれば当該特定単位領域が選択され、特定単位領域に前記空き領域が無ければ登録対象の情報を登録可能な空き領域が有る単位領域が一定のロジックに従って選択され、選択された単位領域に登録対象の情報を登録すると共に、登録対象の情報が従属セグメントの情報である場合は前記特定の情報にポインタ情報が設定される。これにより、ルートセグメント以外のセグメント(従属セグメント)の情報については、個々の情報に設定されているポインタ情報に基づいて、ルートセグメントを起点にして順に辿っていく(情報を順に読み出していく)ことで、従属セグメントの情報が登録されている単位領域を特定することができる。
なお、請求項1記載の発明において、登録手段は、例えば請求項4に記載したように、登録対象の情報がルートセグメントの情報である場合に、該ルートセグメントに付与されたキー情報から一意に特定される第1の単位領域に登録対象のルートセグメントの情報を登録可能な空き領域が有るか否かを判断し、空き領域があれば登録対象のルートセグメントの情報を第1の単位領域に登録し、空き領域が無い場合には、所定の選択基準に従い登録対象のルートセグメントの情報を登録可能な空き領域が生じている第2の単位領域を選択し、選択した第2の単位領域に登録対象のルートセグメントの情報を登録すると共に、登録対象のルートセグメントの情報の登録位置が第2の単位領域であることを表すルート登録先情報を第1の単位領域に設定するように構成することができる。これにより、データベースに登録されているルートセグメントの情報については、当該ルートセグメントに付与されたキー情報(及び第1の単位領域に登録されたルート登録先情報)に基づいて、当該情報が登録されている単位領域を特定することができる。
そして、請求項1記載の発明に係るデータベース管理装置では、データベースからの任意のレコードの任意のセグメントの情報の読み出しが指示される毎に、読出手段により、キー情報又はポインタ情報に基づいて読出対象の情報が登録されている単位領域が判断され、判断された単位領域の情報がデータベースから読み出され、読み出された情報に含まれる読出対象の情報が出力される。
ここで、上記構成では、従属セグメントの情報が登録されている単位領域を特定するために、前述したように、個々の情報に設定されているポインタ情報に基づいて、ルートセグメントを起点にして順に辿っていく(情報を順に読み出していく)必要があるので、アクセス対象のレコードが第2階層以下の階層に多数のセグメント又はオカレンスが存在しているレコードであった場合にはI/O回数が大幅に増大する可能性が高く、データベースへのアクセスを複数のプロセスが並列に実行する環境下で、データベースに登録されているレコードの多数(或いは殆ど)が上記のようなレコードであったとすると、デッドロックが発生する恐れもある。
これに対して請求項1記載の発明では、記憶領域が多数個の単位領域に区画された第2記憶手段と、(データベースの)論理構造において第1記憶手段に情報を登録すべき階層と第2記憶手段に情報を登録すべき階層の境界を規定する第1の分割条件情報を記憶する第1条件情報記憶手段が設けられている。なお、第1条件情報記憶手段に記憶する第1の分割条件情報は、例えば請求項2に記載したように、情報を登録すべき記憶手段を相違させる階層の境界が、単一のレコードの情報として他の階層よりも多数のオカレンスがデータベースに登録される階層とその上位階層との境界に一致するように定めることができる。
そして、請求項1記載の発明に係る第1登録制御手段は、任意のレコードの任意のセグメントの情報の登録が指示された場合に、第1条件情報記憶手段に記憶されている第1の分割条件情報に基づいて登録対象の情報が第2記憶手段へ登録すべき情報か否かを判定し、登録対象の情報が第2記憶手段へ登録すべき情報である場合には、登録対象の情報を登録手段によって第2記憶手段の特定単位領域に登録させると共に、第2記憶手段の特定単位領域を識別するための識別情報を含み登録対象の情報のうち登録が指示された情報本体を除去するか又は情報本体の一部を抽出した要約情報を加えた登録対象の情報のインデックス情報を登録手段によって第1記憶手段に登録させる。なお、上記の識別情報としては、登録対象の情報のキー情報を用いることができる。この場合、第2記憶手段への登録対象の情報の登録に際し、上記のキー情報を用いて一意に特定できる第2記憶手段の特定単位領域へ登録対象の情報を登録させるようにすればよい。
また、請求項1記載の発明に係る第1読出制御手段は、任意のレコードの任意のセグメントの情報の読み出しが指示された場合に、第1条件情報記憶手段に記憶されている第1の分割条件情報に基づいて読出対象の情報が第2記憶手段に登録されているか否かを判定し、読出対象の情報が第2記憶手段に登録されている場合には、読出対象の情報のインデックス情報を読出手段によって第1記憶手段から読み出させた後に、読み出されたインデックス情報に含まれる識別情報を用いて読出対象の情報を読出手段によって第2記憶手段から読み出させ、読み出された読出対象の情報を出力する。これにより、情報の読み出しを指示するにあたり、読出対象の情報が何れの記憶手段に記憶されているかを認識する必要がなくなる。
このように、請求項1記載の発明では、読出対象の情報が第2記憶手段に記憶されている情報である場合、まず第1記憶手段に記憶されている読出対象の情報のインデックス情報を第1記憶手段から読み出した後に、該インデックス情報に設定されているキー情報を用いて第2記憶手段に記憶されている読出対象の情報を第2記憶手段から読み出す必要がある。しかし、請求項1記載の発明に係るインデックス情報は、識別情報を含む一方で登録対象の情報のうちの情報本体が除去又は要約情報へ圧縮されているので元の情報よりもサイズが小さく、第1記憶手段に元の情報を格納する場合と比較して、単一の単位領域により多数のインデックス情報が格納できる。また、登録手段は、登録対象の情報が従属セグメントの情報である場合に、登録対象の情報と同一レコードに属し、データベースに既に登録され、かつ、登録対象の情報の格納位置を指し示すポインタ情報の設定対象の特定の情報が格納されている特定単位領域に登録対象の情報を登録可能な空き領域があれば、当該特定単位領域に登録対象の情報を登録するので、同一レコードに属し同一のセグメントに対応する複数のオカレンスのインデックス情報は、高い確率で同一の単位領域に格納される。そして、読出対象の情報が、同一セグメントの多数のオカレンスのうちの1つである場合、請求項1記載の発明では、従来のように多数のオカレンスの情報本体を辿っていくことに代えて、よりサイズの小さいインデックス情報を辿っていき、読出対象の情報のインデックス情報が出現すると、当該インデックス情報に設定されている識別情報を用いて第2記憶手段から読出対象の情報本体を読み出すことになるので、読出対象の情報の読み出しに際してのI/Oの回数が削減される。
例えば前述のように、第3階層の特定セグメントに500個のオカレンスが存在しているレコードから、特定セグメントの500個のオカレンスのうち列の最後に繋がれているオカレンスを読み出す場合、従来は、個々の単位領域のサイズが8kバイト、個々のオカレンスのサイズが1kバイト(単一の単位領域に格納可能なオカレンスの数が8個)であれば、I/Oの回数は最小で1+63=64回となる。一方、請求項1記載の発明に係るインデックス情報のサイズが30バイトであれば、単一の単位領域に最大266個のインデックス情報を格納できるので、特定セグメントの500個のオカレンスに対応する500個のインデックス情報は最小で(個々の単位領域に同一レコードのインデックス情報が詰めて格納されていたとすると)2個の単位領域に収まる。従って、請求項1記載の発明を適用した場合の最小のI/Oの回数は、ルートセグメント及び第2階層のセグメントの情報読み出しのためのI/Oの回数が1回、インデックス情報読み出しのためのI/Oの回数が2回、読出対象情報の読み出しのためのI/Oの回数が1回で合計4回となり、従来よりも大幅に少ないI/O回数で読出対象の情報を読み出すことができる。
なお、上記の例は同一レコードのインデックス情報が同一の単位領域に詰めて格納されていた場合であり、実際のデータベースでは同一レコードのインデックス情報が必ずしも同一の単位領域に詰めて格納されるとは限らないが、インデックス情報は情報本体よりもサイズが小さいので、同一レコードの各情報が互いに異なるタイミングでデータベースに追加登録される等の場合にも、同一レコードのインデックス情報が同一の単位領域に格納されている確率は高く、読出対象の情報の読み出しに際してのI/O回数は従来よりも大幅に削減される。従って、請求項1記載の発明によれば、データベースへのアクセスにおけるI/O回数を削減することができ、データベースへのアクセス要求に対するシステムのレスポンスの悪化を抑制できると共に、これに伴ってデッドロックの発生も抑制することができる。
なお、請求項1記載の発明において、第2記憶手段には、複数階層に亘るセグメントの情報を登録するようにしてもよく、この場合、第1登録制御手段は、第2記憶手段に登録すべき全ての情報について、対応するインデックス情報を第1記憶手段に登録させるようにしてもよいが、例えば請求項3に記載したように、登録対象の情報が第2記憶手段へ登録すべき情報である場合に、登録対象の情報のセグメントが第2記憶手段に情報を登録すべき階層のうちの最上位階層に相当するセグメントであるときには、登録対象の情報を登録手段によって第2記憶手段にルートセグメントの情報として登録させると共に、登録対象の情報のインデックス情報を登録手段によって第1記憶手段に登録させ、登録対象の情報のセグメントが第2記憶手段に情報を登録すべき階層のうちの最上位階層に相当するセグメントでないときには、登録対象の情報のインデックス情報を第1記憶手段に登録させることなく、登録対象の情報を登録手段によって第2記憶手段に従属セグメントの情報として登録させるようにしてもよい。
請求項5記載の発明に係るデータベース管理プログラムは、記憶領域が入出力の論理的単位としての多数個の単位領域に区画され、互いに異なるカテゴリの情報を設定するための複数セグメントが、ルートセグメントを起点として階層的に関連付けられた論理構造に従い、個々のレコードの情報が、何れかのセグメントに対応する情報を単位として分離されると共に、単一のセグメントに対応する情報として必要に応じて複数のオカレンスが生成され、1階層下位に関連するセグメントが存在するセグメントの情報に、前記1階層下位でかつ関連する単一の特定セグメントの情報又は該単一の特定セグメントの単一の特定オカレンスの格納位置を指し示すポインタ情報が設定され、前記特定セグメントに複数のオカレンスが存在している場合には、該複数のオカレンスに、前記特定オカレンスを先頭として、何れかのオカレンスの格納位置を指し示すポインタ情報が順に設定されるデータベースを記憶するための第1記憶手段と、記憶領域が多数個の単位領域に区画された第2記憶手段と、前記論理構造において前記第1記憶手段に情報を登録すべき階層と前記第2記憶手段に情報を登録すべき階層の境界を規定する第1の分割条件情報を記憶する第1条件情報記憶手段と、を備えたコンピュータを、任意のレコードの任意のセグメントの情報の前記データベースへの登録が指示される毎に、前記登録対象の情報がルートセグメントの情報である場合は、所定の選択基準に従い登録対象の情報を登録可能な空き領域が生じている単位領域を選択する一方、前記登録対象の情報が従属セグメントの情報である場合は、前記登録対象の情報と同一レコードに属し、前記データベースに既に登録され、かつ、前記登録対象の情報の格納位置を指し示す前記ポインタ情報の設定対象の特定の情報が格納されている特定単位領域に前記登録対象の情報を登録可能な空き領域があれば当該特定単位領域を選択し、前記特定単位領域に前記空き領域が無ければ前記登録対象の情報を登録可能な空き領域が有る単位領域を一定のロジックに従って選択し、選択した単位領域に前記登録対象の情報を登録すると共に、前記登録対象の情報が従属セグメントの情報である場合は前記特定の情報に前記ポインタ情報を設定する登録手段、前記データベースからの任意のレコードの任意のセグメントの情報の読み出しが指示される毎に、前記ポインタ情報に基づいて読出対象の情報が登録されている単位領域を判断し、判断した単位領域の情報を前記データベースから読み出し、読み出した情報に含まれる読出対象の情報を出力する読出手段、任意のレコードの任意のセグメントの情報の登録が指示された場合に、前記第1条件情報記憶手段に記憶されている第1の分割条件情報に基づいて前記登録対象の情報が前記第2記憶手段へ登録すべき情報か否かを判定し、前記登録対象の情報が前記第2記憶手段へ登録すべき情報である場合には、前記登録対象の情報を前記登録手段によって前記第2記憶手段の特定単位領域に登録させると共に、前記第2記憶手段の前記特定単位領域を識別するための識別情報を含み前記登録対象の情報のうち前記登録が指示された情報本体を除去するか又は情報本体の一部を抽出した要約情報を加えた前記登録対象の情報のインデックス情報を、前記登録手段によって前記第1記憶手段に登録させる第1登録制御手段、及び、任意のレコードの任意のセグメントの情報の読み出しが指示された場合に、前記第1条件情報記憶手段に記憶されている第1の分割条件情報に基づいて前記読出対象の情報が前記第2記憶手段に登録されているか否かを判定し、前記読出対象の情報が前記第2記憶手段に登録されている場合には、前記読出対象の情報のインデックス情報を前記読出手段によって前記第1記憶手段から読み出させた後に、読み出された前記インデックス情報に含まれる前記識別情報を用いて前記読出対象の情報を前記読出手段によって前記第2記憶手段から読み出させ、読み出された読出対象の情報を出力する第1読出制御手段として機能させる。
請求項5記載の発明に係るデータベース管理プログラムは、上記の第1記憶手段、第2記憶手段及び第1条件情報記憶手段を備えたコンピュータを、上記の登録手段、読出手段、第1登録制御手段及び第1読出制御手段として機能させるためのプログラムであるので、上記のコンピュータが請求項5記載の発明に係るデータベース管理プログラムを実行することにより、上記のコンピュータが請求項1に記載のデータベース管理装置として機能することになり、請求項1記載の発明と同様に、データベースへのアクセス要求に対するシステムのレスポンスの悪化を抑制することができる。
以上説明したように本発明は、任意のレコードの任意のセグメントの情報の登録が指示された場合に、第1記憶手段に情報を登録すべき階層と第2記憶手段に情報を登録すべき階層の境界を規定する第1の分割条件情報に基づいて登録対象の情報が第2記憶手段へ登録すべき情報か否かを判定し、登録対象の情報が第2記憶手段へ登録すべき情報である場合には、登録対象の情報を第2記憶手段の特定単位領域に登録させると共に、第2記憶手段の特定単位領域を識別するための識別情報を含み登録対象の情報のうちの本体情報を除去又は圧縮した登録対象の情報のインデックス情報を第1記憶手段に登録させ、任意のレコードの任意のセグメントの情報の読み出しが指示された場合に、第1の分割条件情報に基づいて読出対象の情報が第2記憶手段に登録されているか否かを判定し、読出対象の情報が第2記憶手段に登録されている場合には、読出対象の情報のインデックス情報を第1記憶手段から読み出させた後に、読み出されたインデックス情報に含まれる識別情報を用いて読出対象の情報を第2記憶手段から読み出させ、読み出された読出対象の情報を出力するので、データベースへのアクセス要求に対するシステムのレスポンスの悪化及びデッドロックの発生を抑制できる、という優れた効果を有する。
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。
図1には本実施形態に係る、特定金融機関に設けられたコンピュータ・システム10が示されている。コンピュータ・システム10は、特定金融機関の情報センタ等に設置されたホスト・コンピュータ12と、特定金融機関内に構築されたコンピュータ・ネットワーク18を含んで構成されている。なお、ホスト・コンピュータ12は請求項5に記載のコンピュータに対応しており、後述する第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は請求項1,5に記載の第1記憶手段に、第2ストレージ16は請求項1,5に記載の第2記憶手段に対応している。
また、ホスト・コンピュータ12の記憶部12Cには、ホスト・コンピュータ12をDB制御部として機能させるためのDB制御プログラム、ホスト・コンピュータ12をアプリケーション制御部として機能させるためのアプリケーション制御プログラム、ホスト・コンピュータ12をDB操作アプリケーション部として機能させるためのDB操作アプリケーション・プログラムが各々記憶されている。なお、上記各プログラムのうち、アプリケーション制御プログラム及びDB制御プログラムは請求項5に記載のデータベース管理プログラムに対応している。また、記憶部12CにはDB分割定義テーブル(詳細は後述)が記憶されている。DB分割定義テーブルは、ホスト・コンピュータ12の電源が投入されると記憶部12Cから読み出されてメモリ12Bに書き込まれることでメモリ12B上に常駐し、後述するアプリケーション制御処理を行うアプリケーション制御部によって参照される。DB分割定義テーブルは請求項1,5に記載の第1の分割条件情報(詳しくは請求項2に記載の第1の分割条件情報)に対応しており、メモリ12Bは請求項1,5に記載の第1条件情報記憶手段に対応している。
一方、コンピュータ・ネットワーク18は、特定金融機関の各支店に各々設置されたブランチ・サーバ20(PC、ワークステーション、大型コンピュータの何れでもよい)が通信回線を介して互いに接続されて構成されており、個々のブランチ・サーバ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制御部による上述した処理は本発明に係る登録手段(詳しくは請求項4に記載の登録手段)に対応している。
口座情報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の回数の大幅な増大を招き、データベース・システムのレスポンスの低下、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階層とその1階層上位の第2階層との境界で分割し、第3階層の情報を口座情報第2DBに登録すると共に、口座情報第2DBに登録した第3階層の情報のインデックス情報を口座情報第1DBに登録することによって上記の問題を解決している(なお、上記のように特定の階層の境界で各レコードを分割し、各々を異なるDBに登録する(異なるストレージに記憶させる)ことをインデックス分割と称する)。
すなわち、記憶部12Cに記憶されているDB分割定義テーブルには、図6(A)に示すように、口座情報第1DBへの登録対象のセグメントとして、口座情報DBの各レコードを構成するルートセグメント、第2階層セグメント及び第3階層セグメントが、セグメント名等の定義情報と対応付けて登録されているが、第3階層セグメントには、インデックス分割の適用を指定する情報(図では「インデックス分割:ON」と表記)と、分割先が口座情報第2DBに登録されるセグメントdであることを指定する情報(図では「分割先:第2DBのセグメントd」と表記)が定義情報に付加されており、更に、セグメントdが口座情報第2DBにルートセグメントとして登録されるセグメントであることを意味する情報も登録されている。
次に、上記のDB分割定義テーブルに従い、アプリケーション制御部によって実行されるアプリケーション制御処理について図7のフローチャートを参照して説明する。なお、このアプリケーション制御処理は、DB操作アプリケーション部から口座情報DBへのアクセス(情報の登録、読み出し、更新の何れか)が指示される毎に実行される。ステップ150では、指示されたアクセスが口座情報DBに対する情報の登録か読み出しか更新かを判定し、判定結果に応じて分岐する。指示された要求が口座情報DBに対する情報の登録である場合はステップ152へ移行し、メモリ12Bに記憶されているDB分割定義テーブルを参照し、DB操作アプリケーション部からパラメータとして通知されたセグメント名に基づき、登録対象のセグメントに対応する定義情報を取り込む。そしてステップ154では、ステップ152で取り込んだ定義情報に基づき、登録対象の情報がインデックス分割の対象か否か判定する。
登録対象の情報がルートセグメント又は第2階層セグメントの情報であった場合には、判定が否定されてステップ162へ移行し、DB操作アプリケーション部から通知された論理DB名を口座情報第1DBの物理DB名へ変換してDB制御部へ引き渡すと共に、DB操作アプリケーション部から転送された登録対象の情報をDB制御部へ転送することで、DB制御部に対し、登録対象の情報を口座情報第1DBへ登録するよう指示する。そして、DB制御部から登録完了が通知されるとステップ164へ移行し、登録対象の情報の登録が完了したことをDB操作アプリケーション部へ通知し、処理を終了する。このように、登録対象の情報がルートセグメント又は第2階層セグメントの情報であった場合、登録対象の情報は従来通り口座情報第1DBに登録される。
一方、特定金融機関に既に開設されている口座に対して新たな取引が発生し、口座情報DBへの取引明細の追加登録が要求された等の場合には、図8のステップ70〜ステップ88に示すように、DB操作アプリケーション部により、ルートセグメント及び第2階層セグメントの情報の読み出しが順次指示された後に、口座情報DBへの取引明細(第3階層セグメントのオカレンス)の登録が指示される(図8のステップ90)。図6(A)に示したDB分割定義テーブルには、第3階層セグメントはインデックス分割の適用対象として登録されているので、この場合、前述のステップ154の判定が肯定されてステップ156へ移行し、登録対象の情報のインデックス情報を生成する(図8のステップ92も参照)。図6(B)にも示すように、本実施形態に係るインデックス情報は登録対象の情報から本体情報を除去しヘッダとキー情報のみを残したフォーマットとされており、登録対象の情報に比較してサイズが大幅に小さく(例えば登録対象の情報が1kバイトなのに対して30バイト程度)、ステップ156では登録対象の情報から本体情報を除去することで登録対象の情報のインデックス情報を生成する。なお、インデックス情報のフォーマットは上記に限られるものではなく、例えばヘッダとキー情報に、登録対象の情報に本体情報として設定されているテキスト情報の一部のみを抽出した要約情報を加えたフォーマットを採用してもよい。
次のステップ158では、登録対象DBの物理DB名として口座情報第1DBの物理DB名を設定したパラメータをDB制御部へ引き渡すと共に、ステップ156で生成した登録対象の情報のインデックス情報をDB制御部へ転送することで、DB制御部に対し、前記インデックス情報を口座情報第1DBへ登録するよう指示する(図8のステップ94も参照)。これにより、DB制御部は登録対象の情報のインデックス情報を口座情報第1DBに登録すると共に、登録対象の情報自体を登録する場合と同様にして選択した情報のヘッダに、登録したインデックス情報の格納位置を指し示すポインタ情報を設定し(図8のステップ96も参照)、アプリケーション制御部へ応答を返す(図8のステップ98も参照)。アプリケーション制御部では、DB制御部からインデックス情報の登録完了が通知されると次のステップ160へ移行し、まず登録対象DBの物理DB名として口座情報第2DBの物理DB名を設定すると共に、登録対象の情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名(図6(A)の例では「d」)を設定し、登録対象の情報のキー情報として、ルートセグメントのキー情報、第2階層セグメントのキー情報、及び登録対象の情報の元のキー情報を羅列した新たなキー情報を生成・設定する。そして、これらの情報をパラメータとしてDB制御部へ引き渡すと共に、DB操作アプリケーション部から転送された登録対象の情報をDB制御部へ転送することで、登録対象の情報を口座情報第2DBへ登録するようDB制御部へ指示する(図8のステップ100も参照)。
これにより、DB制御部では、アプリケーション制御部から通知されたパラメータの中に、ルートセグメントのセグメント名が設定されていることに基づき、登録対象の情報(本来は第3階層セグメントのオカレンスとして登録すべき取引明細)を、口座情報第2DB(第2ストレージ16)にルートセグメントの情報として登録する(図8のステップ102も参照)。すなわち、第2ストレージ16の記憶領域に設けられている基本域内の個々の単位領域のうち、通知されたキー情報(ルートセグメント、第2階層セグメント及び登録対象の情報のキー情報を羅列した新たなキー情報)から一意に定まるアドレスが付与された特定の単位領域に登録対象の情報を登録する。そして、口座情報第2DBへの情報の登録が完了するとアプリケーション制御部へ登録完了を通知する(図8のステップ104も参照)。アプリケーション制御部では、DB制御部から登録完了が通知されるとステップ164へ移行し、登録対象の情報の登録が完了したことをDB操作アプリケーション部へ通知し(図8のステップ106も参照)、処理を終了する。このように、登録対象の情報が第3階層セグメントの情報(オカレンス)であった場合には、登録対象の情報のインデックス情報が口座情報第1DBに登録されると共に、登録対象の情報自体は口座情報第2DBに登録される。
そして、口座情報DBへの情報の登録が指示される度にアプリケーション制御部が上記処理を行うことで、図6(B)にも示すように、口座情報DBに登録されている各レコードの情報は、口座情報DBに登録されている第2階層セグメントの情報のうち、関連する取引明細が口座情報DB(の口座情報第2DB)に登録されているセグメントの情報には、関連する単一の取引明細のインデックス情報の格納位置を指し示すポインタ情報がヘッダに設定されると共に、関連する取引明細が口座情報DBに複数登録されている場合には、これらの複数の取引明細に対応する個々のインデックス情報のヘッダにポインタ情報が各々設定されることで、関連する第2階層セグメントの情報のヘッダに対応するポインタ情報が設定されているインデックス情報を先頭として、インデックス情報の列が形成された物理構造となる。また、口座情報第2DB上での個々の取引明細の格納位置(単位領域のアドレス)は、対応するインデックス情報に設定されたキー情報から導出可能であるので、個々の取引明細は対応するインデックス情報と各々関連付けされていることになる。なお、上述したステップ152〜ステップ164は請求項1,5に記載の第1登録制御手段に対応している。
続いて、アプリケーション制御処理のうち、口座情報DBからの情報の読み出しがDB操作アプリケーション部より指示された場合の処理を説明する。指示されたアクセスが情報の読み出しである場合には、ステップ150からステップ166へ移行し、前述したステップ152と同様にDB分割定義テーブルを参照し、DB操作アプリケーション部から通知されたセグメント名に基づき、読出対象の情報のセグメントに対応する定義情報を取り込む。そしてステップ168では、ステップ166で取り込んだ定義情報に基づき、読出対象の情報がインデックス分割の対象か否か判定する。
読出対象の情報がルートセグメント又は第2階層セグメントの情報であった場合には、判定が否定されてステップ174へ移行し、DB操作アプリケーション部から通知された論理DB名を口座情報第1DBの物理DB名へ変換してDB制御部へ引き渡すことで、DB制御部に対し、口座情報第1DBから読出対象の情報を読み出すよう指示する。そして、DB制御部から読出完了が通知されるとステップ176へ移行し、DB操作アプリケーション部に対して読み出し完了を通知すると共にDB制御部によって口座情報DB(の口座情報第1DB)から読み出された情報をDB操作アプリケーション部へ転送し、処理を終了する。このように、読出対象の情報がルートセグメント又は第2階層セグメントの情報であった場合には、従来通り口座情報第1DBに対して情報の読み出しが行われる。
一方、口座情報DBからの取引明細の読み出しが要求された等の場合には、図9のステップ110〜ステップ128に示すように、DB操作アプリケーション部により、ルートセグメント及び第2階層セグメントの情報の読み出しが順次指示された後に、口座情報DBからの取引明細(第3階層セグメントのオカレンス)の読み出しが指示される(図9のステップ130)。この場合、前述のように第3階層セグメントはインデックス分割の適用対象であり、前述のステップ168の判定が肯定されてステップ170へ移行し、読出対象DBの物理DB名として口座情報第1DBの物理DB名を設定したパラメータをDB制御部へ引き渡すことで、DB制御部に対し、設定したパラメータに対応する情報、すなわち読出対象の情報のインデックス情報を口座情報第1DBから読み出すよう指示する(図9のステップ132も参照)。
これにより、DB制御部は、前回の読出指示によって読み出した第2階層セグメントの情報のヘッダに設定されているポインタ情報が指し示す単位領域を認識し、認識した単位領域が前回読み出しを行った単位領域と同一であれば、前回読み出した情報に含まれる前記ポインタ情報が指し示すインデックス情報を参照し、認識した単位領域が前回読み出しを行った単位領域と相違していれば、認識した単位領域の情報を読み出し、読み出した情報に含まれる前記ポインタ情報が指し示すインデックス情報を参照する。そして、参照したインデックス情報に設定されているキー情報が通知されたキー情報と一致しているか否か判定する。キー情報が不一致であれば、参照したインデックス情報のヘッダに設定されているポインタ情報が指し示す単位領域を認識し、必要に応じて単位領域の情報の読み出しを行って前記ポインタ情報が指し示す次のインデックス情報を参照し、キー情報が一致しているか否かを判定することを、キー情報が一致しているインデックス情報が出現する迄繰り返すことで、キー情報が一致しているインデックス情報を探索し、該当するインデックス情報をアプリケーション制御部へ転送してインデックス情報の読出完了を通知する(図9のステップ134,136)。
なお、DB制御部による上記のインデックス情報の探索・読み出し処理では、インデックス情報の列が順に参照されることになるが、インデックス情報のサイズは取引明細本体と比較して大幅に小さく、例えばインデックス情報のサイズが30バイトであれば単一の単位領域に最大266個のインデックス情報を格納できるので、500件の取引明細に対応する500個のインデックス情報は最小で2個の単位領域に収まり、読出対象の500件目の取引明細であったとしても、インデックス情報の探索・読み出しにおけるI/Oの回数は最小で2回となる。なお、この最小のI/O回数は同一レコードのインデックス情報が同一の単位領域に詰めて格納されていた場合であり、現実の口座情報データベースでは、取引明細及びインデックス情報は金融取引が発生する都度登録されるので、同一レコードのインデックス情報が単位領域に詰めて格納されていない方が多いが、インデックス情報は取引明細自体よりも大幅にサイズが小さいので、同一レコードのインデックス情報が同一の単位領域に格納されている確率は高く、取引明細の列(第3階層セグメントのオカレンスの列)を順に参照する場合と比較してI/O回数は大幅に削減される。
DB制御部からインデックス情報の読出完了が通知されるとステップ172へ移行し、読出対象DBの物理DB名として口座情報第2DBの物理DB名を設定すると共に、読出対象の情報のセグメント名として口座情報第2DBにおけるルートセグメントのセグメント名を設定し、読出対象の情報のキー情報として、ルートセグメントのキー情報、第2階層セグメントのキー情報、及び登録対象の情報の元のキー情報を羅列した新たなキー情報を生成・設定する。そして、これらの情報をパラメータとしてDB制御部へ引き渡すことで、該当する情報を口座情報第2DBから読み出すようDB制御部へ指示する(図9のステップ138も参照)。
これにより、DB制御部では、第2ストレージ16の記憶領域に設けられている基本域内の個々の単位領域のうち、アプリケーション制御部から通知されたキー情報(ルートセグメント、第2階層セグメント及び登録対象の情報のキー情報を羅列した新たなキー情報)から一意に定まるアドレスが付与された特定の単位領域から情報を読み出し、読み出した情報に含まれる読出対象の情報をアプリケーション制御部へ転送することで、読出対象の情報の読み出し完了を通知する(図9のステップ140,142も参照)。アプリケーション制御部では、DB制御部から読み出し完了が通知されるとステップ176へ移行し、DB操作アプリケーション部に対して読み出し完了を通知すると共にDB制御部によって口座情報DB(の口座情報第2DB)から読み出された情報をDB操作アプリケーション部へ転送し、処理を終了する。なお、上述したステップ166〜ステップ176は請求項1、5に記載の第1読出制御手段に対応している。
なお、口座情報DBに対する情報の更新が指示されるときには、その直前に更新対象情報の読み出しが指示され、この指示に従って更新対象情報の読み出しが行われているので、口座情報DBにおける更新対象情報の格納位置は既知の状態となっている。このため、指示されたアクセスが情報の更新であればステップ150からステップ178へ移行し、DB操作アプリケーション部から転送された更新情報をDB制御部へ転送すると共に、前回の情報読み出し時(更新対象情報の読み出し時)と同一のパラメータ(物理DB名、セグメント名、キー情報)を設定し、このパラメータに該当する情報(更新対象情報)を更新情報で上書きするようDB制御部へ指示する。これにより、DB制御部により口座情報DB(口座情報第1DB又は口座情報第2DB)に記憶されている更新対象情報が、DB操作アプリケーション部からアプリケーション制御部を経由して転送された更新情報で上書き更新されることになる。アプリケーション制御部では、DB制御部から更新完了が通知されるとステップ180へ移行し、DB操作アプリケーション部に対して更新完了を通知して処理を終了する。
このように、本実施形態では、口座情報DBの各レコードの情報を、多数のオカレンスが登録される第3階層とその1階層上位の第2階層との境界で分割し、第3階層の情報(取引明細)を口座情報第2DBに登録すると共に、口座情報第2DBに登録した取引明細のインデックス情報を口座情報第1DBに登録するようにしたので、多数の取引明細から成る取引明細の列のうちの任意の取引明細を口座情報DBから読み出す際のI/Oの回数を大幅に削減することができ、デッドロックの発生を抑制できると共に、口座情報DBへのアクセス要求に対するデータベース・システムのレスポンスを向上させることができる。
なお、上記では本発明に係るデータベースの一例として、各レコードの情報が3階層に分離された論理構造のデータベースを説明したが、これに限定されるものではなく、より多数の階層に分離された論理構造であってもよい。
また、上記では本発明に係るインデックス分割の一例として、第2階層と第3階層の境界でデータベースを分割した例を説明したが、分割位置はこれに限定されるものではなく、任意の階層の境界で分割可能である。但し、顕著なI/O回数削減効果を得るためには、多数のオカレンスが登録される階層とその1階層上位の階層との境界で分割することが望ましい。また、インデックス分割における分割位置よりも下位に複数の階層が存在していてもよく、この場合、この複数の階層の各々についてデータベースにインデックス情報を登録するようにしてもよいが、前記複数の階層のうちの最上位の階層に階層についてのみデータベースにインデックス情報を登録した方が記憶領域を節減できるので好ましい(この態様は請求項3記載の発明に対応している)。
更に、上記では特定金融機関の各支店に設置されたATM22及び営業店端末24が、同一の支店に設置されたブランチ・サーバ20と接続されている構成のコンピュータ・システム10を例に説明したが、各支店にブランチ・サーバ20を設置することに代えて情報センタ等にサーバを集中配置し、各支店に設置されたATM22及び営業店端末24が集中配置したサーバに接続される構成を採用してもよい。
また、上記では本発明に係るデータベースの一例として、顧客が特定金融機関に開設した口座に関する情報を登録・管理するための口座情報DBを説明したが、本発明は階層型のデータベースであれば適用可能であり、データベースに登録される情報は上記に限定されるものではない。