(57)【要約】【課題】デッドロックを回避し、かつ高い処理性能を保ってデータアクセスを行なう。【解決手段】データアクセス装置は、データ記憶部に記憶された複数のデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部を備え、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対する複数のデータアクセス要求の入力を受け付けて記憶し、順序記憶部に記憶されている前記順序に応じて、記憶した複数のデータアクセス要求の実行順序を判定し、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、記憶したデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、全てのロックを解除する。【選択図】図１
2011096065.tif 000002
【特許請求の範囲】
【請求項１】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部にアクセスするデータアクセス装置であって、
前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、
前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部と、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるデータアクセス要求登録部と、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定する実行順序ソート部と、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、前記実行順序ソート部によって判定された前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するデータアクセス要求実行部と、
を備えることを特徴とするデータアクセス装置。
【請求項２】
前記データアクセス要求登録部は、複数の前記データ単位に対する複数の前記データアクセス要求が予め対応付けられた業務処理要求の入力を受け付け、入力された当該業務処理要求に対応する前記データアクセス要求を前記データアクセス要求記憶部に記憶させる
ことを特徴とする請求項１に記載のデータアクセス装置。
【請求項３】
前記順序記憶部には、複数の前記データ単位のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、相対的にアクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されている
ことを特徴とする請求項１または請求項２に記載のデータアクセス装置。
【請求項４】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のデータアクセス方法であって、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるステップと、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定するステップと、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、判定した前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するステップと、
を備えることを特徴とするデータアクセス方法。
【請求項５】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のコンピュータに、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるステップと、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定するステップと、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、判定した前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するステップと、
を実行させるデータアクセスプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デッドロックを回避し、かつ効率よくデータアクセスを行なう技術に関する。
【背景技術】
【０００２】
コンピュータ処理において、並列処理を行うプロセスあるいはスレッドなどの複数の処理単位が互いの処理終了を待つことにより、いずれもの処理が終了しないデッドロックが発生することがある。例えば、複数の処理単位が同一のデータファイルやデータベーステーブルに含まれるデータの更新を行なう際、データの整合性を保つために他の処理単位によって更新されないようにデータをロックして排他制御を行うことがある。このような場合、複数の処理単位が互いにロックしたデータの解放を待つことにより停止状態となることがある。
このようなデッドロックを避けるために、例えば特許文献１には、デッドロックが発生する可能性のある複数のファイルにデータの更新を行なう場合、更新対象である全てのデータを予めロックしてから更新を行なう技術が示されている。特許文献２には、更新対象であるデータを仮想領域に読み込み、仮想領域において演算処理を行った後にデータをロックし、演算結果のみをデータに更新して反映させる技術が示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−７１４８号公報
【特許文献２】特開２００８−１６５２７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載された技術では、アクセス対象である複数のデータの全てを予めロックし、アクセス処理が完了してからロックを解除しているため、ロックされたデータにアクセスする処理を行う全ての他の処理単位が待ち状態となり、処理並行性が損なわれてスループットが悪化する。特許文献２に記載された技術では、仮想領域に読み込んだ後、実データに反映させるまでの間に他のアクセス処理が行われた場合などには、排他エラーとしてロールバックなどの処理が行われることになる。これでは、データのアクセス処理が集中する場合には排他エラーが頻発し、処理性能が悪化する。
【０００５】
本発明は、このような状況に鑑みてなされたもので、デッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうデータアクセス装置、データアクセス方法およびデータアクセスプログラムを提供する。
【課題を解決するための手段】
【０００６】
上述した課題を解決するために、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部にアクセスするデータアクセス装置であって、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部と、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるデータアクセス要求登録部と、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定する実行順序ソート部と、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、実行順序ソート部によって判定された実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するデータアクセス要求実行部と、を備えることを特徴とする。
【０００７】
また、本発明は、データアクセス要求登録部が、複数のデータ単位に対する複数のデータアクセス要求が予め対応付けられた業務処理要求の入力を受け付け、入力された業務処理要求に対応するデータアクセス要求をデータアクセス要求記憶部に記憶させることを特徴とする。
【０００８】
また、本発明は、順序記憶部には、複数のデータ単位のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、相対的にアクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されていることを特徴とする。
【０００９】
また、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のデータアクセス方法であって、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるステップと、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定するステップと、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するステップと、を備えることを特徴とする。
【００１０】
また、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のコンピュータに、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるステップと、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定するステップと、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するステップと、を実行させるデータアクセスプログラムである。
【発明の効果】
【００１１】
以上説明したように、本発明によれば、データアクセス装置は、データ記憶部に記憶された複数のデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部を備え、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対する複数のデータアクセス要求の入力を受け付けて記憶し、順序記憶部に記憶されている順序に応じて、記憶した複数のデータアクセス要求の実行順序を判定し、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、記憶したデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、全てのロックを解除するようにしたので、デッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうことが可能となる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態によるデータアクセス装置の構成例を示すブロック図である。
【図２】本発明の一実施形態による業務処理の例を示す図である。
【図３】本発明の一実施形態による記憶部に記憶されるテーブルの関係を示すＥＲ図である。
【図４】本発明の一実施形態による口座テーブルに記憶される情報のデータ例を示す図である。
【図５】本発明の一実施形態による口座更新明細テーブルに記憶される情報のデータ例を示す図である。
【図６】本発明の一実施形態による保有商品テーブルに記憶される情報のデータ例を示す図である。
【図７】本発明の一実施形態による在庫更新明細テーブルに記憶される情報のデータ例を示す図である。
【図８】本発明の一実施形態による業務処理記述機構の例を示すクラス図である。
【図９】本発明の一実施形態によりインスタンス化される業務処理部とＤＢアクセス部との例を示す図である。
【図１０】本発明の一実施形態によるＤＢアクセスルール記憶部に記憶される情報のデータ例を示す図である。
【図１１】本発明の一実施形態によるデータアクセス装置の動作例を示すフローチャートである。
【図１２】本発明の一実施形態によるデータアクセス装置の動作例を示すシーケンス図である。
【図１３】本発明の一実施形態によるデータアクセス装置の動作例を示すシーケンス図である。
【図１４】従来技術によるロック範囲と本実施形態によるロック範囲とを比較する図である。
【図１５】従来技術によるデッドロックの発生例を示す図である。
【図１６】本実施形態により複数のトランザクションに基づくデータアクセスが行なわれる例を示す図である。
【図１７】本実施形態により複数のトランザクションに基づくデータアクセスが行なわれる例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の一実施形態について、図面を参照して説明する。図１は、本実施形態のデータアクセス装置１０の構成例を示すブロック図である。データアクセス装置１０はコンピュータ装置であり、ＤＢ（データベース）１１を備え、業務処理記述機構（符号ａ）である複数の業務処理部１３（業務処理部１３−１、業務処理部１３−２、・・・）と、複数のＤＢアクセス部１４（ＤＢアクセス部１４−１、ＤＢアクセス部１４−２、ＤＢアクセス部１４−３、ＤＢアクセス部１４−４、・・・）とを備えている。また、このような業務処理部１３とＤＢアクセス部１４によるデータアクセスを制御するＤＢアクセスコントロール機構（符号ｂ）である業務処理登録部１５と、ＤＢアクセスルール記憶部１７と、ＤＢアクセスソート部１８と、ＤＢアクセス実行部１９と、を備えている。
【００１４】
本実施形態では、データアクセス装置１０は、図２に示すようないわゆる複合取引の業務処理を行うものとして例を説明する。ここでは、例えばアクターＸが保有する商品Ｐを、アクターＹに対してｎ個受け渡し（ステップＳ１）、これに対し、アクターＹが、アクターＸに対して商品Ｐがｎ個分の支払を実施する（ステップＳ２）。
【００１５】
図１に戻り、ＤＢ１１は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部である。本実施形態では、ＤＢ１１には、カラム毎のデータが対応付けられたテーブルをデータ単位として、複数のテーブル１２（テーブル（口座テーブル）１２−１、テーブル（口座更新明細テーブル）１２−２、テーブル（保有商品テーブル）１２−３、テーブル（在庫更新明細テーブル）１２−４、・・・）が記憶されている。ここでは、このような４つのテーブル１２を例として説明するが、ＤＢ１１には、業務要件に応じた任意の複数のテーブル１２が記憶されるようにして良い。図３は、ＤＢ１１に記憶されているテーブルの関係を示すＥＲ（Entity Relationship）図である。
【００１６】
図４は、口座テーブル１２−１に記憶される情報のデータ例を示す図である。口座テーブル１２−１には、口座番号毎に、その口座の残高を示す情報が対応付けられて記憶される。ここでは、アクターＸに対応する口座を「００ｘ」とし、アクターＹに対応する口座を「００ｙ」として説明する。
図５は、口座更新明細テーブル１２−２のデータ例を示す図である。口座更新明細テーブル１２−２には、口座番号と、取引種別と、取引金額と、取引後残高と、更新日付とが対応付けられて記憶される。口座番号は、口座テーブル１２−１に記憶された口座番号に対応する情報である。取引種別は、入金と出金とのいずれかを示す情報である。取引金額は、対応する口座において取引された金額を示す情報である。取引後残高は、対応する取引が行われた後の口座の残高を示す情報である。更新日付は、対応する取引が行われて口座更新明細テーブル１２−２に情報が記憶された日付を示す情報である。
【００１７】
図６は、保有商品テーブル１２−３のデータ例を示す図である。保有商品テーブル１２−３には、所有者と、商品コードと、在庫との情報が対応付けられて記憶される。所有者は、対応する商品を保有する所有者（アクター）を識別する情報である。商品コードは、対応する所有者が保有する商品を識別する情報である。在庫は、対応する商品コードが示す商品の在庫数を示す情報である。
【００１８】
図７は、在庫更新明細テーブル１２−４のデータ例を示す図である。在庫更新明細テーブル１２−４には、所有者と、商品コードと、在庫更新種別と、更新後在庫数と、更新日付との情報が対応付けられて記憶される。所有者は、保有商品テーブル１２−３に記憶された所有者に対応する情報である。商品コードは、保有商品テーブル１２−３に記憶された商品コードに対応する情報である。在庫更新種別は、出庫と入庫とのいずれかを示す情報である。更新後在庫数は、対応する更新が行なわれた後の在庫数を示す情報である。更新日付は、対応する更新が行われて在庫更新明細テーブル１２−４に情報が記憶された日付を示す情報である。
【００１９】
図８は、本実施形態の業務処理記述機構が備える各部の実装例を示すクラス図である。例えば、業務処理部１３のスーパークラスとして業務処理部１３−０を定義する。業務処理部１３−０には、予め対応付けられたＤＢアクセス部１４を取得するメソッドを定義する。また、業務処理部１３−０を継承するサブクラスである業務処理部１３−１（口座更新業務処理部）と業務処理部１３−２（商品在庫更新業務部）とを定義する。例えば、業務処理部１３−１は、所有者Ｙに対応する口座００ｙから所有者Ｘに対応する口座００ｘに資金を移動させる業務処理を行う。一方、業務処理部１３−２は、所有者Ｘが所有する商品コードＰの在庫を所有者Ｙに引渡す業務処理を行う。それぞれの業務処理部１３には、商品の引渡しに伴う口座テーブルや保有商品テーブルなどにおける一連の業務処理に必要なデータアクセス要求を行う複数のＤＢアクセス部１４が対応付けられる。
【００２０】
ＤＢアクセス部１４は、ＤＢ１１に記憶される複数のテーブル１２のうちいずれかのテーブル１２に対するデータアクセス要求を行なう。ここで、データアクセスとは、例えば、データの作成（Create）、読み出し（Read）、更新（Update）、削除（Delete）のような処理である。例えば、ＤＢアクセス部１４のスーパークラスとしてＤＢアクセス部１４−０を定義する。また、ＤＢアクセス部１４−０を継承するサブクラスであり、口座テーブル１２−１に対するデータアクセスを行なうＤＢアクセス部１４−１（口座ＤＢアクセス部）と、口座更新明細テーブル１２−２に対するデータアクセスを行なう業務処理部１４−２（口座更新明細ＤＢアクセス部）と、保有商品テーブル１２−３に対するデータアクセスを行なうＤＢアクセス部１４−３（商品ＤＢアクセス部）と、在庫更新明細テーブル１２−４に対するデータアクセスを行なうＤＢアクセス部１４−４（在庫更新明細ＤＢアクセス部）とを定義する。
【００２１】
図９は、図８に示したクラス構成に基づいて、本実施形態においてインスタンス化される業務処理部１３とＤＢアクセス部１４との例を示す図である。業務処理部１３−１ａは、口座「００ｙ」から口座「００ｘ」へ１００円を移動させる業務処理を行うインスタンスである。業務処理部１３−１ａは、予め対応付けられた４つのＤＢアクセス部１４のインスタンス、すなわちＤＢアクセス部１４−１ａと、ＤＢアクセス部１４−１ｂと、ＤＢアクセス部１４−２ａと、ＤＢアクセス部１４−２ｂとのインスタンスを生成する。ここで、ＤＢアクセス部１４−１ａとＤＢアクセス部１４−１ｂとは、口座テーブル１２−１に対するデータアクセスを行なう処理部である。ＤＢアクセス部１４−１ａは口座「００ｙ」の残高から１００円を減算し、ＤＢアクセス部１４−１ｂは口座「００ｘ」の残高に１００円を加算する。ＤＢアクセス部１４−２ａとＤＢアクセス部１４−２ｂとは、口座更新明細テーブル１２−２に対するデータアクセスを行なう処理部である。ＤＢアクセス部１４−２ａは口座「００ｙ」に対する出金明細を更新し、ＤＢアクセス部１４−２ｂは口座「００ｘ」に対する入金明細を更新する。
【００２２】
業務処理部１３−２ａは、アクターＸからアクターＹへ商品Ｐを１つ移動させる業務処理を行うインスタンスである。業務処理部１３−２ａは、予め対応付けられた４つのＤＢアクセス部１４のインスタンス、すなわちＤＢアクセス部１４−３ａと、ＤＢアクセス部１４−３ｂと、ＤＢアクセス部１４−４ａと、ＤＢアクセス部１４−４ｂとのインスタンスを生成する。ここで、ＤＢアクセス部１４−３ａとＤＢアクセス部１４−３ｂとは、保有商品テーブル１２−３に対するデータアクセスを行なう処理部である。ＤＢアクセス部１４−３ａはＸの商品Ｐの在庫数を１つ減算し、ＤＢアクセス部１４−３ｂはＹの商品Ｐの在庫数を１つ加算する。ＤＢアクセス部１４−４ａとＤＢアクセス部１４−４ｂとは、在庫更新明細テーブル１２−４に対するデータアクセスを行なう処理部である。ＤＢアクセス部１４−４ａはＸの在庫更新明細に対する出庫明細を更新し、ＤＢアクセス部１４−４ｂはＹの在庫更新明細に対する入庫明細を更新する。
【００２３】
図１に戻り、業務処理登録部１５は、ＤＢ１１に記憶されたデータ単位毎にデータアクセス要求の入力を受け付けて、自身の記憶領域に備える業務処理記憶部１６に記憶させるデータアクセス要求登録部である。業務処理登録部１５は、複数のＤＢアクセス部１４のうちいずれかのＤＢアクセス部１４の登録を受け付けて業務処理記憶部１６に記憶させるようにしても良いが、本実施形態では、業務処理登録部１５は、複数のデータ単位に対する複数のＤＢアクセス部１４が予め対応付けられた業務処理部１３の入力を受け付け、入力された業務処理部１３を業務処理記憶部１６に記憶させる例を示す。具体的には、業務処理登録部１５は、インスタンス化された業務処理部１３−１および業務処理部１３−２を、業務処理記憶部１６に記憶させる。すなわち、業務処理登録部１５は、複数のデータ単位に対する複数のデータアクセス要求（ＤＢアクセス部１４）が予め対応付けられた業務処理要求（業務処理部１３）の入力を受け付けて、業務処理記憶部１６に記憶させる。
【００２４】
業務処理記憶部１６は、ＤＢ１１に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部である。本実施形態では、具体的には、インスタンス化された業務処理部１３−１および業務処理部１３−２が記憶される。上述したように、これらの業務処理部１３−１および業務処理部１３−２には、データアクセス要求を行う複数のＤＢアクセス部１４が対応付けられるものである。
【００２５】
ＤＢアクセスルール記憶部１７は、ＤＢ１１に記憶されているデータのデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部である。図１０は、ＤＢアクセスルール記憶部１７に記憶されるＤＢアクセスルールのデータ例を示す図である。ここでは、ＤＢテーブル名毎に、そのＤＢテーブルに対する順序（ＤＢテーブル更新順序）が対応付けられている。例えば、口座テーブルに対して順序「３」が、口座更新明細テーブルに対して順序「４」が、保有商品テーブルに対して順序「１」が、在庫更新明細テーブルに対して順序「２」が対応付けられている。ここでは、複数のデータ単位（テーブル）のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、アクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されている。これにより、更新される順序が後であれば、その分だけテーブルがロックされる時間が短くなるため、他の処理単位との処理並行性を高めることができる。すなわち、例えば、口座へのアクセス頻度の方が商品へのアクセス頻度よりも多いという特徴がある場合、商品よりも口座へのアクセスの順序を後にする。次に、明細系は、口座や商品の操作を実施後でないと更新後の情報が得られないので、業務的な意味順序によって口座系よりも明細系の方が順番を後にする。このように、アクセス順序をユニークにするための考え方として、業務要件としてのアクセス順と、アクセス集中にともなう性能対策としてのアクセス順をあわせてアクセス順序のルールを決定する。このようにテーブル毎のアクセス頻度に応じて順序を定める他に、例えば、レコード順（口座番号順）にアクセス順序を定めたり、レコード毎のアクセス頻度に応じてアクセス順序を定めたりするようにしても良い。
【００２６】
ＤＢアクセスソート部１８は、ＤＢアクセスルール記憶部１７に記憶されている順序に応じて、業務処理登録部１５の業務処理記憶部１６に記憶された複数のデータアクセス要求の実行順序を判定する実行順序ソート部である。具体的には、ＤＢアクセスソート部１８は、業務処理記憶部１６に記憶された複数の業務処理部１３のインスタンスに対応付けられた複数のＤＢアクセス部１４のインスタンスを抽出し、抽出したＤＢアクセス部１４のインスタンスが更新対象とするテーブルと、ＤＢアクセスルール記憶部１７に記憶されている順序とに基づいて、ＤＢアクセス部１４のインスタンスの実行順序を判定する。
【００２７】
ＤＢアクセス実行部１９は、業務処理記憶部１６に記憶されたデータアクセス要求によるデータのアクセス対象となるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、ＤＢアクセスソート部１８によって判定された実行順序に応じて順次行い、業務処理記憶部１６に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するデータアクセス要求実行部である。具体的には、ＤＢアクセス実行部１９は、ＤＢアクセスソート部１８によって判定された実行順序に応じて、ＤＢアクセス部１４のインスタンスにデータアクセスを実行させる。この際、ＤＢアクセス実行部１９は、ＤＢアクセス部１４のインスタンスによる更新対象となるテーブル毎に、更新対象テーブルをロックする。ＤＢアクセス実行部１９は、全てのＤＢアクセス部１４のインスタンスによるアクセス処理が完了した後に、全てのロックを解除する。
【００２８】
次に、本実施形態のデータアクセス装置１０の動作例を説明する。図１１は、本実施形態によるデータアクセス装置１０の動作例を示すフローチャートである。データアクセス装置１０は、まず、業務処理要件に応じた業務処理部１３のインスタンスを生成する。また、生成された業務処理部１３は、自身に対応付けられた複数のＤＢアクセス部１４のインスタンスを生成する（ステップＳ１０）。次に、業務処理登録部１５は、生成された業務処理部１３のインスタンスを業務処理記憶部１６に登録する（ステップＳ１１）。データアクセス装置１０は、他の業務処理部１３の登録を行なう場合は（ステップＳ１２：業務処理部あり）、ステップＳ１０に戻る。
【００２９】
ステップＳ１２において他の業務処理部１３の登録を行なわない場合は（ステップＳ１２：業務処理部登録完了）、ＤＢアクセス実行部１９が、業務処理記憶部１６に記憶された業務処理部１３から、その業務処理部１３に対応付けられたＤＢアクセス部１４を取り出す（ステップＳ１３）。ＤＢアクセスソート部１８は、ＤＢアクセスルール記憶部１７に記憶された順序に基づいて実行順序を判定し、ＤＢアクセス部１４をソートする（ステップＳ１４）。ＤＢアクセス実行部１９は、ＤＢアクセスソート部１８によって判定された順序に応じて、ＤＢアクセス部１４によるデータアクセス処理を実行させる（ステップＳ１５）。
【００３０】
ステップＳ１５において実行されたデータアクセス処理が異常終了すれば、ＤＢアクセス実行部１９は、更新したデータをロールバックして定められた例外処理を実行し（ステップＳ１７）、処理を終了する。ステップＳ１５において実行されたデータアクセス処理が正常終了した後、ＤＢアクセス実行部１９は、実行されていない他のＤＢアクセス部１４が存在すれば、ステップＳ１５に戻る（ステップＳ１８：ＤＢアクセス部あり）。業務処理記憶部１６に記憶された業務処理部１３に対応する全てのＤＢアクセス部１４によるデータアクセス処理が終了すれば（ステップＳ１８：すべて実行終了）、処理を終了する。
【００３１】
ここでは、データアクセス装置１０が業務処理部１３のインスタンスを生成した際に、業務処理部１３が自身に対応付けられた複数のＤＢアクセス部１４のインスタンスを生成する例を説明したが、業務処理部１３の登録後、実行前（例えば、ステップＳ１３の前）にＤＢアクセス部１４のインスタンスを生成するようにしても良い。
【００３２】
図１２および図１３は、図１１を参照して説明したデータアクセス装置１０の動作例を、より具体的に示すシーケンス図である。データアクセス装置１０は、アクターＸからアクターＹに商品Ｐを１つ移動させる業務処理部１３−２のインスタンスである業務処理部１３−２ａを生成する（ステップＳ２１)。データアクセス装置１０は、生成された業務処理部１３−２ａを業務処理登録部１５に登録する。業務処理登録部１５は、業務処理部１３−２ａの登録を受け付ける（ステップＳ２２)。次に、データアクセス装置１０は、アクターＹに対応する口座００ｙから、アクターＸに対応する口座００ｘに１００円を移動させる業務処理部１３−１のインスタンスである業務処理部１３−１ａを生成する（ステップＳ２３)。データアクセス装置１０は、生成された業務処理部１３−１ａを業務処理登録部１５に登録する。業務処理登録部１５は、生成された業務処理部１３−１ａの登録を受け付ける（ステップＳ２４)。
【００３３】
データアクセス装置１０は、業務処理登録部１５に対してデータアクセスの実行要求を行う（ステップＳ２５）。ＤＢアクセス実行部１９が、業務処理登録部１５に記憶された複数の業務処理部１３のインスタンスを読み出すと（ステップＳ２６、Ｓ２７）、業務処理部１３−２ａは、自身に対応付けられたＤＢアクセス部１４−３ａと、ＤＢアクセス部１４−４ａと、ＤＢアクセス部１４−３ｂと、ＤＢアクセス部１４−４ｂとのインスタンスを生成する（ステップＳ２８〜Ｓ３１）。
【００３４】
図１３に進み、業務処理部１３−１ａは、自身に対応付けられたＤＢアクセス部１４−１ａと、ＤＢアクセス部１４−２ａと、ＤＢアクセス部１４−１ｂと、ＤＢアクセス部１４−２ｂとのインスタンスを生成する（ステップＳ３２〜Ｓ３６）。ＤＢアクセスソート部１８は、業務処理部１３−２ａによって生成され業務処理登録部１５に記憶された複数のＤＢアクセス部１４のインスタンスと、業務処理部１３−１ａによって生成され業務処理登録部１５に記憶された複数のＤＢアクセス部１４のインスタンスとに基づいて、データアクセスの実行順序を判定する（ステップＳ３７）。
【００３５】
ＤＢアクセス実行部１９は、ＤＢアクセスソート部１８によって判定された実行順序に基づいて、まず、保有商品テーブル１２−３をロックし、保有商品テーブル１２−３に対するデータアクセスを行なうＤＢアクセス部１４−３ａとＤＢアクセス部１４−３ｂとを実行させる（ステップＳ３８、Ｓ３９）。次に、在庫更新明細テーブル１２−４をロックし、在庫更新明細テーブル１２−４に対するデータアクセスを行なうＤＢアクセス部１４−４ａとＤＢアクセス部１４−４ｂとを実行させる（ステップＳ４０、Ｓ４１）。次に、口座テーブル１２−１をロックし、口座テーブル１２−１に対するデータアクセスを行なうＤＢアクセス部１４−１ｂとＤＢアクセス部１４−１ａとを実行させる（ステップＳ４２、Ｓ４３）。次に、口座更新明細テーブル１２−２をロックし、口座更新明細テーブル１２−２に対するデータアクセスを行なうＤＢアクセス部１４−２ｂとＤＢアクセス部１４−２ａとを実行させる（ステップＳ４４、Ｓ４５）。
【００３６】
このようにすれば、並行して処理を行う複数の処理単位間でのデッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうことが可能となる。図１４は、従来技術によるデータアクセス処理（符号ａ）と、本実施形態によるデータアクセス処理（符号ｂ）との業務処理イメージを示す図である。従来技術では、Ａテーブルと、Ｂテーブルと、Ｃテーブルとにアクセスを行なう場合、Ａテーブルをロックして情報を読み込んだ後に、Ｂテーブルをロックして情報を読み込み、Ｃテーブルをロックして情報を読み込む。そして、全ての計算処理、アクセス処理が完了した後に、ロックを解除している。
【００３７】
これに対し、本実施形態では、業務処理の登録を行った後、業務処理に対応付けられたＤＢアクセス部をソートして、テーブル毎にロックとデータアクセスとの処理を順次行っている。これにより、それぞれのデータ単位でのロック時間を従来に比べて短くすることができる。さらに、相対的にアクセス頻度の高いデータ単位への更新を、相対的にアクセス頻度の低い他のデータ単位への更新の後に行なうことで、アクセス頻度の高いデータ単位のロック時間をより短くすることが可能となる。
【００３８】
図１５は、お金の移動という業務処理を、削減して増加するというロジックで構成した場合、複数の処理単位（トランザクション）によりデータアクセスが行なわれる例を示すシーケンス図である。例えば、トランザクション１（Ｔｒ１）は、Ａ口座をロックして残高の削減を行い（ステップＳ５１）、トランザクション２（Ｔｒ２）が、Ｂ口座をロックして残高の削減を行なう（ステップＳ５２）。次に、Ｔｒ１が、Ｂ口座に対する残高の増加を行おうとする場合（ステップＳ５３）、Ｂ口座はＴｒ２によりロックされているため、待ちとなる。同様に、Ｔｒ２が、Ａ口座に対する残高の増加を行おうとする場合（ステップＳ５４）、Ａ口座はＴｒ１によりロックされているため、デッドロックが発生してデータアクセスできない。
【００３９】
これに対し、図１６は、本実施形態のデータアクセス装置１０を適用して、複数のトランザクションによりデータアクセスが行なわれる例を示すシーケンス図である。ここでは、Ｔｒ１において業務処理部１３が登録された後、ＤＢアクセス部１４の実行順序が判定されると（ステップＳ６１）、Ｂ口座、Ａ口座の順序でデータアクセスが行なわれる（ステップＳ６３、Ｓ６４）。一方、Ｔｒ２において業務処理部１３が登録された後、ＤＢアクセス部１４の実行順序が判定された場合（ステップＳ６２）にも、Ｂ口座、Ａ口座の順序でデータアクセスが行なわれる（ステップＳ６５、Ｓ６６）。このように、いずれのトランザクションにおいてもＢ口座に対するデータアクセスから処理され、後にＡ口座に対するデータアクセスが処理されるため、デッドロックを回避することが可能である。
図１７は、デッドロックを回避しつつ、アクセス頻度の高いＡ口座のロック時間を短縮し、同時処理並行性を高められる例である。
【００４０】
さらに、本実施形態において示したようなクラス構成を適用し、図１に示した各部を構成しておけば、これらの機能部を用いて業務処理プログラムを作成するプログラマは、デッドロック回避のための処理手順などを気にすることなく実装作業を行うことができるため、プログラムの作成効率が高まることが期待できる。
【００４１】
なお、本実施形態では、データアクセス装置１０がアクセスする記憶部は、テーブルをデータ単位としたデータベースであることとしたが、例えば、ファイルをデータ単位とした記憶領域であっても良い。また、ＤＢアクセス部１４は、本実施形態におけるデータ単位であるデータベースのテーブル毎に更新を行なう例を説明したが、例えば、テーブルにおけるレコード単位に異なるＤＢアクセス部１４を構成するようにしても良い。
【００４２】
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりデータアクセスを行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境（あるいは表示環境）を備えたＷＷＷシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００４３】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【符号の説明】
【００４４】
１０  データアクセス装置
１１  ＤＢ
１２  テーブル
１３  業務処理部
１４  ＤＢアクセス部
１５  業務処理登録部
１６  業務処理記憶部
１７  ＤＢアクセスルール記憶部
１８  ＤＢアクセスソート部
１９  ＤＢアクセス実行部
【図１】
2011096065.tif 000003
【図２】
2011096065.tif 000004
【図３】
2011096065.tif 000005
【図４】
2011096065.tif 000006
【図５】
2011096065.tif 000007
【図６】
2011096065.tif 000008
【図７】
2011096065.tif 000009
【図８】
2011096065.tif 000010
【図９】
2011096065.tif 000011
【図１０】
2011096065.tif 000012
【図１１】
2011096065.tif 000013
【図１２】
2011096065.tif 000014
【図１３】
2011096065.tif 000015
【図１４】
2011096065.tif 000016
【図１５】
2011096065.tif 000017
【図１６】
2011096065.tif 000018
【図１７】
2011096065.tif 000019