一定期間意味を持つデータを扱う場合、言い換えると登録されてから取り出されるまでの間はデータ保証が必要な場合、ファイル、共有メモリ、データベースなどのデータ格納領域を用いてデータを保存するのが一般的である(特許文献1〜5等参照)。
  また、予期せぬデータ肥大に対処するため、またはデータの格納・削除を効率的に行うために、複数のデータ格納領域をサイクリックに利用し、不要となったデータをデータ単位ではなく、データ格納領域ごと削除すること、あるいは、データベースにおいて、複数のパーティションをサイクリックに利用し、ログデータなどパーティションを日付毎に用意し、不要になった時点でパーティション単位に削除する運用(サイクリック的な利用方法)も、例えばOLTP(On Line Transaction Processing)分野におけるアプリケーション間での非同期メッセージ通信等において一般に行われている(特許文献5)。
  図10は、OLTPシステム等の非同期処理において一般に行われている、データの登録と取り出しが非同期に行われ(取り出し処理は同一キー内においてデータ登録順(時系列)に行う必要がある)、処理が終わったデータのみ削除しながら、複数のデータ格納領域をサイクリックに運用してデータの登録と取り出しを行う従来のデータ処理方式の例を示すシステム図である。
  図10において、データ登録処理を行うアプリケーションプログラム(以下、データ登録処理アプリケーションという)は、データ格納領域(11)から順にデータを登録し、一杯になったら次のデータ格納領域(12)へ登録する。最後のデータ格納領域(13)が一杯になったら、データ格納領域(11)のデータを削除した後、次のデータを登録することにより再利用する。データ格納領域に登録されるデータには、データを特定するキーと、キーごとに管理され登録のたびに加算される通番が付加されている。
  一方、データ取り出し処理を行うアプリケーションプログラム(以下、データ取り出し処理アプリケーションという)は、データ格納領域(11)から順にデータを取り出して処理し、処理が終わったデータには処理済みフラグを立てる。データ取り出し処理は単純に時系列で処理するのではなく、キー毎に時系列(通番の若い順から)の処理が行われる。データ登録処理手段は、各データ格納領域へのデータ登録を開始する際には、当該データ格納領域に以前に登録された全てのデータに処理済みフラグが立てられていることを確認し、これらのデータを削除して、次のデータの登録を開始する。
  例えば図10では、データ登録処理アプリケーションにより、データ格納領域(11)に、(キー:0,通番0)、(キー:1,通番0)、(キー:0,通番1)、(キー:2,通番0)の各データを順に登録し、この時点でデータ格納領域(11)が一杯になったことを判定して、データ格納領域(12)に、(キー:0,通番2)、(キー:1,通番1)、(キー:0,通番3)、(キー:2,通番1)の各データを順に登録し、この時点でデータ格納領域(12)が一杯になったことを判定して、データ格納領域(13)に、(キー:1,通番2)、(キー:2,通番2)、(キー:1,通番3)、(キー:1,通番4)の各データを順に登録し、この時点でデータ格納領域(13)が一杯になった状態を示している。
  一方、データ取り出し処理アプリケーションにより、最初、キー0のデータを通番の若い順「(キー:0,通番0)、(キー:0,通番1)、(キー:0,通番2)、(キー:0,通番3)」に各データを取り出して処理し、夫々に処理済みフラグを立て、次に、キー2のデータを通番の若い順「(キー:2,通番0)、(キー:2,通番1)、(キー:2,通番2)」に各データを取り出して処理し、夫々に処理済みのフラグを立てた状態を示している。
  データ登録処理アプリケーションでは、登録データにより最後のデータ格納領域(13)まで一杯になったことを判定し、次にデータ格納領域(11)のデータを削除してデータ格納領域(11)に新たなデータを格納するために、データ格納領域(11)に格納されているすべてのデータに処理済みフラグが立てられているかを確認するが、データ格納領域(11)に格納されているキー:1のデータが未処理であるため、データ登録処理アプリケーションは、データ格納領域(11)に格納されているデータを削除することができない。そのため、データ格納領域に新たなデータを登録することができず、オーバーフロー状態となってしまう。
  このようなオーバーフロー状態を避ける技術の一つとして、例えば特許文献3には、送信ノードから送信された一連のデータ要素からなるデータストリームを受信するデータ受信手段、このデータ受信手段により受信されたデータストリーム中のデータを一時蓄積するための高速メモリから構成される1次バッファ手段、この1次バッファ手段に蓄積されたデータを取り出して受信ノードに送出するデータ送信手段、上記1次バッファ手段の記憶領域を補完するための当該1次バッファ手段より低速大容量の2次バッファ手段、および上記1次バッファ手段の入力側のオーバーフローの危険性を検出して、当該1次バッファ手段から上記2次バッファ手段へブロック単位でデータを移動する退避処理を行うと共に、上記2次バッファ手段に退避されたデータを上記データ送信手段によるデータ送出のために上記1次バッファ手段へブロック単位で移動する復帰処理を行うデータ移動手段を備え、ストリーム中継に伴う遅延を小さくすると共に、大容量のバースト的なデータをオーバーフローの発生を招くことなく一時蓄積可能にした中継ノードシステムが記載されている。
  図1は、本発明の第1の実施形態による、複数のデータ格納領域をサイクリックに運用してデータの登録と取り出しを行うデータ処理方式を示すシステム図である。
  図1において、データ格納部(10)は、データの格納がサイクリックに運用される複数のデータ格納領域(11〜1n)と、データ退避用に利用される退避用領域(4)を備えている。データ登録制御手段(1)は、データ格納部(10)の例えばデータ格納領域(11)へデータを順次格納する。その際、次に格納されるデータの大きさがデータ格納領域(11)の書き込み可能領域の大きさを上回ったとき、該データ格納領域(11)の格納状態が以前の登録データで一杯になったと判定し、該データ格納領域(11)の格納状態を示す値を、「使用後」を示す値に変更し、該データ以降のデータは次のデータ格納領域(12)に切り替えて順次格納する。以下データ格納領域の格納状態を示す値が「使用後」を示す値に変更される毎に、データ格納領域を順次切り替えてデータ格納領域(1n)までデータを格納し、このデータ格納領域(1n)の格納状態を示す値が「使用後」を示す値に変更されたら、データ格納領域(11)に戻り、データ格納領域(11)に切り替えて以降のデータを順次格納する動作を繰り返す。
  データ格納状況監視手段(3)は、データ登録制御手段(1)によるデータ格納部(10)のデータ格納状況を監視し、次のデータ格納領域としてデータ登録制御手段(1)により利用される順番となったデータ格納領域に未処理データが存在する場合には、該未処理データを退避用領域(4)に移動するとともに、当該データ格納領域に格納されている全データを削除することにより、データ登録制御手段(1)が当該データ格納領域に新たなデータを登録できるようにして、登録データがオーバーフロー状態となることを防ぐ。
  データ取り出し制御手段(5)は、サイクリックに運用される複数のデータ格納領域(11〜1n)または前記退避用領域(4)に格納されているデータを読み出して処理するとともに、処理完了後に該格納データに処理済みを示すフラグを設定する。
  図2は、データ格納領域としてデータベースのパーティションを利用した本発明の第2の実施形態のデータ処理方式を示すシステム図である。本実施形態では、複数のデータ格納領域(11〜13)および退避用領域(4)が、データベースの各パーティションになっている。
  図2において、開始/終了手段(7)は、本装置の利用開始/終了を指示する機能を有し、データ格納領域管理テーブル(2)は、データ格納領域毎のデータ格納状況を登録する機能を有している。また、開始/終了手段(7)からの指示を受けて、常駐プログラムとしてデータ格納状況監視部(3)が起動し、データ格納領域管理テーブル(2)の作成および値設定を行い、データ格納領域毎のデータ格納状況の定期監視を開始するとともに、監視結果をデータ格納領域管理テーブル(2)に登録する機能を有している。
  データ登録制御部(1)は、データ登録処理アプリケーションからデータ登録要求を受け付け、データ格納領域管理テーブル(2)の内容に従って使用中(カレント)のデータ格納領域へデータレコード(6)を登録する機能を有している。
  データ取り出し制御部(5)は、データ取り出し処理アプリケーションから、登録されたデータに対する処理が終了した通知を受け付け、データ格納領域(11〜13)内の該当レコードまたは退避用領域(4)内の該当レコードに処理済みフラグを設定する機能を有している。
  退避用領域(4)は、データ格納領域(11〜13)の中で次のデータ格納領域として利用されるデータ格納領域に未処理データが残っていた場合に、当該未処理データを退避させて格納するための領域である。また、管理情報保存手段(8)は、停止時にデータ格納領域管理テーブル(2)の内容を保存する機能を有している。
  図3は、データ格納領域に登録されるデータレコード(6)のデータ構造を示しており、一次キー、二次キー、および処理済みフラグからなる制御情報と、アプリケーションプログラムがデータに直接アクセスするためのAPキーおよびAPキー内での登録順(図10の通番に相当する)を示す項目を保有している。
  一次キーは、登録先のグループを特定するためのキーであり、図10に示すキーに相当するものであって、データ格納時にアプリケーションプログラム(AP)から指定される値である。この一次キーとAPキーは一対一で対応している。二次キーは、グループ内でデータ格納領域(パーティション)を特定するための値である。なお、本実施形態において追加される退避用領域を特定するための二次キーの値は、サイクリックに利用されるデータ格納領域と区別できる特定の値に設定される。
  処理済みフラグは、データ取り出し制御部(5)により設定されるフラグであり、データ登録時はフラグが“OFF”となっているが、データ取り出し処理が完了した時点でフラグが“ON”に設定される。APキーは、アプリケーションがデータアクセスする際に用いられるキー項目である。順序は、APキー内で登録順を表す項目である。このAPキー+順序の組合せがプライマリーキーとなる。データは、APの任意データである。
  図4は、本実施例のデータ格納領域管理テーブル(2)で保有されている管理情報の例を示している。
  図4において、Prt数は、グループ内で使用可能なサイクリック用データ格納領域(パーティション:Partition)の数を示しており、Maxサイズは、夫々のグループ毎に予め設定された各データ格納領域(パーティション)に格納可能な最大データ量を示している。
  カレントPrtNo.は、現在データ登録が行われているデータ格納領域(パーティション)の番号を示しており、使用量は、このカレントデータ格納領域(パーティション)に登録されているデータ量を示している。また、PrtNo.毎に、未使用の場合は「未使用」を示す値“0”、使用中(カレント)は「使用中」を示す値“1”、使用後の場合は「使用後」を示す値“2”を、その状態値として設定することにより、データ格納領域(パーティション)毎の格納状態を管理している。
  図4の例では、使用可能なPrt数は3個(Prt1、Prt2、Prt3)、各データ格納領域(パーティション)に格納可能な最大データ量は300Mに設定され、現在Prt3のデータ格納領域が新規の登録データを格納するために使用されており、その使用量は現在100Mであること、Prt1は、データ格納状況監視部(3)により、使用後(“2”)から未使用(“0”)に変更された状態、Prt2は使用後(“2”)の状態であることを示している。
  図5は、本実施形態におけるデータ登録制御部(1)のデータ登録動作を示すフローチャートであり、図6は、本実施形態におけるデータ格納状況監視部(3)のデータ格納状況監視動作を示すフローチャートである。以下、図2〜図6を参照して本実施形態の動作について説明する。
  本プログラムを利用する場合には、まず開始/終了手段(7)を使ってデータ格納状況監視部(3)を常駐プロセスとして起動する。データ格納状況監視部(3)は、データ格納領域管理テーブル(2)をメモリに展開する。利用者は、初回起動時にのみ開始/終了手段(7)を用いて、データ格納領域管理テーブル(2)へ図4で示す項目のうち、Prt数、およびMaxサイズを必要数分設定する。
  2回目以降の起動時は、管理情報保存手段(8)に保存されている前回停止時の情報を読み込んでデータ格納領域管理テーブル(2)へ設定する。これは、本プログラムの使用を終える時に、開始/終了手段(7)からデータ格納状況監視部(3)へ停止指示を送り、停止指示を受けたデータ格納状況監視部(3)は、メモリに展開されているデータ格納領域管理テーブルの情報を管理情報保存手段(8)へ格納することで可能となる。
  データ格納状況監視部(3)は、データ格納領域管理テーブル(2)への値設定が終わると、データベースに接続して定期的に図6に示すフローに従って各データ格納領域(パーティション)の状態を確認し、データ格納領域管理テーブル(2)の格納状態更新を行う(ステップS3〜ステップS13)が、このデータ格納状況監視部(3)が行う監視間隔の間に、次スワップ先(次のデータ格納領域として利用するパーティション)に未処理データがあるためデータ登録制御部(1)がデータ登録を実行できない事象が生じている場合がある。
  そのような場合に、データ登録処理に速やかに対処できるようにするため、データ登録制御部(1)から未処理データ退避指示を受け付ける(ステップS1)。データ登録制御部(1)から未処理データ退避指示がある場合(ステップS1、yes)には、当該データ格納領域(パーティション)から未処理データを退避用領域(4)へ移動するとともに該データ格納領域(パーティション)内のデータ削除を行い、データ格納領域管理テーブル(2)における該データ格納領域(パーティション)の格納状態を未使用“0”に変更する(ステップS2)。
  次に、全パーティションのチェックを完了したか判定し(ステップS3)、完了していないときには次パーティションのチェック処理を行う(ステップS4)。
  先ず、データ格納領域管理テーブル(2)のデータ格納領域(パーティション)毎の格納状態を参照して、該当パーティションの格納状態が使用後“2”であるか否かを判定する(ステップS5)。使用後“2”でない場合には該当パーティションは未使用“0”か、あるいは使用中(カレント)“1”であるので、以後の処理は行わずにステップS3へ戻る。
  該当パーティションの格納状態が使用後“2”の場合には、一次/二次キーを基に、該データ格納領域(パーティション)を検索し、その処理済みフラグを参照して未処理データが存在するかをチェックする(ステップS6)。未処理データが存在しない場合(ステップS7、yes)は、該データ格納領域(パーティション)に格納されたデータを全て削除し、データ格納領域管理テーブル(2)の該当パーティションの格納状態を未使用“0”に変更(ステップS8)して、ステップS3へ戻る。
  未処理データが存在する場合(ステップS7、no)は、該データ格納領域(パーティション)が次のデータ格納領域として利用される領域(次スワップ先Prt)に該当しているか否かをチェックする(ステップS9)。
  該データ格納領域(パーティション)が次のデータ格納領域(次スワップ先Prt)に該当しているかの判定は、例えば、当該データ格納領域が、現在使用中“1”のカレントデータ格納領域の次にデータが格納されるデータ格納領域である、あるいは、当該データ格納領域が、現在使用中“1”のカレントデータ格納領域の次にデータが格納されるデータ格納領域であって、且つ、現在使用中“1”のカレントデータ格納領域に既に所定値以上(例えば、Maxサイズの80%以上)のデータが格納されている、等の判定基準を設定することにより行うことができる。
  チェックの結果、該データ格納領域(パーティション)が次スワップ先Prtである場合(ステップS9、yes)には、当該データ格納領域(パーティション)内の未処理データを退避用領域(4)へ移動(ステップS10)した後、該データ格納領域(パーティション)に格納されたデータを全て削除し、データ格納領域管理テーブル(2)の該当パーティションの格納状態を未使用“0”に変更(ステップS8)して、ステップS3へ戻る。
  当該データ格納領域(パーティション)が次スワップ先Prtではない場合(ステップS9、no)は、該データ格納領域(パーティション)内のデータは未だ削除する必要はなく、また該データ格納領域(パーティション)内の未処理データは、該データ格納領域が次スワップ先Prtとなる前に該格納領域から取り出されて処理される可能性があるので、そのままステップS3へ戻る。
  ステップS3で、全パーティションのチェックが完了したら(ステップS3、yes)退避用領域(4)内に処理済みのデータ(レコード)があるかチェックし(ステップS11)、退避用領域(4)内に処理済みのデータがある場合(ステップS11、yes)には、当該レコードを退避用領域(4)から削除する(ステップS12)。
  データ格納状況監視部(3)は、以上の監視、処理動作を、監視停止指示(ステップS13、yes)があるまで、定期的に繰り返す。なお、図2に示すデータベースの状態は、現在使用中“1”のカレントデータ格納領域(13)が、使用後“2”となった状態が検出され、次スワップ先のデータ格納領域(11)内の未処理データを退避用領域(4)へ移動している状態を示している。
  一方、データ登録制御部(1)は、アプリケーションプログラム(AP)からのデータ登録要求を受け付け、図5に示すフローに従って適切なデータ格納領域へデータレコードを登録し、データ格納領域管理テーブル(2)の情報を更新する。
  即ち、APから受け取ったグループを特定するキーを基に、対応するデータ格納領域管理テーブルを検索する(ステップS21)。該当するキーレコードがない場合(ステップS22、yes)は異常終了し(ステップS23)、該当キーレコードがある場合(ステップS22、no)は、図4に示すデータ格納領域管理テーブル(2)のカレントPrtNo.、Maxサイズ、および使用量と、APから受け取ったアプリケーションデータサイズから、当該カレントPrtNo.のデータ格納領域(パーティション)に入るか否かをチェックする(ステップS24)。
  当該カレントPrtNo.のデータ格納領域(パーティション)への登録が可能な場合(ステップS25、yes)には、データ格納領域管理テーブルの当該カレントPrtNo.の使用量にAPから受け取ったアプリケーションデータサイズを加算し、図3に示すように一次キー、二次キーと、処理未済フラグ“OFF”(未処理)を設定してデータレコードを登録し(ステップS26)、AP結果を返却して処理を終了する(ステップS32)。
  APから受け取ったアプリケーションデータサイズが当該カレントPrtNo.のデータ格納領域(パーティション)に格納可能なデータ量(Maxサイズ−使用量)よりも大きくて、当該カレントPrtNo.のデータ格納領域(パーティション)への登録が不可能な場合(ステップS25、no)には、データ格納領域管理レコードから次スワップ先となるデータ格納領域(パーティション)の状態が“0”(未使用)か否かをチェックする(ステップS27)。
  未使用“0”の場合(ステップS28、yes)には、データ格納領域管理テーブルのカレントPrtNo.をスワップ先の番号に変更、使用量にAPから受け取ったアプリケーションデータサイズを設定、登録が不可能であった旧データ格納領域(パーティション)の格納状態を“1”(使用中)から“2”(使用後)に変更、およびスワップ先となった新データ格納領域(パーティション)の格納状態を“0”(未使用)から“1”(使用中)に変更した後、一次キー、二次キーと、処理未済フラグ“OFF”(未処理)を設定してデータレコードを登録して(ステップS31)、処理を終了する(ステップS32)。
  次のスワップ先となるデータ格納領域(パーティション)の状態が未使用ではない、即ち“2”(使用後)である場合(ステップS28、no)には、データ格納状況監視部(3)にスワップ先の未処理データを退避させる指示(図6のステップS1)を与え、当該スワップ先のデータ格納領域(パーティション)の格納状態が“0”(未使用)になるのを待ち(ステップS29〜ステップ30)、未使用状態となった(ステップS30、yes)後、ステップS31のデータレコード登録処理を実行して、処理を終了する(ステップS32)。
  データ取り出し処理を行うアプリケーションは、図3で示すデータ構造のAPキーと順序を使って必要なデータレコードを直接読み込んで処理を行う。処理が終了した時点で、データ取り出し制御部(5)へ処理が終了したデータレコードを通知する。データ取り出し制御部(5)は、受け取ったレコードをもとに、データ格納時に未処理を示す“OFF”に設定された該当データレコードの処理フラグを、処理済みを示す“ON”に変更する。
  本実施形態によれば、サイクリック利用する複数のデータ格納領域(11〜13)以外に退避用領域(4)を用意し、次のスワップ先となるデータ格納領域に未処理データが残っている場合には、当該データを退避用領域に移動して、当該データ格納領域を空にすることができるので、複数のデータ格納領域のサイクリック利用を確実に行うことができる。そのため、ディスク使用量肥大を避けるととともにデータ削除を効率的に行って確実なスワップ処理が実現可能となる。
  また、データ登録制御部(1)、およびデータ取り出し制御部(5)によるアプリケーションが、複雑なデータ格納領域の振り分けを意識することなくデータアクセスを行うことが可能となり、アプリケーションプログラムの開発効率を上げることができる。
  図7は、データ格納領域としてデータベースのパーティションを利用した本発明の第3の実施形態のデータ処理方式を示すシステム図であり、図8は、本実施形態のデータ格納領域管理テーブル(2)で保有されている管理情報の例を示す図である。
  本実施形態は、データ格納領域としてデータベースを、グループ毎のデータ群に分け、グループ毎に夫々独立にデータを格納可能に構成したことを特徴としており、図7に示すように、データ格納領域としてのデータベースは、グループ1のデータ群、グループ2のデータ群、・・・に分けられている。この点を除けば、第1の実施例と同様の構成となっている。
  図8において、一次キーは、登録先のグループを特定するためのキー(図10におけるキーに相当)であり、データ格納時にAPから指定される値である。Prt数は、グループ内で使用可能なサイクリック用データ格納領域(パーティション:Partition)の数を示しており、Maxサイズは、夫々のグループ毎に予め設定された各データ格納領域(パーティション)に格納可能な最大データ量を示している。このPrt数、およびMaxサイズは、初回起動時に開始/終了手段(7)を用いて、一次キー(グループ)毎に、利用者によりデータ格納領域管理テーブル(2)に必要数分設定される。
  カレントPrtNo.は、現在データ登録が行われているデータ格納領域(パーティション)の番号を示しており、使用量は、このカレントデータ格納領域(パーティション)に登録されているデータ量を示している。また、PrtNo.毎に、未使用の場合は“0”、使用中(カレント)は“1”、使用後の場合は“2”により、データ格納領域(パーティション)毎の格納状態を管理している。
  図8の例では、一次キー1で特定されるグループは、グループ内で使用可能なPrt数は3個(Prt1、Prt2、Prt3)、各データ格納領域(パーティション)に格納可能な最大データ量は200Mに設定され、現在Prt3のデータ格納領域が登録データを格納するために使用されており、その使用量は現在10Mであること、Prt1、Prt2は使用後(“2”)の状態であることを示している。
  また、一次キー2で特定されるグループは、グループ内で使用可能なPrt数は2個(Prt1、Prt2)、各データ格納領域(パーティション)に格納可能な最大データ量は200Mに設定され、現在Prt1のデータ格納領域を使用中(“1”)で、その使用量は現在150Mであり、Prt2は未使用(“0”)状態であることを示している。
  また、一次キー3で特定されるグループは、グループ内で使用可能なPrt数は3個(Prt1、Prt2、Prt3)、各データ格納領域(パーティション)に格納可能な最大データ量は100Mに設定され、現在Prt3のデータ格納領域を使用中(“1”)で、その使用量は現在100Mであり、Prt3は未使用(“0”)状態、Prt1は使用後(“2”)の状態であることを示している。
  図9は、本実施形態におけるデータ格納状況監視部(3)のデータ格納状況監視動作を示すフローチャートである。
  本実施形態では、図6に示す第2の実施形態のデータ格納状況監視動作フローチャートにおける全パーティションのチェック処理を、グループ1のデータ群、グループ2のデータ群、・・・毎に、夫々独立に実行している。
  そのため、図9に示すように、各グループ内のパーティションチェック(ステップS5〜ステップS12)を行う前に、チェックするグループ単位を順次選択するための処理(ステップS3〜ステップS4)が付加されるが、その点を除けば、第2の実施形態におけるデータ格納状況監視動作と同様の動作が行われ、また、データ登録制御部(1)のデータ登録動作も、グループ単位に設けられたサイクリック利用される複数のデータ格納領域及び退避用領域に、グループ毎に夫々独立に登録動作を行っている点を除けば、第2の実施形態におけるデータ登録動作と同様であるので、詳細な動作説明については省略する。
  本実施形態においても、サイクリック利用するデータ格納領域以外に退避用領域を用意し、次に利用されるデータ格納領域に未処理データが残っている場合には、該未処理データを退避用領域に移動することによって、当該データ格納領域内の未処理データを空にしてデータ格納領域単位にデータ削除を行うことを可能にしているので、処理効率が向上するとともに、各データ格納領域を大きくするあるいはデータ格納領域数を増やすことなくデータ格納領域のサイクリック利用を確実に行うことが可能となる。
  また、データ取り出し手段は、退避用領域に直接アクセスしてデータを取り出すことができるので、退避領域に退避されたデータを、サイクリック利用するデータ格納領域へ復帰させる動作は不要であり、データ格納領域の管理・制御が容易となる。さらに、データ格納領域の管理・及び切替制御は独立したプログラムにより実行可能であるので、アプリケーションの開発効率が上がる。