(57)【要約】【課題】記憶部のデータと記憶部から読み出したデータとをより適切に管理することを目的とする。【解決手段】データを記憶するデータベースと通信可能に接続され、データベースのデータの一部を記憶するキャッシュを有する情報処理装置が、一のトランザクションにおいて、一のトランザクションとは異なる他のトランザクションにおけるデータベースへのデータの書き込みを代行し、一のトランザクションにおいて、キャッシュにデータを書き込むことによって課題を解決する。【選択図】図６
2013092836.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する記憶部と通信可能に接続され、前記記憶部のデータの一部を記憶する記憶領域を有する情報処理装置であって、
一の一連の処理において、前記一の一連の処理とは異なる他の一連の処理における前記記憶部へのデータの書き込みを代行する代行手段と、
前記一の一連の処理において、前記記憶領域に前記データを書き込む書込手段と、を有することを特徴とする情報処理装置。
【請求項２】
記憶装置と通信可能に接続され、
前記データを前記記憶装置に記憶して前記他の一連の処理を終了する終了手段を更に有し、
前記書込手段は、前記記憶装置から前記データを取得し、前記記憶領域に前記データを書き込むことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記代行手段は、前記一の一連の処理を開始する際、前記記憶部の規定の領域を排他制御し、前記データの書き込みを代行することを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
データを記憶する記憶部と通信可能に接続され、前記記憶部のデータの一部を記憶する記憶領域を有する情報処理装置における情報処理方法であって、
一の一連の処理において、前記一の一連の処理とは異なる他の一連の処理における前記記憶部へのデータの書き込みを代行する代行工程と、
前記一の一連の処理において、前記記憶領域に前記データを書き込む書込工程と、を有することを特徴とする情報処理方法。
【請求項５】
データを記憶する記憶部と通信可能に接続され、前記記憶部のデータの一部を記憶する記憶領域を有するコンピュータを、
一の一連の処理において、前記一の一連の処理とは異なる他の一連の処理における前記記憶部へのデータの書き込みを代行する代行手段と、
前記一の一連の処理において、前記記憶領域に前記データを書き込む書込手段として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、記憶メディアの大容量化に伴って機器の扱うデータが増大している。また、機器が扱うデータの種類も増えている。そこで、機器でのデータ処理の負荷を低減するために、また機器内のアプリケーションの開発の負荷を低減するために、組込み機器用のデータベースシステムが多数提案されて利用されるようになってきている。
一般にデータベースシステムでは、不可分な一連の処理がトランザクションとして管理される。処理の結果は、トランザクション単位で利用され、データベースシステムでは、トランザクションの実行中の内容、即ち処理途中の状態結果を他のトランザクションで利用されることが阻止される。また、データベースシステムでは、トランザクション単位での処理の結果の確定は、コミットによって行われ、結果の破棄（トランザクションの実行前に戻すこと）は、ロールバックによって行われる。
【０００３】
また、データベースシステムは、コミットした処理の結果を障害等で紛失しないことを保証する。そこで、データベースシステムは、データを保証するために、コミット時にハードディスク装置等の永続化可能な記憶装置へ処理の結果を書き込んでいる。また、データベースシステムは、書き込み途中の状態での利用については処理の結果を正しく読み出すことができないので、他からのアクセスを排他する。
また、データベースシステムは、トランザクションの実行中には、データの読み出しの整合性を保証するために、他からの書き込み、即ちコミットする処理（コミット処理）を排他する。
コミット処理は、データを保証するための重要な処理である。そのため、コミット処理中に障害が発生した場合、その内容を引き継いで代替してコミットを実行する取り組みがなされてきた。例えば、更新処理を行うトランザクション（更新トランザクション）における更新の内容を保持し、障害の発生時等にコミットを代行して実行する手法が開示されている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２５０９９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、コミットを要するアプリケーションは、上述のように他のトランザクションによりコミット処理が排他されているとき、処理を終了させることができず、排他が解除される（他のトランザクションの終了）まで待たされることになる。
また、組込み機器についてみると、スムーズなユーザインターフェースを実現するために、頻繁にデータの先読み処理を実行するアプリケーションが増えてきている。先読み処理は、検索処理を行うトランザクション（検索トランザクション）の実行であるので、組込み機器は、同時には更新トランザクションのコミット処理を実行できない。また、障害が発生しているわけではないので、更新トランザクションにおけるコミット処理はずっと待たされることになる。
【０００６】
また、組込み機器は、検索トランザクション間に、待たしていたコミット処理を実行できたとしても、再び検索トランザクションを開始する際、そこまでに読み出したキャッシュのデータ（キャッシュデータ）を廃棄する必要がある。この廃棄は、データベース（ＤＢ）の一例であるデータベースファイル（ＤＢファイル）が更新されたため、ＤＢファイルの内容とキャッシュに残っているデータとが不整合になっているため必要となる。
即ち、キャッシュデータが廃棄された状態で開始された検索トランザクションでは、改めてデータをＤＢファイルから読み込む必要があり、先読み効果を失うことでスムーズなユーザインターフェースの実現が困難になる。
【０００７】
ここで、ＤＢに係る処理をサービス化して、検索のリクエスト及び更新のリクエストをメモリ上で一括して受託し、メモリ上にトランザクションの前後の複数の状態を並行して管理しながら同時実行を制御する手法もある。しかしながら、各トランザクションのデータをメモリ上に保持する手法では、トランザクションの処理量に比例してメモリリソースを必要とする。そのため、近年適用が進んでいる組込み機器のような環境では適用できない。
以上を踏まえると、組込み機器においては、検索トランザクションの実行中に更新トランザクションが終了できない事態が発生する。また、データが更新された後の検索トランザクションでは、キャッシュデータが使用できなくなるので、データの使用が可能になるまでに時間がかかる事態が発生する。
【０００８】
本発明はこのような問題点に鑑みなされたもので、データベース等の記憶部のデータと記憶部から読み出したデータとをより適切に管理することを目的とする。
【課題を解決するための手段】
【０００９】
そこで、本発明に係る情報処理装置は、データを記憶する記憶部と通信可能に接続され、前記記憶部のデータの一部を記憶する記憶領域を有する情報処理装置であって、一の一連の処理において、前記一の一連の処理とは異なる他の一連の処理における前記記憶部へのデータの書き込みを代行する代行手段と、前記一の一連の処理において、前記記憶領域に前記データを書き込む書込手段と、を有することを特徴とする。
【００１０】
また、本発明は、情報処理方法、プログラム、システム、記憶媒体等としてもよい。
【発明の効果】
【００１１】
本発明によれば、記憶部のデータと記憶部から読み出したデータとをより適切に管理することができる。
【図面の簡単な説明】
【００１２】
【図１】データ検索更新装置のハードウェアの構成の一例を示す図である。
【図２】データベースシステムにおける仕組みの一例を示す図である。
【図３】データベース操作のシーケンスの一例を示す図である。
【図４】ＤＢファイルおよび代行依頼用ファイルの構成の一例を示す図である。
【図５】キャッシュ管理情報の構成の一例を示す図である。
【図６】代行依頼コミット処理に係るフローチャートの一例を示す図である。
【図７】代行更新内容反映処理に係るフローチャートの一例を示す図である。
【図８】代行コミット処理に係るフローチャートの一例を示す図である。
【図９】リカバリ処理に係るフローチャートの一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について図面に基づいて説明する。なお、実施形態は、本発明を限定するものではなく、また、実施形態で説明されている全ての構成が本発明の課題を解決するための手段に必須であるとは限らない。
【００１４】
＜第１の実施形態＞
図１は、情報処理装置（コンピュータ）の一例であるデータ検索更新装置のハードウェアの構成の一例を示す図である。
ＣＰＵ１０１は、中央演算装置の一例であり、データベースシステムのための演算、論理判断等を行い、バス１０８を介して、バス１０８に通信可能に接続された構成要素（１０２〜１０８）を制御する。ＲＯＭ１０２は、ＣＰＵ１０１の処理手順を示す制御プログラム、各種のデータを記憶している。ＲＡＭ１０３は、処理中の各種の制御のための一時記憶用のワークエリアとして使用される。
入力装置１０４は、ボタン、タッチパネル、マウス等から構成され、各種の情報をデータ検索更新装置に入力する。表示装置１０５は、液晶ディスプレイ等で構成され、各種の情報を表示する。記憶装置１０６は、ハードディスク等の各種のディスク機器、フラッシュメモリ等から構成され、ＣＰＵ１０１の処理手順を示す制御プログラム、記憶部の一例である後述のＤＢファイル２０９に保持されるデータ、ロールバック用のデータ等のデータが格納される。通信装置１０７は、ＵＳＢ等の外部入出力機器、モデム等の有線或いは無線の通信機器等から構成され、外部の機器とのデータ交換（通信）を行う。バス１０８は、構成要素（１０１〜１０７）間で各種のデータのやり取りを行う。
【００１５】
また、データ検索更新装置は、上述した構成要素を有し、入力装置１０４等からの各種のイベントに応じて作動するものである。より具体的には、入力装置１０４からのインタラプトが供給されると、インタラプトに応じた信号がＣＰＵ１０１に送られ、これに伴ってイベントが発生する。ＣＰＵ１０１は、このイベントに応じてＲＯＭ１０２又はＲＡＭ１０３内に記憶される各種の命令（プログラム）を読み出し、その実行によってデータ検索更新装置における機能、後述するフローチャートに係る処理を実現する。なお、データ検索更新装置における機能、後述するフローチャートに係る処理の一部、又は全部を専用のハードウェアを用いて構成してもよい。
また、データ検索更新装置の構成は、上述の構成に限られるものではない。例えば、記憶装置１０６は、通信装置１０７、或いは通信装置１０７及びインターネット等のネットワークを介して通信可能に接続されていてもよい。また、データ検索更新装置は、デジタルカメラ、プリンタ、複合機などの装置に含まれていてもよい。
【００１６】
図２は、本実施形態に係るデータベースシステムにおける仕組み（データ検索更新装置の機能）の一例（モジュール）を示す図である。
アプリケーション（Application（register））２０１、及びアプリケーション（Application（search））２０４は、ＤＢファイル２０９を使用するアプリケーションである。ＤＢエンジン（Data Base Engine）２０２は、アプリケーション２０１により使用されるＤＢエンジンである。ＤＢエンジン（Data Base Engine）２０５は、アプリケーション２０４により使用されるＤＢエンジンである。
ローカルキャッシュ（Local cache）２０３は、ＤＢファイル２０９のデータの一部をＤＢエンジン２０２が保持するために用いるローカルキャッシュであり、メモリ上（ＲＡＭ１０３）にその領域（記憶領域の一例）が確保される。ローカルキャッシュ（Local cache）２０６は、ＤＢファイル２０９のデータの一部をＤＢエンジン２０５が保持するために用いるローカルキャッシュであり、メモリ上（ＲＡＭ１０３）にその領域（記憶領域の一例）が確保される。
【００１７】
ファイルシステム（File System）２０７は、ファイルシステムである。ファイルキャッシュ（File Cache）２０８は、ＤＢファイル２０９のファイル単位のデータの内容の一部をファイルシステム２０７が保持するために用いるファイルキャッシュである。ファイルキャッシュ２０８は、ローカルキャッシュと同様にメモリ上（ＲＡＭ１０３）にその領域が確保される。ＤＢファイル２０９は、各種のデータを記憶する。
ロールバックジャーナルファイル（ＲＢＪ）２１０及びロールフォワードジャーナルファイル（ＲＦＪ）２１１は、代行依頼用ファイルの一例である。ＤＢファイル２０９、ＲＢＪファイル２１０、ＲＦＪファイル２１１については、記憶装置１０６にその領域が確保される。
【００１８】
ここで、ＤＢエンジンは、扱うテーブルのスキーマ情報、レコード、カラムデータへのインデックスデータ等を固定長ブロックに分割して管理する。また、ＤＢファイル２０９には、全てのブロックのデータ（ブロックデータ）が格納されている。ＤＢエンジンは、アプリケーションからの要求に基づいて、ＤＢファイル２０９内のブロックデータの一部をローカルキャッシュに適宜保持する。
また、ＤＢファイル２０９の更新では、アプリケーションは、まず、トランザクション（関連する複数の処理を１つの処理単位としてまとめた一連の処理の一例）を開始する。そして、アプリケーションは、レコード等のデータの更新要求を繰り返し、コミット要求により、更新したデータ（更新データ）を記憶装置１０６に書込み、当該トランザクションを終了する。
また、データの更新要求の時点では、実際に更新されるのは、ローカルキャッシュ内のみであり、ＤＢエンジンは、ファイルシステム２０７を介して更新前のブロックデータ（ブロックイメージ）をＲＢＪファイル２１０に格納する。その後、ＤＢエンジンは、コミット要求が指示された時点で、ファイルシステム２０７を介してＤＢファイル２０９に更新データを格納する。また、ＤＢエンジンは、ロールバックの要求が指示された場合、ファイルシステム２０７を介してＲＢＪファイル２１０に格納されたブロックイメージを使用して変更前に戻す。
【００１９】
また、ＤＢエンジンは、複数のトランザクションが同時に実行されようとしている場合、矛盾無くトランザクションを実行させるために各トランザクションを制御する。そのために、ＤＢエンジンは、一般的なＤＢエンジンで実施されている以下の方法を用いている。即ち、本ＤＢエンジンは、共有ロック、排他ロック、及び更新ロックを用いてトランザクションを制御する。
データの読み出しには、共有ロックの取得が必要であり、ローカルキャッシュ上のデータの更新には、更新ロックの取得が必要であり、コミットによるＤＢファイル２０９へのデータの書き込みには、排他ロックの取得が必要である。
ＤＢエンジンは、排他ロックが解放されていれば、換言するならば他のトランザクションで共有ロック及び更新ロックの何れか一方が取得されていても共有ロックを取得できる。また、ＤＢエンジンは、更新ロック及び排他ロックがともに解放されていれば、換言するならば他のトランザクションで共有ロックが取得されていても更新ロックを取得できる。また、ＤＢエンジンは、他のトランザクションで共有ロック、排他ロック、及び更新ロックが全て解放されていれば排他ロックを取得できる。
【００２０】
３種類のロックにより、複数の検索トランザクション（読出トランザクション）と１つの更新トランザクションの同時実行を可能する。
ここで、標準的なファイルシステムでは、ＤＢファイルに対して共有ロック及び排他ロックの２種類のロックがサポートされている。故に、ＤＢエンジンは、標準的なファイルシステムがサポートしていない更新ロックについては、ＤＢファイル２０９の一部の領域に対する排他ロック（排他制御）によって実現している。
なお、ＤＢエンジンは、更新ロック或いは排他ロックを取得できない場合、ＢＵＳＹであることを示すリターンコードをアプリケーションに返し、アプリケーションは、リトライするか否かを判断する。
【００２１】
以上のことから、ＤＢファイル２０９の検索においては、ＤＢエンジンは、トランザクションの開始時に共有ロックの取得を要する。また、ＤＢファイル２０９の更新においては、ＤＢエンジンは、トランザクションの開始時に共有ロック、キャッシュデータの更新時に更新ロック、コミット時に排他ロックの取得をそれぞれ要する。
即ち、検索中のトランザクション（検索トランザクション）が共有ロックを取得しているので、検索トランザクションが終了するまでは、更新中のトランザクション（更新トランザクション）は、排他ロックの取得ができない。故に、コミット要求に対してはリターンコードがＢＵＳＹとなる。なお、コミットによりトランザクションが終了すると、全てのロックは解放される。
【００２２】
また、ＤＢエンジンは、トランザクションの終了後もローカルキャッシュをそのまま保持する。そして、ＤＢエンジンは、再び開始されたトランザクションにおいて、ローカルキャッシュ内のデータ（キャッシュデータ）を再利用することで、処理を高速化する。
しかしながら、トランザクション間に他のトランザクションがＤＢファイル２０９の内容を更新している場合がある。その場合は、ローカルキャッシュとＤＢファイル２０９の内容とにおいて不整合が起きる可能性があるため、キャッシュデータを再利用することはできない。
そこで、ＤＢエンジンは、キャッシュデータ及びＤＢファイル２０９間の整合性をチェックするための更新ＩＤの情報をＤＢファイル２０９に保持し、更新ＩＤの情報をコミット時に変更するようにしている。そして、ＤＢエンジンは、ローカルキャッシュにデータを読み込んだときのＤＢファイル２０９の更新ＩＤと、トランザクションの開始時のＤＢファイル２０９に保持されている更新ＩＤとを比較してデータの整合性をチェックする。この際、ＤＢエンジンは、異なる更新ＩＤであると判断した場合、ローカルキャッシュの内容をすべて廃棄する。
【００２３】
また、本実施形態では、他のトランザクションによるＤＢファイル２０９の更新（コミット）を代行して実施する処理については代行ロックを用いて制御する。ＤＢエンジンは、共有ロック、更新ロック、及び排他ロックが解放されていなくても、代行ロック自身が解放されていれば代行ロックを取得することができる。
代行ロックについては、標準的なファイルシステムではサポートされていないので、更新ロックと同様にＤＢファイル２０９の一部の領域（規定の領域）に対する排他ロック（排他制御）によって実現されている。これにより、代行ロックを取得するトランザクション、即ち代行してコミットを実施する権限を持つトランザクションが１つに絞られる。ＤＢエンジンは、トランザクションの開始時および実行中に代行ロックを取得することが可能であり、トランザクションの終了時に他のロックと同様に代行ロックを解放する。
【００２４】
代行ロックによれば、例えば、ＤＢエンジン２０２は、排他ロックが取得できないことによりコミット処理を実行できない場合、代行ロックが解放されていなければＤＢエンジン２０５（代行ロック取得者）にコミットの代行を依頼することが可能となる。また、コミットの代行を依頼する処理（代行依頼コミット処理）では、ＤＢエンジン２０２は、代行ロック取得者の存在を確認後、更新データを代行依頼用ファイルであるＲＦＪファイル２１１に書き込んでから更新トランザクションを終了する。なお、代行依頼コミット処理の詳細については図６を用いて後述する。
また、実行中のトランザクションにおいて、ＤＢエンジンは、代行の依頼を確認すると、任意のタイミングで代行依頼用ファイルの更新データを自身のローカルキャッシュに反映する。この場合、ＤＢエンジンは、ローカルキャッシュ全体を廃棄する必要はない。
【００２５】
また、新規のトランザクションを開始する際のローカルキャッシュ及びＤＢファイル２０９間の整合性チェックは、ＤＢファイル２０９と代行依頼用ファイルとの双方に対して行われる。より具体的には、ＤＢエンジンは、ＤＢファイル２０９の更新ＩＤと代行依頼用ファイルの更新ＩＤとが異なると判断した場合、代行依頼用ファイルの内容をローカルキャッシュに読み込むことで整合性を確保する。
また、代行ロックを取得しているＤＢエンジンのトランザクションにおいては、当該ＤＢエンジンは、任意のタイミングで代行依頼用ファイルの更新データをＤＢファイル２０９に書き込む、即ちコミット処理を代行する。トランザクションの実行中に動作する代行のコミット処理（代行コミット処理）は、共有ロックを取得している状態で終了する。なお、代行コミット処理の詳細については図８を用いて後述する。
【００２６】
ここで、アプリケーション２０１は、例えば、デバイス（装置）が有するコンテンツの登録機能を担当し、新規に追加されたコンテンツを管理するメタデータを、ＤＢエンジン２０２を用いてＤＢファイル２０９に格納している。デバイスが有するコンテンツの登録機能とは、例えば画像データを管理するＳＴＢ（セットトップボックス）、家庭用デジタル複合機などにデータベースを適用した場合、デジタルカメラ、ネットワークに接続された装置から得た画像データを登録する機能である。この場合、メタデータは、画像データに付随するメタデータであり、撮影日時、撮影場所、撮影者、被写体等の情報である。
アプリケーション２０４は、例えば、デバイスが有するコンテンツの表示機能を担当し、ユーザのブラウズ指示、検索指示等に基づいて、アプリケーション２０１で登録されたメタデータを、ＤＢエンジン２０５を用いてＤＢファイル２０９から読み出す。また、アプリケーション２０４は、スムーズなユーザインターフェースを実現するため、ＤＢエンジン２０５を介して未表示の画像データのメタデータも先行してＤＢファイル２０９から取得する先読み処理を行っている。
【００２７】
アプリケーション２０１は、ＤＢエンジン２０２に対し、複数の画像データに付随するメタデータの追加の登録を指示する。ＤＢエンジン２０２は、指示された更新の内容（更新データ）に基づき、ローカルキャッシュ２０３内に保持するブロックデータを更新する。アプリケーション２０１は、必要なメタデータの更新が終了した段階で、ＤＢエンジン２０２にコミットを指示する。
ＤＢエンジン２０２は、アプリケーション２０１からの指示によるコミット処理の実行時にアプリケーション２０４が検索トランザクションを実行中だった場合、更新データをＲＦＪファイル２１１に書き込んで更新トランザクションを終了する。このように、アプリケーション２０１は、アプリケーション２０４の検索トランザクションによって待たされることなく処理を終了させることができる。
【００２８】
アプリケーション２０４は、ＤＢエンジン２０５に対し、検索トランザクションの開始時に代行ロックの取得を指示する。代行ロックの取得は、当該検索トランザクションにおいてＤＢエンジン２０５が代行してコミットする権限の取得を意味し、他のトランザクションによるコミット処理の依頼を可能にする。
また、アプリケーション２０４は、ＤＢエンジン２０５に対し、ユーザのブラウズ指示、検索指示などに基づいたメタデータの検索を指示する。ＤＢエンジン２０５は、指示された検索の内容に基づき、ローカルキャッシュ２０６にＤＢファイル２０９のブロックデータを読み込んで検索を実行する。また、ＤＢエンジン２０５が指示するタイミングで、検索の結果をアプリケーション２０４に返却する。
【００２９】
また、アプリケーション２０４は、ＤＢエンジン２０５に対し、代行が依頼された更新データのローカルキャッシュ２０６への反映（代行更新内容反映処理）を定期的に指示する。なお、代行更新内容反映処理の詳細については図７を用いて後述する。
また、例えば、ＤＢエンジン２０５は、アプリケーション２０４が指示するタイミングで、ＲＦＪファイル２１１の更新データをローカルキャッシュ２０６に反映させる。ＤＢエンジン２０５は、ローカルキャッシュ２０６全体を廃棄することがないため、先読み処理によってローカルキャッシュ２０６に読み込まれたブロックデータを利用することが可能である。
また、ＤＢエンジン２０５は、アプリケーション２０４が指示するタイミングで、トランザクションの実行中に代行が依頼された更新データをＤＢファイル２０９へ書き込み、ＲＦＪファイル２１１をクリアする（代行コミット処理）。
【００３０】
以上により、アプリケーション２０１は、アプリケーション２０４が検索中でも更新処理を終了することができる。また、アプリケーション２０４は、アプリケーション２０１による更新データを、ローカルキャッシュ２０６の内容を廃棄することなく読み出すことができる。
上述の構成によれば、例えば、ＳＴＢ、家庭用デジタル複合機等にデータベースを適用した場合、管理している画像データのブラウズや検索をスムーズなユーザインターフェースで実現しながら、デジタルカメラ等から新規に画像データを登録することが可能となる。また、上述の構成によれば、新規に登録された画像データを、ユーザインターフェースの表示を遅延させることなくユーザに追加して提示することが可能となる。
【００３１】
図３は、代行コミット処理を使用するアプリケーションにおけるデータベース操作のシーケンスの一例（全体シーケンス３０６）を示す図である。
より具体的には、全体シーケンス３０６は、アプリケーション２０４がＤＢエンジン２０５への指示情報を含むクエリシーケンスである。全体シーケンス３０６は、アプリケーション２０４によるトランザクションの全体のシーケンスを示し、代行ロックの取得を指示する開始要求（begin proxy）３０１で始まり、コミットを指示するコミット要求（commit）３０５で終了する。
この間、他のアプリケーションによるトランザクションにおいてコミット処理が実行されることはないが、コミット処理の代行が依頼（代行依頼コミット処理が実行）されることはある。検索クエリ３０２は、アプリケーション２０４による表示処理および先読み処理のための検索処理をＤＢエンジン２０５に指示する要求であり、複数の検索要求（select）や検索結果の取得要求から構成される。反映要求（proxy-update-cache）３０３は、代行更新内容反映処理をＤＢエンジン２０５に定期的に指示する要求である。代行コミット要求（proxy-commit）３０４は、ユーザインターフェースの状況から（ユーザインターフェースを介して）指示されたタイミングで代行コミット処理を指示する要求である。
【００３２】
アプリケーション２０４は、トランザクション内で数回の反映要求３０３によって最新のデータをローカルキャッシュ２０６に更新しながら、検索処理を実行している。また、アプリケーション２０４は、トランザクション中に代行コミット要求３０４によって適宜データを確定し、最終的にコミット要求３０５によって未確定の全てのデータを確定して終了している。
なお、図３で示したシーケンスの例では、アプリケーション２０４は、途中で代行コミット要求３０４を適宜行っているが、最終的に全てを確定するコミット要求３０５まで一度も代行コミット要求３０４を実行しない構成とすることも可能である。
【００３３】
図４は、ＤＢファイル２０９の構成の一例（ＤＢファイル４０１）および代行依頼用ファイル（ジャーナルファイル）の構成の一例（ジャーナルファイル４０４）を示す図である。
ＤＢファイル４０１は、ＤＢファイルヘッダ（DB File header）４０２、及びブロックデータ（Block data）４０３を含んで構成される。ＤＢファイルヘッダ４０２には、ＤＢファイル４０１に格納されているブロックの総数（格納ブロック総数）、ＤＢファイル４０１の更新ＩＤなどの情報が格納されている。ブロックデータ４０３は、テーブルのスキーマ、レコード、カラム、インデックス等のデータであり、ＤＢファイルヘッダ４０２に格納されたブロックの総数分だけ連続して格納されている。
【００３４】
ジャーナルファイル４０４は、ジャーナルファイルヘッダ（Journal File header）４０５、及びジャーナルブロックデータ（Journal Block data）４０６を含んで構成され、基本的にＤＢファイル４０１の構成と同様である。また、ジャーナルファイル４０４の構成は、ＲＢＪファイル２１０及びＲＦＪファイル２１１に共通の構成である。
ジャーナルファイルヘッダ４０５は、ジャーナルファイル４０４に格納されているロールバック用のブロックの総数、或いはロールフォワード用のブロックの総数が格納される。ジャーナルファイル４０４がＲＦＪファイル２１１である場合、ジャーナルファイル４０４の更新ＩＤ、用いられた更新要求（insert、update、delete）を示す更新種別の情報が格納される。
【００３５】
ジャーナルファイル４０４がＲＢＪファイル２１０である場合、ジャーナルブロックデータ４０６はロールバック用のデータであり、トランザクションの実行中に更新されるＤＢファイル４０１内のブロックＩＤと更新前のブロックイメージとが格納される。
ジャーナルファイル４０４がＲＦＪファイル２１１である場合、ジャーナルブロックデータ４０６は、ロールフォワード用のデータである。また、ジャーナルブロックデータ４０６には、コミットの代行を依頼したトランザクションにおいて更新されるＤＢファイル４０１内のブロックＩＤと更新後のブロックイメージとが格納される。
いずれの場合も、ジャーナルブロックデータ４０６は、ジャーナルファイルヘッダ４０５に格納されたブロックの総数分だけ連続して格納されている。
【００３６】
図５は、キャッシュ管理情報の構成の一例（キャッシュ管理情報５０１）を示す図である。なお、キャッシュ管理情報５０１が記憶される装置については、限定されるものではなく、ＲＡＭ１０３、記憶装置１０６等の適宜の装置に記憶されている。
キャッシュ管理情報５０１は、ＤＢエンジンのローカルキャッシュ全体を管理する情報を集めたものである。
基本情報５０２は、ブロックサイズ、更新中のＤＢファイル２０９全体のブロックの総数、ローカルキャッシュ上で保持してよい最大のブロックの総数を管理する。
【００３７】
ファイル情報５０３は、各ファイルのファイル名、ファイルに格納されているブロックの総数などを管理する。
キャッシュ情報５０４は、ローカルキャッシュ上に確保されているブロックの総数、更新種別、更新中のブロックの総数、ジャーナルファイルへ書き込んだブロックの総数、ＲＦＪファイル２１１から読み込んだブロックの総数などを管理する。
ファイル更新ＩＤ５０５は、ＤＢファイル２０９の更新ＩＤ及びＲＦＪファイル２１１の更新ＩＤを管理する。
【００３８】
本実施形態では、ローカルキャッシュ上のブロックが種類毎にリストの形式で管理（リスト管理）されており、ブロックリスト５０６は、各リストの先頭ポインタを管理する。リスト管理されるブロックリストの種類は、フリーブロックリスト、更新中ブロックリスト、代行更新中ブロックリスト、及びジャーナルブロックリストの４種である。
データの更新要求時に更新されたデータのブロックは、更新中ブロックリストで管理され、更新前ブロックは、ジャーナルブロックリストで管理される。代行更新内容の反映要求時に更新されたデータのブロックは、代行更新中ブロックリストで別途管理される。読み込まれただけで更新されていないデータのブロックは、フリーブロックリストで管理される。また、ローカルキャッシュ上の全ブロックは、上記いずれかのリストで管理されている。
【００３９】
ブロックリストのリスト構成情報５０７は、リスト順の前後へのポインタとローカルキャッシュ上のブロックデータへのポインタとを格納している。
ブロックデータ（Block data）５０８は、ローカルキャッシュ上に保持されているブロックデータである。
以下、上述のデータベース更新方法をフローチャートに従って説明する。
【００４０】
図６は、ＤＢエンジンにおける代行依頼コミット処理に係るフローチャートの一例を示す図である。ここでは、処理の主体をＣＰＵ１０１として説明するが、適宜、ＤＢエンジン２０２により処理が行われる場合を例に挙げて説明する。
Ｓ６０１では、ＣＰＵ１０１は、ＤＢファイル２０９の代行ロックが解放されているか（他のＤＢエンジン２０５が代行ロックを取得しているか）をチェックする。このとき、ＣＰＵ１０１は、解放されていると判断した場合、Ｓ６０９に処理を移し、他方、解放されていないと判断した場合、Ｓ６０２に処理を移す。
Ｓ６０２では、ＣＰＵ１０１は、ＤＢファイル２０９の排他ロックを取得したか否かを判断する。このとき、取得したと判断した場合、Ｓ６０４に処理を移し、他方、取得できなかったと判断した場合、リターンコードをＢＵＳＹに変更し（Ｓ６０３）、リターン（終了）する。なお、ＣＰＵ１０１は、Ｓ６０２において、排他ロックが取得できたと判断した場合、Ｓ６０４からＳ６０８までの通常のコミット処理に相当する処理を順次実行する。
【００４１】
Ｓ６０４では、ＣＰＵ１０１は、ローカルキャッシュ２０３内の代行更新中のブロック（Committed Dirty Block）の内容（コミットの代行を依頼した更新データ）をＤＢファイル２０９に書き込む。続いて、ＣＰＵ１０１は、ＲＦＪファイル２１１の内容をクリアする（Ｓ６０５）。より具体的には、ＣＰＵ１０１は、ジャーナルファイルヘッダ４０５のブロックの総数を「０」に変更する。続いて、ＣＰＵ１０１は、ローカルキャッシュ内の更新中のブロック（Dirty Block）の内容（コミットの代行を依頼していない更新データ）を同様にＤＢファイル２０９に書き込む（Ｓ６０６）。
続いて、ＣＰＵ１０１は、ＲＢＪファイル２１０の内容をクリアする（Ｓ６０７）。この際、ＣＰＵ１０１は、ＲＦＪファイル２１１のクリアと同様に、ジャーナルファイルヘッダ４０５のブロックの総数を「０」に変更する。続いて、ＣＰＵ１０１は、排他ロックを解放し（Ｓ６０８）、リターンする。
【００４２】
Ｓ６０９では、ＣＰＵ１０１は、更新データをＲＦＪファイル２１１に書き込む。なお、ＣＰＵ１０１は、適宜のタイミングで更新ロックを取得している。続いて、ＣＰＵ１０１は、ＲＢＪファイル２１０の内容をクリアする（Ｓ６１０）。より具体的には、ＣＰＵ１０１は、ジャーナルファイルヘッダ４０５のブロックの総数を「０」に変更する。続いて、ＣＰＵ１０１は、更新ロックを解放し（Ｓ６１１）、リターンする。
【００４３】
図７は、ＤＢエンジンにおける代行更新内容反映処理に係るフローチャートの一例を示す図である。ここでは、処理の主体をＣＰＵ１０１として説明するが、適宜、ＤＢエンジン２０５により処理が行われる場合を例に挙げて説明する。
Ｓ７０１では、ＣＰＵ１０１は、ＲＦＪファイル２１１の更新をファイル更新ＩＤ５０５によってチェックする。このとき、ＣＰＵ１０１は、更新されていると判断した場合、Ｓ７０２に処理を移し、他方、更新されていないと判断した場合、リターンする。
Ｓ７０２では、ＣＰＵ１０１は、ＲＦＪファイル２１１のジャーナルファイルヘッダ４０５にある更新種別の情報から、反映を許容する更新処理であるかをチェックする。このとき、ＣＰＵ１０１は、許容する更新処理であると判断した場合、Ｓ７０３に処理を移し、他方、許容できない更新処理であると判断した場合、リターンする。
Ｓ７０３では、ＣＰＵ１０１は、ＲＦＪファイル２１１のブロックの内容をローカルキャッシュへ読み込み、リターンする。
【００４４】
図８は、ＤＢエンジンにおける代行コミット処理に係るフローチャートの一例を示す図である。ここでは、処理の主体をＣＰＵ１０１として説明するが、適宜、ＤＢエンジン２０５により処理が行われる場合を例に挙げて説明する。
Ｓ８０１では、ＣＰＵ１０１は、ＤＢファイル２０９の更新ロックを取得したか否かを判断する。このとき、ＣＰＵ１０１は、取得したと判断した場合、Ｓ８０３に処理を移し、他方、取得できなかったと判断した場合、リターンコードをＢＵＳＹに変更し（Ｓ８０２）、リターンする。
Ｓ８０３では、ＣＰＵ１０１は、代行更新内容反映処理を実行し、Ｓ８０４に処理を移す。代行更新内容反映処理は、図７で示したフローチャートに基づく処理である。
【００４５】
Ｓ８０４では、ＣＰＵ１０１は、ＤＢファイル２０９の排他ロックを取得したか否かを判断する。このとき、ＣＰＵ１０１は、取得したと判断した場合、Ｓ８０６に処理を移し、他方、取得できなかったと判断した場合、更新ロックを解放し（Ｓ８０５）、リターンコードをＢＵＳＹに変更し（Ｓ８０２）、リターンする。
Ｓ８０６では、ＣＰＵ１０１は、ローカルキャッシュ２０６内の代行更新中のブロックの内容をＤＢファイル２０９に書き込む。続いて、ＣＰＵ１０１は、ＲＦＪファイル２１１の内容をクリアする（Ｓ８０７）。続いて、ＣＰＵ１０１は、更新ロックおよび排他ロックを解放し、共有ロックを取得し（Ｓ８０８）、リターンする。即ち、トランザクションについては実行中であり、ＣＰＵ１０１は、共有ロックを取得している状態でリターンする。
【００４６】
図９は、ＤＢエンジンにおけるリカバリ処理に係るフローチャートの一例を示す図である。ここでは、処理の主体をＣＰＵ１０１として説明するが、適宜、ＤＢエンジン２０５により処理が行われる場合を例に挙げて説明する。
ここで、リカバリ処理は、ＤＢファイル２０９への接続時に実行される。また、ＣＰＵ１０１は、必要に応じてリカバリを実行する。また、ＣＰＵ１０１は、同時に他のＤＢエンジン２０２におけるリカバリ処理を実行中、或いは更新処理を実行中と考えられる場合は何もせずに終了し、次のデータベース操作時にリカバリ処理が必要であるか否かを再チェックする。
【００４７】
Ｓ９０１では、ＣＰＵ１０１は、ジャーナルファイル内の格納ブロック総数からブロックデータ（ジャーナルデータ）の存在をチェックする。この際、ＲＦＪファイル２１１、及びＲＢＪファイル２１０ともにチェックする。このとき、ＣＰＵ１０１は、データが存在すると判断した場合、Ｓ９０２に処理を移し、他方、データが存在しないと判断した場合、そのままリターンする。
Ｓ９０２では、ＣＰＵ１０１は、ＤＢファイル２０９の代行ロックが解放されているかをチェックする。このとき、ＣＰＵ１０１は、解放されていると判断した場合、Ｓ９０３に処理を移し、他方、解放されていないと判断した場合、リターンする。
Ｓ９０３では、ＣＰＵ１０１は、ＤＢファイル２０９の排他ロック（更新ロックのための排他ロックを含む。）を取得したか否かを判断する。このとき、ＣＰＵ１０１は、取得したと判断した場合、Ｓ９０４に処理を移し、他方、取得できなかったと判断した場合、そのままリターンする。
【００４８】
Ｓ９０４では、ＣＰＵ１０１は、ＲＦＪファイル２１１内にブロックデータ（ＲＦＪデータ）が存在するかをチェックする。このとき、ＣＰＵ１０１は、存在すると判断した場合、Ｓ９０５に処理を移し、他方、存在しないと判断した場合、Ｓ９０８に処理を移す。
Ｓ９０５では、ＣＰＵ１０１は、ＲＦＪファイル２１１のブロックデータをローカルキャッシュ２０６内に読み込む。続いて、ＣＰＵ１０１は、読み込まれたブロックの内容、即ちローカルキャッシュ２０６内の代行更新中のブロックの内容をＤＢファイル２０９に書き込む（Ｓ９０６）。続いて、ＣＰＵ１０１は、ＲＦＪファイル２１１の内容をクリアし（Ｓ９０７）、Ｓ９０８に処理を移す。
【００４９】
Ｓ９０８では、ＣＰＵ１０１は、ＲＢＪファイル２１０内にブロックデータ（ＲＢＪデータ）が存在するかをチェックする。このとき、ＣＰＵ１０１は、存在すると判断した場合、Ｓ９０９に処理を移し、他方、存在しないと判断した場合、Ｓ９１２に処理を移す。Ｓ９０９では、ＣＰＵ１０１は、ＲＢＪファイル２１０のブロックデータをローカルキャッシュ２０６内に読み込む。続いて、ＣＰＵ１０１は、読み込まれたブロックの内容、即ちローカルキャッシュ２０６内のブロックの内容をＤＢファイル２０９に書き込む（Ｓ９１０）。続いて、ＣＰＵ１０１は、ＲＢＪファイル２１０の内容をクリアし（Ｓ９１１）、Ｓ９１２に処理を移す。
Ｓ９１２では、ＣＰＵ１０１は、取得した排他ロックを解放し、リターンする。
【００５０】
＜その他の実施形態＞
第１の実施形態では、代行更新内容反映処理においてＲＦＪファイル２１１のブロックデータをローカルキャッシュ内に読み込んでいたが、ブロックＩＤのリストのみを読み込んでもよい。この場合は、参照するブロックＩＤが同リストに存在するときに、ＲＦＪファイル２１１から読み出すことになるが、代行更新内容反映処理は高速になる。
また、ＲＦＪファイル２１１内においてブロックＩＤのリストを保持してもよい。この場合は、代行依頼コミット処理が代行コミット処理前に複数回実行されたときに、同ブロックの更新データを二重に保持することを防ぐことが可能となる。
また、代行ロックの取得および解放をトランザクションの開始時および終了時に行うようにしているが、独立させて実施してもよい。
以上、上述した各実施形態によれば、検索トランザクションが実行中でも更新トランザクションにおいてはコミットの代行を依頼することで終了することができる。また、上述した各実施形態によれば、検索トランザクションにおいて指示するタイミングで、代行が依頼された更新データを、キャッシュを廃棄せずに反映させることができる。
【００５１】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【００５２】
上述した実施形態の構成によれば、記憶部のデータと記憶部から読み出したデータとをより適切に管理することができる。
【００５３】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００５４】
１０１  ＣＰＵ、１０２  ＲＯＭ、１０３  ＲＡＭ、１０４  入力装置、１０５  表示装置、１０６  記憶装置、１０７  通信装置、１０８  バス
【図１】
2013092836.tif 000003
【図２】
2013092836.tif 000004
【図３】
2013092836.tif 000005
【図４】
2013092836.tif 000006
【図５】
2013092836.tif 000007
【図６】
2013092836.tif 000008
【図７】
2013092836.tif 000009
【図８】
2013092836.tif 000010
【図９】
2013092836.tif 000011