説明

データベースシステム、その情報処理方法、およびそのプログラム

【課題】 トランザクション実行中の任意のタイミングの更新状態を、他のトランザクションで利用可能とするには時間がかかる問題があった。
【解決手段】 データベースファイルのデータの一部が変更されたデータをローカルメモリに保持し、データベースファイルに書き込むためのデータをファイルバッファのバッファデータとしてファイルキャッシュに書き込み、バッファデータをデータベースファイルに書き込み、データベースファイルに書き込みを実行している間にデータベースファイルのデータの出力を要求された場合、ファイルキャッシュ保持手段が保持するバッファデータが出力を要求されたデータであるとして出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ファイルベースのデータベースシステムに関する。
【背景技術】
【0002】
近年、記憶メディアの大容量化に伴って機器の扱うデータが増大している。同時に扱うデータの種類も増えている。そのため、機器でのデータ処理負荷低減および機器内アプリケーションの開発負荷低減のために、組込み機器用のデータベースシステムが多数提案され利用されるようになってきている。
【0003】
一般にデータベースシステムでは、不可分な一連の処理をトランザクションとして管理する。処理結果はトランザクション単位で利用され、トランザクション実行中の処理途中状態結果を他が利用することを阻止する。トランザクション単位での処理結果の確定はコミットによって指示し、結果の破棄(トランザクション実行前に戻す)はロールバックによって指示する。
【0004】
また、データベースシステムはコミットした処理結果を障害等で紛失しないことを保証する。データを保証するため、コミット時にハードディスク装置等の永続化可能な記憶装置へ処理結果を書き込んでいる。書き込み途中の状態での利用は処理結果を正しく読み出すことができないため、他からのアクセスを排他する。
【0005】
永続化可能な記憶装置への書き込み時間は、通常メモリ上の更新時間と比べ数十倍以上遅い。ファイルシステムはメモリ上にファイルバッファを持ち、ファイルバッファ上に書き込まれただけでアプリケーションに終了をリターンする。これにより、アプリケーションへの書込応答時間を短縮している。実際には記憶装置に書き終わっていないので、リターン時にはデータは保証されていない。ファイルベースのデータベースシステムは、データ保証のために、ファイルバッファから記憶装置への書き込みを実行している時間に、他からのアクセスを排他する。よって、他が利用できるようになるには、書き込みが終わるまで待機し、時間がかかる。
【0006】
排他時間を短縮するために、記憶装置への書き込みが終了する前に他から利用可能とする取り組みがなされてきた。例えば特許文献1においては、データベースファイルのコピーをメモリ上に保持すると同時にコミット時の更新差分情報もトランザクション単位で保持する手法が開示されている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開平5−88954号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、データベースファイルのコピーをメモリ上に保持する手法は登録データ量に比例してメモリリソースを必要とする。そのため、近年適用が進んでいる組込み機器のような環境では適用できない。メモリ上の共有は、データの一部に制限する必要がある。
【0009】
しかし、データベースエンジンのローカルメモリ自体を共有する手法では、ローカルメモリを共有化するための制御にかかる負荷が大きいという問題がある。またファイルバッファからファイルへの書き込みを行わないコミット手法も提供されているが、その場合はロールバック用の更新前データと更新後データの整合性を失うことでリカバリが不可能になる問題がある。
【0010】
また、コミットのようなトランザクションをクローズさせる指示は、直後にファイルへの書き込み指示を実行する他のトランザクションが開始されてしまう問題もある。
【0011】
以上の問題から、組込み機器において、トランザクション実行中の任意のタイミングの更新状態を、他のトランザクションで高速に利用することはできなかった。
【0012】
本発明はこのような問題点に鑑みなされたもので、トランザクションが指示するタイミングで、トランザクション実行中に更新内容を、他から高速に利用可能とすることを目的とする。
【課題を解決するための手段】
【0013】
上記の目的は、以下のシステムによって達成できる。
【0014】
すなわち、ファイルベースのデータベースファイルのデータの一部が変更されたデータを保持するローカル保持手段と、前記データベースファイルに書き込むための前記ローカル保持手段が保持したデータを、ファイルバッファのバッファデータとしてファイルキャッシュ保持手段に書き込む仮想コミット手段と、前記仮想コミット手段で書き込まれた前記バッファデータを前記データベースファイルに書き込むコミット手段と、前記コミット手段が前記データベースファイルに書き込みを実行している間に前記データベースファイルのデータの出力を要求された場合、前記ファイルキャッシュ保持手段が保持するバッファデータが、出力を要求されたデータであるとして出力する出力手段とを有することを特徴とするデータベースシステム。
【発明の効果】
【0015】
本発明によれば、トランザクションが指示するタイミングで、トランザクション実行中に更新内容を高速に他のトランザクションへ反映することができる。これにより、更新内容をすぐに他のトランザクションから読み出すことができる。
【図面の簡単な説明】
【0016】
【図1】情報処理装置の一例であるデータベースシステムのハードウェア構成の一例を示した図である。
【図2】本実施形態におけるデータベースシステムによる仮想コミット処理動作の一例を示した図である。
【図3】本実施形態において仮想コミットを使用するアプリケーションのデータベース操作シーケンスの一例を示した図である。
【図4】本実施形態におけるロールバック用のジャーナルファイルの構成の一例を示した図である。
【図5】仮想コミットを整合性非保証で使用した時のキャッシュとジャーナルファイルの状態遷移の一例を示した図である。
【図6】本実施形態におけるデータベースエンジンの仮想コミット処理手順の一例を示したフローチャートである。
【図7】本実施形態におけるデータベースエンジンのコミット処理手順の一例を示したフローチャートである。
【図8】本実施形態におけるデータベースエンジンのロールバック処理手順の一例を示したフローチャートである。
【発明を実施するための形態】
【0017】
以下、本発明の実施形態について図面に基づいて説明する。
【0018】
〔実施形態1〕
図1は、情報処理装置(コンピュータ)の一例であるデータベースシステムのハードウェア構成の一例を示す図である。図1において、CPU(中央演算装置)101は、データベースシステムのための演算・論理判断等を行い、後述するバス108を介してバス108に接続された後述する各構成要素を制御する。ROM102は、CPU101の処理手順となる制御プログラムや各種データを記憶している。RAM103は、処理中の各種制御のための一時記憶用のワークエリアとして使用される。入力装置104は、ボタン・タッチパネル・マウス等から構成される。表示装置105は、液晶ディスプレイ等で構成される。記憶装置106は、ハードディスク等の各種ディスク機器やフラッシュメモリ等から構成される。CPU101の処理手順となる制御プログラムやデータベースに保持されるデータやロールバック用データ等の各種データが格納される。通信装置107は、USB等の外部入出力機器やモデム等の有線或いは無線通信機器から構成され、外部機器とのデータ交換を行う。バス108は、機器・装置間101〜107で制御プログラムやデータのやり取りを行うものである。
【0019】
かかる各構成要素からなる本実施形態の情報処理装置は、入力装置等からの各種イベントに応じて作動するものである。入力装置からのインタラプトが供給されると信号がCPUに送られ、それに伴ってイベントが発生する。CPUは、そのイベントに応じてROM又はRAM内に記憶される各種命令(プログラム)を読み出し、その実行によって各種の制御が行なわれる。
【0020】
図2は、本実施形態におけるデータベースシステムによる仮想コミット処理動作の一例を示す図である。
【0021】
アプリケーション201、204は、使用するデータベースエンジン202、205を使用する。データベースエンジン202、205は、データの一部をローカル保持部(以下、ローカルメモリと呼ぶ)203、206に保持する。メモリ上(RAM103)にその領域が確保される。
【0022】
ファイルシステム207は、データベースファイル209の内容の一部をファイルキャッシュ保持部208(以下、ファイルキャッシュ208と呼ぶ)に保持する。このファイルキャッシュ208は、データベースファイル209などのファイルにデータを書き込むバッファデータを保持するファイルバッファとして機能する。ローカルメモリ同様にメモリ上(RAM103)にその領域が確保される。データベースファイル209、ジャーナル保持部210(以下、ジャーナルファイル210と呼ぶ)は、記憶装置106にその領域が確保される。また、本実施形態における、ファイルシステム207は、ファイルキャッシュ208に保持されているデータを、アプリケーション204などの外部に出力することができる。
【0023】
データベースエンジン202、205は、扱うテーブルのスキーマ情報やレコード、カラムデータへのインデックスデータ等を固定長ブロックに分割して管理する。データベースファイル209に、すべてのブロックが格納されている。データベースエンジンは、アプリケーションの要求に基づいて、データベースファイル209内のブロックの一部をローカルメモリに適宜保持する。
【0024】
データベースの更新方法は、トランザクションの開始要求、レコード等のデータ更新要求を繰り返し、コミット要求によってその更新内容を記憶装置に書き込んでトランザクションを終了する。データ更新要求時点では、実際に更新するのはローカルメモリ内ののみであり、更新前のブロックイメージをジャーナルファイル210へ格納する。その後、コミットが指示された時点で、データベースファイル209に更新されたブロックを格納する。ロールバックが指示された場合は、ジャーナルファイル210に格納されたブロックイメージを使用して変更前に戻す。
【0025】
また、データベースエンジンは複数のトランザクションが同時に実行されようとする場合、矛盾無く実行させるために各トランザクションを制御する。そのために、一般的なデータベースエンジンで実施されている以下の方法を用いている。すなわち、共有ロック・排他ロック・更新ロックを用いて制御する。データの読み出しには共有ロックの取得、データのローカルメモリ上の更新には更新ロックの取得、コミットによるファイルへの書き込みには排他ロックの取得を必要とする。共有ロックの取得は、排他ロックが解放されていれば、他のトランザクションが共有・更新ロックいずれを取得していても可能である。更新ロックの取得は、更新ロック・排他ロックがともに解放されていれば可能。排他ロックの取得は、他のトランザクションのロックがすべて解放されていれば可能である。3つのロックにより、複数の読み出しトランザクションと1つの更新トランザクションの同時実行を可能する。標準的なファイルシステムは、ファイルに対し共有ロック・排他ロックの2つのロックをサポートしている。データベースエンジンは、ファイルシステムがサポートしていない更新ロックを、データベースファイルの一部の領域に対する排他ロックによって実現している。ロックが取得できない場合は、データベースエンジンはBUSYであることを示すコードをアプリケーションに返し、リトライするか否かをアプリケーションが判断する。
【0026】
以上から、データベースの更新において、トランザクション開始時に共有ロック、データ更新時に更新ロック、コミット時に排他ロックの取得をそれぞれ要する。コミットによりトランザクションが終了すると、すべてのロックは解放される。トランザクション実行中に動作する仮想コミットは、更新ロックを取得している状態で終了する。
【0027】
アプリケーション201は、デバイスの一機能を担当し、その処理の実行段階に応じて処理結果を含むステータスデータを、データベースエンジン201を用いてデータベースに格納している。デバイスの一機能とは、例えばデジタル複合機にデータベースを適用した場合、コピー・印刷・スキャン送信機能等である。その場合、ステータスデータは、処理済枚数,課金情報,エラー情報等のログ情報である。
【0028】
アプリケーション204は、デバイスのステータス表示機能を担当、アプリケーション201の担当する機能の実行状態をユーザに提示している。アプリケーション204は、アプリケーション201が更新した結果をリアルタイムに表示している。
【0029】
仮想コミット処理は、アプリケーション201のトランザクションが指示するタイミングで、トランザクション実行中に更新内容を高速に他のトランザクションへ反映する。これにより、アプリケーション204で更新内容をすぐに読み出すことができる。
【0030】
アプリケーション201は、データベースエンジン202に対し、複数のデータ更新を指示する。データベースエンジン202は、指示された更新内容に基づき、ローカルメモリ203内に保持するブロックの内容を更新する。同時に、データベースエンジン202は、更新前のブロックの内容をジャーナルファイル210に対応するファイルキャッシュ208へ書き込むように、ファイルシステム207に指示する。ステータス表示に必要なデータの更新が終了した段階で、アプリケーション201は、データベースエンジン202に仮想コミットを指示する。
【0031】
データベースエンジン202は、ファイルシステム207にジャーナルファイル210のファイル同期を指示し、ジャーナルファイル210への更新前ブロックのデータ書き込みを保証する。次に、データベースエンジン202は、ファイルシステム207にローカルメモリ203内にある更新済データをデータベースファイル209に対応するファイルキャッシュ208へ書き込むように指示する。
【0032】
アプリケーション204は、データベースエンジン205に対し、定期的に更新内容の検索を実行するため、データベースのデータの出力を要求する。データベースエンジン205は、データベースファイル209に保持されるブロックの内容の取得を、ファイルシステム207に要求する。ファイルシステム207は、データ取得要求に対し、既に対象ブロックがファイルキャッシュ208に読み込まれていた場合、ファイルキャッシュ208から出力する。ファイルキャッシュ208に存在しない場合は、通常どおり、データベースファイル209から読み出し可能になるまで待機して出力してもよい。
【0033】
通常のファイルデータベースであれば、アプリケーションによって更新を実行している間、データベースファイルのデータは確定していないため、取得することができない。本実施形態では、アプリケーション201による仮想コミット指示によってファイルキャッシュ208に更新データを書き込む。そして、書き込まれた更新データは、データベースファイル209に実際は書き込まれていなくても、データベースエンジン205がファイルシステム207から取得することができる。
【0034】
以上により、アプリケーション201のトランザクションが指示するタイミングで、トランザクション実行中に更新内容を高速に他のトランザクションへ反映する。これにより、アプリケーション204で更新内容をすぐに読み出すことができる。デジタル複合機に適用した場合では、コピーや印刷実行中の処理途中枚数等のステータス情報をリアルタイムにユーザに提示することが可能となる。
【0035】
また、仮想コミットを指示する際に、ジャーナルファイル210へのファイル同期を行わないように指示することも可能である。この場合は、ロールバック用データのファイル書き込みが保証されていない。つまりデータベースファイル209とジャーナルファイル210との整合性が保証されないため、障害時のリカバリ処理が実行できなくなる。リカバリ時はバックアップされたデータベースファイルからリストアすることが必要となる。
【0036】
以上のような整合性非保証(ジャーナルファイル210へのファイル同期を行わない)を指示した仮想コミットは、基本的にロールバック用データのファイル書き込みを行わないためさらに高速に処理することが可能である。本実施形態においては、仮想コミット時に整合性保証・非保証を指示することが可能である。
【0037】
図3は、本実施形態において仮想コミットを使用するアプリケーションのデータベース操作シーケンスの一例を示す図である。
【0038】
具体的にはアプリケーション201がデータベースエンジン202への更新処理におけるクエリシーケンスである。アプリケーション201による更新トランザクションの全体シーケンス303は、開始要求(begin)で始まり、コミット要求(commit)で終了する。この間、他のアプリが更新トランザクションを開始することはできない。アプリケーション201は、処理のステータス情報を3つのテーブルへの更新処理で行っている。アプリケーション204によるステータス表示を更新するための更新処理301は、テーブル1〜3への3つの更新要求(update)から成る。テーブル1のみを更新した状態では更新内容の整合性が取れていないため、ステータス表示に使用することはできない。3つのテーブルへの更新が終了した段階で、仮想コミット要求(virtual−commit)によって整合性のとれた更新内容をアプリケーション204で使用可能になる。処理の進捗に合わせて実行される次の更新処理302の結果を、再び仮想コミット要求によって他から使用可能とし、ステータス情報が更新されていくことになる。仮想コミット要求は、アプリケーション201によって整合性保証モードが指示される。
【0039】
アプリケーション201は、数回の仮想コミット要求によってステータスを更新しながら処理を進め、アプリの処理終了後のステータス表示も終了した後、最終的にコミット要求によってデータを確定している。
【0040】
アプリケーション204は、検索によって更新結果を得るトランザクションを定期的に繰り返すことで、アプリケーション201による任意の更新情報を利用している。
【0041】
図3で示したシーケンスは、最終的にコミット要求によって確定しているが、アプリケーション201の処理結果によってはロールバック要求によって更新前に戻すことが可能である。その場合、直前の仮想コミット時までの更新内容を確定することも可能である。ロールバックを要する状況が更新処理302の途中に生じた場合、直前の仮想コミット時点、つまり更新処理301の結果を確定させることが可能である。本実施形態では、ロールバック要求時にアプリケーションが選択可能である。
【0042】
図4は、本実施形態におけるロールバック用のジャーナルファイルの構成の一例を示す図である。
【0043】
ジャーナルヘッダ401は、ジャーナルファイル210に格納されているロールバック用のブロック総数やデータベースファイル209の整合性非保証フラグが格納される。
【0044】
ロールバック用データ402は、トランザクション実行中に更新されたデータベースファイル209内のブロックのIDと更新前のブロックイメージが格納される。ロールバック用データ402は、ジャーナルヘッダ401に格納されたブロック総数分だけ連続して格納されている。
【0045】
図5は、仮想コミットを整合性非保証で使用した時のキャッシュとジャーナルファイルの状態遷移の一例を示す図である。
【0046】
(状態501)ローカルメモリ及びジャーナルファイル210の初期状態501では、ジャーナルファイル210にデータは格納されていない。
【0047】
(状態502)次に、更新要求実施によって、ローカルメモリのデータ1がジャーナルファイル210に書き込まれるときに、ローカルメモリのデータ1が書かれていたブロックの内容を5に変更する。変更する更新要求後に整合性非保証の仮想コミット要求が実行された状態502となる。このときの仮想コミット要求実施において、非保証フラグをonにしてジャーナルファイル210のファイル書き込み(データ保証)が実行される。
【0048】
(状態503)続けて、ローカルメモリのデータ3がジャーナルファイル210に書き込まれるときに、ローカルメモリのデータ3が書かれていたブロックの内容を6に変更する。変更する更新要求後に整合性非保証の仮想コミット要求が実行された状態503となる。既に整合性非保証フラグはジャーナルファイル210に書き込まれているので、フラグを書き直してジャーナルファイル210へ書き込む(データ保証)必要はない。この状態での整合性非保証の仮想コミットは、ファイルアクセスをまったく必要としないため、より高速に処理することが可能である。更新要求実施において、ジャーナルファイル210のファイルキャッシュ208に、更新されたブロックの更新前イメージである3が書き込まれているのみである。図5のジャーナルファイル210内における破線で示されたブロックは、ファイルキャッシュ208までの書き込みは済んでいるが、データベースファイル209までの書き込みが済んでいる保証ができないものを示している。
【0049】
(状態504)更に続けて、ローカルメモリのデータ4がジャーナルファイル210に書き込まれるときに、ローカルメモリのデータ4が書かれていたブロックの内容を7に変更する。変更する更新要求後に整合性保証の仮想コミット要求が実行された状態504となる。整合性非保証から整合性保証に切り替わるため、ジャーナルファイル210はロールバックに必要な内容1、3、4が書き込まれている(データ保証)。また、非保証フラグはoffに戻されている。
【0050】
以下、上述のデータベース更新手段をフローチャートに従って説明する。
【0051】
(仮想コミット処理)図6は、本実施形態におけるデータベースエンジンの仮想コミット処理手順の一例を示したフローチャートである。仮想コミットの処理手順について図6を用いて説明する。
【0052】
ステップS601において、CPU101は、仮想コミット要求時に指示された整合性保証モードを確認する。整合性保証が指示された場合、ステップS602へ進む。一方、整合性保証が指示されなかった場合、ステップS605へ進む。
【0053】
ステップS602において、ステップS601で整合性保証が指示された場合、ジャーナルファイルヘッダに存在する整合性非保証フラグを確認する。ステップS602での非保証フラグがonであった場合、ステップS603へ進む。一方、非保証フラグがoffであった場合、フラグの変更処理は不要で、そのままステップS604へ進む。
【0054】
ステップS603において、ステップS602で非保証フラグがonであった場合、非保証フラグをoffに変更してファイルキャッシュ208に書き込んでから、ステップS604へ進む。
【0055】
ステップS604において、ジャーナルファイル210のファイル同期処理が行われ、ロールバック用データのファイル書き込みが保証される。
【0056】
ステップS605において、ステップS601で整合性非保証が指示された場合も、ジャーナルファイルヘッダに存在する整合性非保証フラグを確認する。非保証フラグがoffであった場合は、ステップS606へ進む。非保証フラグがonであった場合は、ステップS607へ進む。
【0057】
ステップS606において、非保証フラグをonに変更してファイルキャッシュ208に書き込んでから、ステップS604へ進む。ステップS604では、ジャーナルファイル210のファイル同期処理が行われ、非保証フラグのファイル書き込みが保証される。ステップS604のジャーナルファイル210の同期処理終了後、ステップS607へ進む。
【0058】
ステップS607において、CPU101は、取得済であるデータベースファイル209の更新ロックを解放し、排他ロックを取得する。ファイルキャッシュ208への書き込み途中状態を、他のトランザクションに読み込まれないようにするためである。排他ロックが取得できない場合、ステップS610へ進む。排他ロックが取得できた場合、ステップS608へ進む。
【0059】
ステップS608において、ステップS607で排他ロックが取得できた場合、ローカルメモリ203内の更新済ブロックをファイルキャッシュ208へ書き込む。書き込みが終了したら、ステップS609へ進む。
【0060】
ステップS609において、ステップS607で取得した排他ロックを解放してから更新ロックを取得後、リターンする。トランザクションは実行中であり、更新ロックを取得している状態でリターンする。
【0061】
ステップS610において、ステップS607で排他ロックが取得できなかった場合、リターンコードをBUSYに変更し、リターンする。
【0062】
(コミット処理)図7は、データベースエンジンのコミット処理の詳細を示したフローチャートである。データベースエンジンのコミット処理を図7を用いて説明する。なお、コミット処理を実行している間、仮想コミットされたファイルキャッシュ208からのデータ読み出し実行を開放する。
【0063】
ステップS701において、CPU101は、ジャーナルファイル210のファイル同期処理を行い、ロールバック用データのファイル書き込みが保証される。これにより、整合性保証が可能となる。
【0064】
ステップS702において、ジャーナルファイルヘッダに存在する整合性非保証フラグを確認する。整合性非保証フラグがonであることを確認された場合、ステップS703へ進む。整合性非保証フラグが、offであることを確認された場合、ステップS705へ進む。
【0065】
ステップS703において、ステップS702で整合性非保証フラグがonであることを確認された場合、整合性非保証フラグをonからoffに変更してファイルキャッシュ208へ書き込み、ステップS704へ進む。
【0066】
ステップS704において、再びジャーナルファイル210のファイル同期処理を行って、非保証フラグoffのファイル書き込みを保証する。整合性非保証フラグoffのファイル書き込みが終了後、ステップS705へ進む。
【0067】
ステップS705において、CPU101は、取得済であるデータベースファイル209の更新ロックを解放し、排他ロックを取得する。排他ロックを取得できない場合、ステップS710へ進む。排他ロックを取得できた場合、ステップS706へ進む。
【0068】
ステップS706において、ステップS705で排他ロックを取得できた場合、ローカルメモリ203内の更新済ブロックをファイルキャッシュ208へ書き込む。ファイルキャッシュ208への書き込みが終了して、ステップS707へ進む。
【0069】
ステップS707において、データベースファイル209のファイル同期処理を行う。これにより、全更新済データのファイル書き込みが保証される。ファイル同期処理後、ステップS708へ進む。
【0070】
ステップS708において、不要となったジャーナルファイル210内のロールバックデータを削除し、ステップS709へ進む。
【0071】
ステップS709において、CPU101は、取得した排他ロックを解放してからリターンする。トランザクションを終了した状態でリターンする。
【0072】
ステップS710において、ステップS705で排他ロックを取得できなかった場合、リターンコードをBUSYに変更し、リターンする。
【0073】
(ロールバック処理)図8は、データベースエンジンのロールバック処理の詳細を示したフローチャートである。データベースエンジンのロールバック処理を図8を用いて説明する。ここでの、ロールバック処理は、仮想コミット実行後にロールバックを行う場合、直前の仮想コミット時点までを確定することが可能である。ロールバック処理自体を実行している時の障害から、リカバリ可能となるようにジャーナルデータを確定する。
【0074】
ステップS801において、CPU101は、ジャーナルファイル210のファイル同期処理を行い、ロールバック用データのファイル書き込みが保証される。これにより、整合性保証が可能となる。
【0075】
ステップS802において、ジャーナルファイルヘッダに存在する整合性非保証フラグを確認する。整合性非保証フラグがonである場合、ステップS803へ進む。整合性非保証フラグがoffである場合、ステップS805へ進む。
【0076】
ステップS803において、ステップS802で整合性非保証フラグがonであった場合、整合性非保証フラグをonからoffに変更してファイルキャッシュ208へ書き込み、ステップS804へ進む。
【0077】
ステップS804において、再びジャーナルファイル210のファイル同期処理を行って、非保証フラグoffのファイル書き込みを保証する。整合性非保証フラグoffのファイル書き込みが終了後、ステップS805へ進む。
【0078】
ステップS805において、CPU101は、取得済であるデータベースファイル209の更新ロックを解放し、排他ロックを取得する。排他ロックを取得できない場合、ステップS812へ進む。排他ロックを取得できた場合、ステップS806へ進む。
【0079】
ステップS806において、排他ロックを取得できた場合、CPU101は、ロールバック要求時に指示された直前の仮想コミット時の更新内容を確定するか否かを確認する。直前の仮想コミット時点までを確定することが確認された場合、ステップS813へ進む。一方、直前の仮想コミット時点の更新内容を確定しないことが確認された場合、ステップS807へ進む。更新内容を確定しない場合、トランザクション開始時に戻すため、ジャーナルファイル210を用いて仮想コミットで書き込まれたデータをもとに戻していく。
【0080】
ステップS807において、ジャーナルファイル210内のロールバックデータをローカルメモリへ更新済ブロックとして読み出し、ステップS808へ進む。
【0081】
ステップS808において、ローカルメモリ内の更新済ブロック、つまり読み出されたロールバックデータをファイルキャッシュ208へ上書きし、ステップS809へ進む。
【0082】
ステップS809において、データベースファイル209のファイル同期処理を行う。これにより、ロールバックデータのファイル書き込みを保証する。すなわち、仮想コミット処理によってファイルキャッシュ208まで書き込まれていた更新データを、データベースファイル209上でもとに戻したことを保証する。
【0083】
ステップS810において、不要となったジャーナルファイル210内のロールバックデータを削除し、ステップS811へ進む。
【0084】
ステップS811において、CPU101は、取得した排他ロックを解放してからリターンする。
【0085】
ステップS812において、S805で排他ロックを取得できない場合、リターンコードをBUSYに変更してリターンする。
【0086】
ステップS813において、S806で直前の仮想コミット時点までを確定することが確認された場合、データベースファイル209のファイル同期処理を行う。これにより、仮想コミット処理によってファイルキャッシュ208まで書き込まれている更新データのデータベースファイル209へのファイル書き込みを保証する。ファイル同期処理終了後、ステップS814へ進む。
【0087】
ステップS814において、不要となったジャーナルファイル210内のロールバックデータを削除し、ステップS815へ進む。
【0088】
ステップS815において、更新途中のデータが存在するローカルメモリをクリアする。そして、ステップS811に進み、CPU101は、取得した排他ロックを解放してからリターンする。
【0089】
〔変形例〕
実施形態1では、システム共通のファイルシステムおよびそのファイルキャッシュ208を用いているが、データベースファイル209専用のファイルキャッシュ208を管理するサービスを介在させてもよい。これにより、システム全体のファイル操作の影響を受けにくくなる。
また、ロールバック時の選択は直前の仮想コミット後に戻す指示のみを可能にしている。一方、ジャーナルファイル210に仮想コミット後の更新処理に対し、同トランザクション内で再び更新されたブロックの更新前イメージも格納するようにしてもよい。これにより、ロールバック時に任意の仮想コミット時の状態に戻すことが可能になる。
また、整合性非保証フラグをジャーナルファイル210に保持していたが、データベースファイル209あるいは独立の別ファイルに保持するようにしてもよい。
【0090】
〔その他の実施形態〕
また、上述した実施形態の目的は、以下のようにすることによって達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体(又は記録媒体)を、システム或いは装置に供給する。そして、そのシステム或いは装置の中央演算処理手段(CPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行する。この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することになり、そのプログラムコードを記録した記憶媒体は上述した実施形態を構成することになる。
【0091】
更に、記憶媒体から読み出されたプログラムコードが、前記システム或いは装置に挿入された機能拡張カードや、接続された機能拡張ユニットに備わるメモリに書き込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPU等が実際の処理の一部又は全部を行い、その処理によって上述した実施形態の機能が実現される場合も含まれる。
【0092】
上述した実施形態を前記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【0093】
以上、上述した各実施形態によれば、トランザクションが指示するタイミングで、トランザクション実行中に更新内容を高速に他のトランザクションへ反映することができる。これにより、更新内容をすぐに他のトランザクションから読み出すことができる。
【0094】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。

【特許請求の範囲】
【請求項1】
ファイルベースのデータベースファイルのデータの一部が変更されたデータを保持するローカル保持手段と、
前記データベースファイルに書き込むための前記ローカル保持手段が保持したデータを、ファイルバッファのバッファデータとしてファイルキャッシュ保持手段に書き込む仮想コミット手段と、
前記仮想コミット手段で書き込まれた前記バッファデータを前記データベースファイルに書き込むコミット手段と、
前記コミット手段が前記データベースファイルに書き込みを実行している間に前記データベースファイルのデータの出力を要求された場合、前記ファイルキャッシュ保持手段が保持するバッファデータが、出力を要求されたデータであるとして出力する出力手段と
を有することを特徴とするデータベースシステム。
【請求項2】
前記ローカル保持手段のデータの一部が変更される前のロールバックデータを保持するジャーナル保持手段と、
を更に有することを特徴とする請求項1に記載のデータベースシステム。
【請求項3】
前記コミット手段が前記データベースファイルに書き込みを実行する前に、前記仮想コミット手段によって前記ファイルキャッシュ保持手段に書き込まれたバッファデータを、前記ロールバックデータに基づいて上書きするロールバック手段と、
を更に有し、
前記コミット手段が、前記上書きされたバッファデータを前記データベースファイルに書き込むことを特徴とする請求項2に記載のデータベースシステム。
【請求項4】
ファイルベースのデータベースシステムが実行する情報処理方法であって、
前記データベースシステムが有する仮想コミット手段が、前記データベースファイルに書き込むためのローカル保持手段が保持した該データベースファイルのデータの一部が変更されたデータを、ファイルバッファのバッファデータとしてファイルキャッシュ保持手段に書き込む仮想コミット工程と、
前記データベースシステムが有するコミット手段が、前記仮想コミット手段で書き込まれた前記バッファデータを前記データベースファイルに書き込むコミット工程と、
前記データベースシステムが有する出力手段が、前記コミット手段が前記データベースファイルに書き込みを実行している間に前記データベースファイルのデータの出力を要求された場合、前記ファイルキャッシュ保持手段が保持するバッファデータが、出力を要求されたデータであるとして出力する出力工程と
を有することを特徴とする情報処理方法。
【請求項5】
請求項4に記載の情報処理方法が有する各工程の処理をコンピュータに実行させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2012−128596(P2012−128596A)
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願番号】特願2010−278564(P2010−278564)
【出願日】平成22年12月14日(2010.12.14)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】