データアクセス装置、データアクセス方法およびデータアクセスプログラム
【課題】デッドロックを回避し、かつ高い処理性能を保ってデータアクセスを行なう。
【解決手段】データアクセス装置は、データ記憶部に記憶された複数のデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部を備え、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対する複数のデータアクセス要求の入力を受け付けて記憶し、順序記憶部に記憶されている前記順序に応じて、記憶した複数のデータアクセス要求の実行順序を判定し、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、記憶したデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、全てのロックを解除する。
【解決手段】データアクセス装置は、データ記憶部に記憶された複数のデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部を備え、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対する複数のデータアクセス要求の入力を受け付けて記憶し、順序記憶部に記憶されている前記順序に応じて、記憶した複数のデータアクセス要求の実行順序を判定し、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、記憶したデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、全てのロックを解除する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デッドロックを回避し、かつ効率よくデータアクセスを行なう技術に関する。
【背景技術】
【0002】
コンピュータ処理において、並列処理を行うプロセスあるいはスレッドなどの複数の処理単位が互いの処理終了を待つことにより、いずれもの処理が終了しないデッドロックが発生することがある。例えば、複数の処理単位が同一のデータファイルやデータベーステーブルに含まれるデータの更新を行なう際、データの整合性を保つために他の処理単位によって更新されないようにデータをロックして排他制御を行うことがある。このような場合、複数の処理単位が互いにロックしたデータの解放を待つことにより停止状態となることがある。
このようなデッドロックを避けるために、例えば特許文献1には、デッドロックが発生する可能性のある複数のファイルにデータの更新を行なう場合、更新対象である全てのデータを予めロックしてから更新を行なう技術が示されている。特許文献2には、更新対象であるデータを仮想領域に読み込み、仮想領域において演算処理を行った後にデータをロックし、演算結果のみをデータに更新して反映させる技術が示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2002−7148号公報
【特許文献2】特開2008−165272号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、特許文献1に記載された技術では、アクセス対象である複数のデータの全てを予めロックし、アクセス処理が完了してからロックを解除しているため、ロックされたデータにアクセスする処理を行う全ての他の処理単位が待ち状態となり、処理並行性が損なわれてスループットが悪化する。特許文献2に記載された技術では、仮想領域に読み込んだ後、実データに反映させるまでの間に他のアクセス処理が行われた場合などには、排他エラーとしてロールバックなどの処理が行われることになる。これでは、データのアクセス処理が集中する場合には排他エラーが頻発し、処理性能が悪化する。
【0005】
本発明は、このような状況に鑑みてなされたもので、デッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうデータアクセス装置、データアクセス方法およびデータアクセスプログラムを提供する。
【課題を解決するための手段】
【0006】
上述した課題を解決するために、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部にアクセスするデータアクセス装置であって、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部と、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるデータアクセス要求登録部と、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定する実行順序ソート部と、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、実行順序ソート部によって判定された実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するデータアクセス要求実行部と、を備えることを特徴とする。
【0007】
また、本発明は、データアクセス要求登録部が、複数のデータ単位に対する複数のデータアクセス要求が予め対応付けられた業務処理要求の入力を受け付け、入力された業務処理要求に対応するデータアクセス要求をデータアクセス要求記憶部に記憶させることを特徴とする。
【0008】
また、本発明は、順序記憶部には、複数のデータ単位のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、相対的にアクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されていることを特徴とする。
【0009】
また、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のデータアクセス方法であって、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるステップと、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定するステップと、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するステップと、を備えることを特徴とする。
【0010】
また、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のコンピュータに、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるステップと、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定するステップと、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するステップと、を実行させるデータアクセスプログラムである。
【発明の効果】
【0011】
以上説明したように、本発明によれば、データアクセス装置は、データ記憶部に記憶された複数のデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部を備え、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対する複数のデータアクセス要求の入力を受け付けて記憶し、順序記憶部に記憶されている順序に応じて、記憶した複数のデータアクセス要求の実行順序を判定し、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、記憶したデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、全てのロックを解除するようにしたので、デッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうことが可能となる。
【図面の簡単な説明】
【0012】
【図1】本発明の一実施形態によるデータアクセス装置の構成例を示すブロック図である。
【図2】本発明の一実施形態による業務処理の例を示す図である。
【図3】本発明の一実施形態による記憶部に記憶されるテーブルの関係を示すER図である。
【図4】本発明の一実施形態による口座テーブルに記憶される情報のデータ例を示す図である。
【図5】本発明の一実施形態による口座更新明細テーブルに記憶される情報のデータ例を示す図である。
【図6】本発明の一実施形態による保有商品テーブルに記憶される情報のデータ例を示す図である。
【図7】本発明の一実施形態による在庫更新明細テーブルに記憶される情報のデータ例を示す図である。
【図8】本発明の一実施形態による業務処理記述機構の例を示すクラス図である。
【図9】本発明の一実施形態によりインスタンス化される業務処理部とDBアクセス部との例を示す図である。
【図10】本発明の一実施形態によるDBアクセスルール記憶部に記憶される情報のデータ例を示す図である。
【図11】本発明の一実施形態によるデータアクセス装置の動作例を示すフローチャートである。
【図12】本発明の一実施形態によるデータアクセス装置の動作例を示すシーケンス図である。
【図13】本発明の一実施形態によるデータアクセス装置の動作例を示すシーケンス図である。
【図14】従来技術によるロック範囲と本実施形態によるロック範囲とを比較する図である。
【図15】従来技術によるデッドロックの発生例を示す図である。
【図16】本実施形態により複数のトランザクションに基づくデータアクセスが行なわれる例を示す図である。
【図17】本実施形態により複数のトランザクションに基づくデータアクセスが行なわれる例を示す図である。
【発明を実施するための形態】
【0013】
以下、本発明の一実施形態について、図面を参照して説明する。図1は、本実施形態のデータアクセス装置10の構成例を示すブロック図である。データアクセス装置10はコンピュータ装置であり、DB(データベース)11を備え、業務処理記述機構(符号a)である複数の業務処理部13(業務処理部13−1、業務処理部13−2、・・・)と、複数のDBアクセス部14(DBアクセス部14−1、DBアクセス部14−2、DBアクセス部14−3、DBアクセス部14−4、・・・)とを備えている。また、このような業務処理部13とDBアクセス部14によるデータアクセスを制御するDBアクセスコントロール機構(符号b)である業務処理登録部15と、DBアクセスルール記憶部17と、DBアクセスソート部18と、DBアクセス実行部19と、を備えている。
【0014】
本実施形態では、データアクセス装置10は、図2に示すようないわゆる複合取引の業務処理を行うものとして例を説明する。ここでは、例えばアクターXが保有する商品Pを、アクターYに対してn個受け渡し(ステップS1)、これに対し、アクターYが、アクターXに対して商品Pがn個分の支払を実施する(ステップS2)。
【0015】
図1に戻り、DB11は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部である。本実施形態では、DB11には、カラム毎のデータが対応付けられたテーブルをデータ単位として、複数のテーブル12(テーブル(口座テーブル)12−1、テーブル(口座更新明細テーブル)12−2、テーブル(保有商品テーブル)12−3、テーブル(在庫更新明細テーブル)12−4、・・・)が記憶されている。ここでは、このような4つのテーブル12を例として説明するが、DB11には、業務要件に応じた任意の複数のテーブル12が記憶されるようにして良い。図3は、DB11に記憶されているテーブルの関係を示すER(Entity Relationship)図である。
【0016】
図4は、口座テーブル12−1に記憶される情報のデータ例を示す図である。口座テーブル12−1には、口座番号毎に、その口座の残高を示す情報が対応付けられて記憶される。ここでは、アクターXに対応する口座を「00x」とし、アクターYに対応する口座を「00y」として説明する。
図5は、口座更新明細テーブル12−2のデータ例を示す図である。口座更新明細テーブル12−2には、口座番号と、取引種別と、取引金額と、取引後残高と、更新日付とが対応付けられて記憶される。口座番号は、口座テーブル12−1に記憶された口座番号に対応する情報である。取引種別は、入金と出金とのいずれかを示す情報である。取引金額は、対応する口座において取引された金額を示す情報である。取引後残高は、対応する取引が行われた後の口座の残高を示す情報である。更新日付は、対応する取引が行われて口座更新明細テーブル12−2に情報が記憶された日付を示す情報である。
【0017】
図6は、保有商品テーブル12−3のデータ例を示す図である。保有商品テーブル12−3には、所有者と、商品コードと、在庫との情報が対応付けられて記憶される。所有者は、対応する商品を保有する所有者(アクター)を識別する情報である。商品コードは、対応する所有者が保有する商品を識別する情報である。在庫は、対応する商品コードが示す商品の在庫数を示す情報である。
【0018】
図7は、在庫更新明細テーブル12−4のデータ例を示す図である。在庫更新明細テーブル12−4には、所有者と、商品コードと、在庫更新種別と、更新後在庫数と、更新日付との情報が対応付けられて記憶される。所有者は、保有商品テーブル12−3に記憶された所有者に対応する情報である。商品コードは、保有商品テーブル12−3に記憶された商品コードに対応する情報である。在庫更新種別は、出庫と入庫とのいずれかを示す情報である。更新後在庫数は、対応する更新が行なわれた後の在庫数を示す情報である。更新日付は、対応する更新が行われて在庫更新明細テーブル12−4に情報が記憶された日付を示す情報である。
【0019】
図8は、本実施形態の業務処理記述機構が備える各部の実装例を示すクラス図である。例えば、業務処理部13のスーパークラスとして業務処理部13−0を定義する。業務処理部13−0には、予め対応付けられたDBアクセス部14を取得するメソッドを定義する。また、業務処理部13−0を継承するサブクラスである業務処理部13−1(口座更新業務処理部)と業務処理部13−2(商品在庫更新業務部)とを定義する。例えば、業務処理部13−1は、所有者Yに対応する口座00yから所有者Xに対応する口座00xに資金を移動させる業務処理を行う。一方、業務処理部13−2は、所有者Xが所有する商品コードPの在庫を所有者Yに引渡す業務処理を行う。それぞれの業務処理部13には、商品の引渡しに伴う口座テーブルや保有商品テーブルなどにおける一連の業務処理に必要なデータアクセス要求を行う複数のDBアクセス部14が対応付けられる。
【0020】
DBアクセス部14は、DB11に記憶される複数のテーブル12のうちいずれかのテーブル12に対するデータアクセス要求を行なう。ここで、データアクセスとは、例えば、データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)のような処理である。例えば、DBアクセス部14のスーパークラスとしてDBアクセス部14−0を定義する。また、DBアクセス部14−0を継承するサブクラスであり、口座テーブル12−1に対するデータアクセスを行なうDBアクセス部14−1(口座DBアクセス部)と、口座更新明細テーブル12−2に対するデータアクセスを行なう業務処理部14−2(口座更新明細DBアクセス部)と、保有商品テーブル12−3に対するデータアクセスを行なうDBアクセス部14−3(商品DBアクセス部)と、在庫更新明細テーブル12−4に対するデータアクセスを行なうDBアクセス部14−4(在庫更新明細DBアクセス部)とを定義する。
【0021】
図9は、図8に示したクラス構成に基づいて、本実施形態においてインスタンス化される業務処理部13とDBアクセス部14との例を示す図である。業務処理部13−1aは、口座「00y」から口座「00x」へ100円を移動させる業務処理を行うインスタンスである。業務処理部13−1aは、予め対応付けられた4つのDBアクセス部14のインスタンス、すなわちDBアクセス部14−1aと、DBアクセス部14−1bと、DBアクセス部14−2aと、DBアクセス部14−2bとのインスタンスを生成する。ここで、DBアクセス部14−1aとDBアクセス部14−1bとは、口座テーブル12−1に対するデータアクセスを行なう処理部である。DBアクセス部14−1aは口座「00y」の残高から100円を減算し、DBアクセス部14−1bは口座「00x」の残高に100円を加算する。DBアクセス部14−2aとDBアクセス部14−2bとは、口座更新明細テーブル12−2に対するデータアクセスを行なう処理部である。DBアクセス部14−2aは口座「00y」に対する出金明細を更新し、DBアクセス部14−2bは口座「00x」に対する入金明細を更新する。
【0022】
業務処理部13−2aは、アクターXからアクターYへ商品Pを1つ移動させる業務処理を行うインスタンスである。業務処理部13−2aは、予め対応付けられた4つのDBアクセス部14のインスタンス、すなわちDBアクセス部14−3aと、DBアクセス部14−3bと、DBアクセス部14−4aと、DBアクセス部14−4bとのインスタンスを生成する。ここで、DBアクセス部14−3aとDBアクセス部14−3bとは、保有商品テーブル12−3に対するデータアクセスを行なう処理部である。DBアクセス部14−3aはXの商品Pの在庫数を1つ減算し、DBアクセス部14−3bはYの商品Pの在庫数を1つ加算する。DBアクセス部14−4aとDBアクセス部14−4bとは、在庫更新明細テーブル12−4に対するデータアクセスを行なう処理部である。DBアクセス部14−4aはXの在庫更新明細に対する出庫明細を更新し、DBアクセス部14−4bはYの在庫更新明細に対する入庫明細を更新する。
【0023】
図1に戻り、業務処理登録部15は、DB11に記憶されたデータ単位毎にデータアクセス要求の入力を受け付けて、自身の記憶領域に備える業務処理記憶部16に記憶させるデータアクセス要求登録部である。業務処理登録部15は、複数のDBアクセス部14のうちいずれかのDBアクセス部14の登録を受け付けて業務処理記憶部16に記憶させるようにしても良いが、本実施形態では、業務処理登録部15は、複数のデータ単位に対する複数のDBアクセス部14が予め対応付けられた業務処理部13の入力を受け付け、入力された業務処理部13を業務処理記憶部16に記憶させる例を示す。具体的には、業務処理登録部15は、インスタンス化された業務処理部13−1および業務処理部13−2を、業務処理記憶部16に記憶させる。すなわち、業務処理登録部15は、複数のデータ単位に対する複数のデータアクセス要求(DBアクセス部14)が予め対応付けられた業務処理要求(業務処理部13)の入力を受け付けて、業務処理記憶部16に記憶させる。
【0024】
業務処理記憶部16は、DB11に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部である。本実施形態では、具体的には、インスタンス化された業務処理部13−1および業務処理部13−2が記憶される。上述したように、これらの業務処理部13−1および業務処理部13−2には、データアクセス要求を行う複数のDBアクセス部14が対応付けられるものである。
【0025】
DBアクセスルール記憶部17は、DB11に記憶されているデータのデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部である。図10は、DBアクセスルール記憶部17に記憶されるDBアクセスルールのデータ例を示す図である。ここでは、DBテーブル名毎に、そのDBテーブルに対する順序(DBテーブル更新順序)が対応付けられている。例えば、口座テーブルに対して順序「3」が、口座更新明細テーブルに対して順序「4」が、保有商品テーブルに対して順序「1」が、在庫更新明細テーブルに対して順序「2」が対応付けられている。ここでは、複数のデータ単位(テーブル)のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、アクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されている。これにより、更新される順序が後であれば、その分だけテーブルがロックされる時間が短くなるため、他の処理単位との処理並行性を高めることができる。すなわち、例えば、口座へのアクセス頻度の方が商品へのアクセス頻度よりも多いという特徴がある場合、商品よりも口座へのアクセスの順序を後にする。次に、明細系は、口座や商品の操作を実施後でないと更新後の情報が得られないので、業務的な意味順序によって口座系よりも明細系の方が順番を後にする。このように、アクセス順序をユニークにするための考え方として、業務要件としてのアクセス順と、アクセス集中にともなう性能対策としてのアクセス順をあわせてアクセス順序のルールを決定する。このようにテーブル毎のアクセス頻度に応じて順序を定める他に、例えば、レコード順(口座番号順)にアクセス順序を定めたり、レコード毎のアクセス頻度に応じてアクセス順序を定めたりするようにしても良い。
【0026】
DBアクセスソート部18は、DBアクセスルール記憶部17に記憶されている順序に応じて、業務処理登録部15の業務処理記憶部16に記憶された複数のデータアクセス要求の実行順序を判定する実行順序ソート部である。具体的には、DBアクセスソート部18は、業務処理記憶部16に記憶された複数の業務処理部13のインスタンスに対応付けられた複数のDBアクセス部14のインスタンスを抽出し、抽出したDBアクセス部14のインスタンスが更新対象とするテーブルと、DBアクセスルール記憶部17に記憶されている順序とに基づいて、DBアクセス部14のインスタンスの実行順序を判定する。
【0027】
DBアクセス実行部19は、業務処理記憶部16に記憶されたデータアクセス要求によるデータのアクセス対象となるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、DBアクセスソート部18によって判定された実行順序に応じて順次行い、業務処理記憶部16に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するデータアクセス要求実行部である。具体的には、DBアクセス実行部19は、DBアクセスソート部18によって判定された実行順序に応じて、DBアクセス部14のインスタンスにデータアクセスを実行させる。この際、DBアクセス実行部19は、DBアクセス部14のインスタンスによる更新対象となるテーブル毎に、更新対象テーブルをロックする。DBアクセス実行部19は、全てのDBアクセス部14のインスタンスによるアクセス処理が完了した後に、全てのロックを解除する。
【0028】
次に、本実施形態のデータアクセス装置10の動作例を説明する。図11は、本実施形態によるデータアクセス装置10の動作例を示すフローチャートである。データアクセス装置10は、まず、業務処理要件に応じた業務処理部13のインスタンスを生成する。また、生成された業務処理部13は、自身に対応付けられた複数のDBアクセス部14のインスタンスを生成する(ステップS10)。次に、業務処理登録部15は、生成された業務処理部13のインスタンスを業務処理記憶部16に登録する(ステップS11)。データアクセス装置10は、他の業務処理部13の登録を行なう場合は(ステップS12:業務処理部あり)、ステップS10に戻る。
【0029】
ステップS12において他の業務処理部13の登録を行なわない場合は(ステップS12:業務処理部登録完了)、DBアクセス実行部19が、業務処理記憶部16に記憶された業務処理部13から、その業務処理部13に対応付けられたDBアクセス部14を取り出す(ステップS13)。DBアクセスソート部18は、DBアクセスルール記憶部17に記憶された順序に基づいて実行順序を判定し、DBアクセス部14をソートする(ステップS14)。DBアクセス実行部19は、DBアクセスソート部18によって判定された順序に応じて、DBアクセス部14によるデータアクセス処理を実行させる(ステップS15)。
【0030】
ステップS15において実行されたデータアクセス処理が異常終了すれば、DBアクセス実行部19は、更新したデータをロールバックして定められた例外処理を実行し(ステップS17)、処理を終了する。ステップS15において実行されたデータアクセス処理が正常終了した後、DBアクセス実行部19は、実行されていない他のDBアクセス部14が存在すれば、ステップS15に戻る(ステップS18:DBアクセス部あり)。業務処理記憶部16に記憶された業務処理部13に対応する全てのDBアクセス部14によるデータアクセス処理が終了すれば(ステップS18:すべて実行終了)、処理を終了する。
【0031】
ここでは、データアクセス装置10が業務処理部13のインスタンスを生成した際に、業務処理部13が自身に対応付けられた複数のDBアクセス部14のインスタンスを生成する例を説明したが、業務処理部13の登録後、実行前(例えば、ステップS13の前)にDBアクセス部14のインスタンスを生成するようにしても良い。
【0032】
図12および図13は、図11を参照して説明したデータアクセス装置10の動作例を、より具体的に示すシーケンス図である。データアクセス装置10は、アクターXからアクターYに商品Pを1つ移動させる業務処理部13−2のインスタンスである業務処理部13−2aを生成する(ステップS21)。データアクセス装置10は、生成された業務処理部13−2aを業務処理登録部15に登録する。業務処理登録部15は、業務処理部13−2aの登録を受け付ける(ステップS22)。次に、データアクセス装置10は、アクターYに対応する口座00yから、アクターXに対応する口座00xに100円を移動させる業務処理部13−1のインスタンスである業務処理部13−1aを生成する(ステップS23)。データアクセス装置10は、生成された業務処理部13−1aを業務処理登録部15に登録する。業務処理登録部15は、生成された業務処理部13−1aの登録を受け付ける(ステップS24)。
【0033】
データアクセス装置10は、業務処理登録部15に対してデータアクセスの実行要求を行う(ステップS25)。DBアクセス実行部19が、業務処理登録部15に記憶された複数の業務処理部13のインスタンスを読み出すと(ステップS26、S27)、業務処理部13−2aは、自身に対応付けられたDBアクセス部14−3aと、DBアクセス部14−4aと、DBアクセス部14−3bと、DBアクセス部14−4bとのインスタンスを生成する(ステップS28〜S31)。
【0034】
図13に進み、業務処理部13−1aは、自身に対応付けられたDBアクセス部14−1aと、DBアクセス部14−2aと、DBアクセス部14−1bと、DBアクセス部14−2bとのインスタンスを生成する(ステップS32〜S36)。DBアクセスソート部18は、業務処理部13−2aによって生成され業務処理登録部15に記憶された複数のDBアクセス部14のインスタンスと、業務処理部13−1aによって生成され業務処理登録部15に記憶された複数のDBアクセス部14のインスタンスとに基づいて、データアクセスの実行順序を判定する(ステップS37)。
【0035】
DBアクセス実行部19は、DBアクセスソート部18によって判定された実行順序に基づいて、まず、保有商品テーブル12−3をロックし、保有商品テーブル12−3に対するデータアクセスを行なうDBアクセス部14−3aとDBアクセス部14−3bとを実行させる(ステップS38、S39)。次に、在庫更新明細テーブル12−4をロックし、在庫更新明細テーブル12−4に対するデータアクセスを行なうDBアクセス部14−4aとDBアクセス部14−4bとを実行させる(ステップS40、S41)。次に、口座テーブル12−1をロックし、口座テーブル12−1に対するデータアクセスを行なうDBアクセス部14−1bとDBアクセス部14−1aとを実行させる(ステップS42、S43)。次に、口座更新明細テーブル12−2をロックし、口座更新明細テーブル12−2に対するデータアクセスを行なうDBアクセス部14−2bとDBアクセス部14−2aとを実行させる(ステップS44、S45)。
【0036】
このようにすれば、並行して処理を行う複数の処理単位間でのデッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうことが可能となる。図14は、従来技術によるデータアクセス処理(符号a)と、本実施形態によるデータアクセス処理(符号b)との業務処理イメージを示す図である。従来技術では、Aテーブルと、Bテーブルと、Cテーブルとにアクセスを行なう場合、Aテーブルをロックして情報を読み込んだ後に、Bテーブルをロックして情報を読み込み、Cテーブルをロックして情報を読み込む。そして、全ての計算処理、アクセス処理が完了した後に、ロックを解除している。
【0037】
これに対し、本実施形態では、業務処理の登録を行った後、業務処理に対応付けられたDBアクセス部をソートして、テーブル毎にロックとデータアクセスとの処理を順次行っている。これにより、それぞれのデータ単位でのロック時間を従来に比べて短くすることができる。さらに、相対的にアクセス頻度の高いデータ単位への更新を、相対的にアクセス頻度の低い他のデータ単位への更新の後に行なうことで、アクセス頻度の高いデータ単位のロック時間をより短くすることが可能となる。
【0038】
図15は、お金の移動という業務処理を、削減して増加するというロジックで構成した場合、複数の処理単位(トランザクション)によりデータアクセスが行なわれる例を示すシーケンス図である。例えば、トランザクション1(Tr1)は、A口座をロックして残高の削減を行い(ステップS51)、トランザクション2(Tr2)が、B口座をロックして残高の削減を行なう(ステップS52)。次に、Tr1が、B口座に対する残高の増加を行おうとする場合(ステップS53)、B口座はTr2によりロックされているため、待ちとなる。同様に、Tr2が、A口座に対する残高の増加を行おうとする場合(ステップS54)、A口座はTr1によりロックされているため、デッドロックが発生してデータアクセスできない。
【0039】
これに対し、図16は、本実施形態のデータアクセス装置10を適用して、複数のトランザクションによりデータアクセスが行なわれる例を示すシーケンス図である。ここでは、Tr1において業務処理部13が登録された後、DBアクセス部14の実行順序が判定されると(ステップS61)、B口座、A口座の順序でデータアクセスが行なわれる(ステップS63、S64)。一方、Tr2において業務処理部13が登録された後、DBアクセス部14の実行順序が判定された場合(ステップS62)にも、B口座、A口座の順序でデータアクセスが行なわれる(ステップS65、S66)。このように、いずれのトランザクションにおいてもB口座に対するデータアクセスから処理され、後にA口座に対するデータアクセスが処理されるため、デッドロックを回避することが可能である。
図17は、デッドロックを回避しつつ、アクセス頻度の高いA口座のロック時間を短縮し、同時処理並行性を高められる例である。
【0040】
さらに、本実施形態において示したようなクラス構成を適用し、図1に示した各部を構成しておけば、これらの機能部を用いて業務処理プログラムを作成するプログラマは、デッドロック回避のための処理手順などを気にすることなく実装作業を行うことができるため、プログラムの作成効率が高まることが期待できる。
【0041】
なお、本実施形態では、データアクセス装置10がアクセスする記憶部は、テーブルをデータ単位としたデータベースであることとしたが、例えば、ファイルをデータ単位とした記憶領域であっても良い。また、DBアクセス部14は、本実施形態におけるデータ単位であるデータベースのテーブル毎に更新を行なう例を説明したが、例えば、テーブルにおけるレコード単位に異なるDBアクセス部14を構成するようにしても良い。
【0042】
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりデータアクセスを行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0043】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【符号の説明】
【0044】
10 データアクセス装置
11 DB
12 テーブル
13 業務処理部
14 DBアクセス部
15 業務処理登録部
16 業務処理記憶部
17 DBアクセスルール記憶部
18 DBアクセスソート部
19 DBアクセス実行部
【技術分野】
【0001】
本発明は、デッドロックを回避し、かつ効率よくデータアクセスを行なう技術に関する。
【背景技術】
【0002】
コンピュータ処理において、並列処理を行うプロセスあるいはスレッドなどの複数の処理単位が互いの処理終了を待つことにより、いずれもの処理が終了しないデッドロックが発生することがある。例えば、複数の処理単位が同一のデータファイルやデータベーステーブルに含まれるデータの更新を行なう際、データの整合性を保つために他の処理単位によって更新されないようにデータをロックして排他制御を行うことがある。このような場合、複数の処理単位が互いにロックしたデータの解放を待つことにより停止状態となることがある。
このようなデッドロックを避けるために、例えば特許文献1には、デッドロックが発生する可能性のある複数のファイルにデータの更新を行なう場合、更新対象である全てのデータを予めロックしてから更新を行なう技術が示されている。特許文献2には、更新対象であるデータを仮想領域に読み込み、仮想領域において演算処理を行った後にデータをロックし、演算結果のみをデータに更新して反映させる技術が示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2002−7148号公報
【特許文献2】特開2008−165272号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、特許文献1に記載された技術では、アクセス対象である複数のデータの全てを予めロックし、アクセス処理が完了してからロックを解除しているため、ロックされたデータにアクセスする処理を行う全ての他の処理単位が待ち状態となり、処理並行性が損なわれてスループットが悪化する。特許文献2に記載された技術では、仮想領域に読み込んだ後、実データに反映させるまでの間に他のアクセス処理が行われた場合などには、排他エラーとしてロールバックなどの処理が行われることになる。これでは、データのアクセス処理が集中する場合には排他エラーが頻発し、処理性能が悪化する。
【0005】
本発明は、このような状況に鑑みてなされたもので、デッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうデータアクセス装置、データアクセス方法およびデータアクセスプログラムを提供する。
【課題を解決するための手段】
【0006】
上述した課題を解決するために、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部にアクセスするデータアクセス装置であって、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部と、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるデータアクセス要求登録部と、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定する実行順序ソート部と、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、実行順序ソート部によって判定された実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するデータアクセス要求実行部と、を備えることを特徴とする。
【0007】
また、本発明は、データアクセス要求登録部が、複数のデータ単位に対する複数のデータアクセス要求が予め対応付けられた業務処理要求の入力を受け付け、入力された業務処理要求に対応するデータアクセス要求をデータアクセス要求記憶部に記憶させることを特徴とする。
【0008】
また、本発明は、順序記憶部には、複数のデータ単位のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、相対的にアクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されていることを特徴とする。
【0009】
また、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のデータアクセス方法であって、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるステップと、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定するステップと、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するステップと、を備えることを特徴とする。
【0010】
また、本発明は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、データ単位毎に、データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のコンピュータに、複数のデータアクセス要求の入力を受け付けて、データアクセス要求記憶部に記憶させるステップと、順序記憶部に記憶されている順序に応じて、データアクセス要求記憶部に記憶された複数のデータアクセス要求の実行順序を判定するステップと、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、データアクセス要求記憶部に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するステップと、を実行させるデータアクセスプログラムである。
【発明の効果】
【0011】
以上説明したように、本発明によれば、データアクセス装置は、データ記憶部に記憶された複数のデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部を備え、データ記憶部に記憶された複数のデータ単位のうちいずれかのデータ単位に対する複数のデータアクセス要求の入力を受け付けて記憶し、順序記憶部に記憶されている順序に応じて、記憶した複数のデータアクセス要求の実行順序を判定し、データアクセス要求によるアクセス対象であるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、判定した実行順序に応じて順次行い、記憶したデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、全てのロックを解除するようにしたので、デッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうことが可能となる。
【図面の簡単な説明】
【0012】
【図1】本発明の一実施形態によるデータアクセス装置の構成例を示すブロック図である。
【図2】本発明の一実施形態による業務処理の例を示す図である。
【図3】本発明の一実施形態による記憶部に記憶されるテーブルの関係を示すER図である。
【図4】本発明の一実施形態による口座テーブルに記憶される情報のデータ例を示す図である。
【図5】本発明の一実施形態による口座更新明細テーブルに記憶される情報のデータ例を示す図である。
【図6】本発明の一実施形態による保有商品テーブルに記憶される情報のデータ例を示す図である。
【図7】本発明の一実施形態による在庫更新明細テーブルに記憶される情報のデータ例を示す図である。
【図8】本発明の一実施形態による業務処理記述機構の例を示すクラス図である。
【図9】本発明の一実施形態によりインスタンス化される業務処理部とDBアクセス部との例を示す図である。
【図10】本発明の一実施形態によるDBアクセスルール記憶部に記憶される情報のデータ例を示す図である。
【図11】本発明の一実施形態によるデータアクセス装置の動作例を示すフローチャートである。
【図12】本発明の一実施形態によるデータアクセス装置の動作例を示すシーケンス図である。
【図13】本発明の一実施形態によるデータアクセス装置の動作例を示すシーケンス図である。
【図14】従来技術によるロック範囲と本実施形態によるロック範囲とを比較する図である。
【図15】従来技術によるデッドロックの発生例を示す図である。
【図16】本実施形態により複数のトランザクションに基づくデータアクセスが行なわれる例を示す図である。
【図17】本実施形態により複数のトランザクションに基づくデータアクセスが行なわれる例を示す図である。
【発明を実施するための形態】
【0013】
以下、本発明の一実施形態について、図面を参照して説明する。図1は、本実施形態のデータアクセス装置10の構成例を示すブロック図である。データアクセス装置10はコンピュータ装置であり、DB(データベース)11を備え、業務処理記述機構(符号a)である複数の業務処理部13(業務処理部13−1、業務処理部13−2、・・・)と、複数のDBアクセス部14(DBアクセス部14−1、DBアクセス部14−2、DBアクセス部14−3、DBアクセス部14−4、・・・)とを備えている。また、このような業務処理部13とDBアクセス部14によるデータアクセスを制御するDBアクセスコントロール機構(符号b)である業務処理登録部15と、DBアクセスルール記憶部17と、DBアクセスソート部18と、DBアクセス実行部19と、を備えている。
【0014】
本実施形態では、データアクセス装置10は、図2に示すようないわゆる複合取引の業務処理を行うものとして例を説明する。ここでは、例えばアクターXが保有する商品Pを、アクターYに対してn個受け渡し(ステップS1)、これに対し、アクターYが、アクターXに対して商品Pがn個分の支払を実施する(ステップS2)。
【0015】
図1に戻り、DB11は、定められた複数のデータ単位毎にデータが記憶されているデータ記憶部である。本実施形態では、DB11には、カラム毎のデータが対応付けられたテーブルをデータ単位として、複数のテーブル12(テーブル(口座テーブル)12−1、テーブル(口座更新明細テーブル)12−2、テーブル(保有商品テーブル)12−3、テーブル(在庫更新明細テーブル)12−4、・・・)が記憶されている。ここでは、このような4つのテーブル12を例として説明するが、DB11には、業務要件に応じた任意の複数のテーブル12が記憶されるようにして良い。図3は、DB11に記憶されているテーブルの関係を示すER(Entity Relationship)図である。
【0016】
図4は、口座テーブル12−1に記憶される情報のデータ例を示す図である。口座テーブル12−1には、口座番号毎に、その口座の残高を示す情報が対応付けられて記憶される。ここでは、アクターXに対応する口座を「00x」とし、アクターYに対応する口座を「00y」として説明する。
図5は、口座更新明細テーブル12−2のデータ例を示す図である。口座更新明細テーブル12−2には、口座番号と、取引種別と、取引金額と、取引後残高と、更新日付とが対応付けられて記憶される。口座番号は、口座テーブル12−1に記憶された口座番号に対応する情報である。取引種別は、入金と出金とのいずれかを示す情報である。取引金額は、対応する口座において取引された金額を示す情報である。取引後残高は、対応する取引が行われた後の口座の残高を示す情報である。更新日付は、対応する取引が行われて口座更新明細テーブル12−2に情報が記憶された日付を示す情報である。
【0017】
図6は、保有商品テーブル12−3のデータ例を示す図である。保有商品テーブル12−3には、所有者と、商品コードと、在庫との情報が対応付けられて記憶される。所有者は、対応する商品を保有する所有者(アクター)を識別する情報である。商品コードは、対応する所有者が保有する商品を識別する情報である。在庫は、対応する商品コードが示す商品の在庫数を示す情報である。
【0018】
図7は、在庫更新明細テーブル12−4のデータ例を示す図である。在庫更新明細テーブル12−4には、所有者と、商品コードと、在庫更新種別と、更新後在庫数と、更新日付との情報が対応付けられて記憶される。所有者は、保有商品テーブル12−3に記憶された所有者に対応する情報である。商品コードは、保有商品テーブル12−3に記憶された商品コードに対応する情報である。在庫更新種別は、出庫と入庫とのいずれかを示す情報である。更新後在庫数は、対応する更新が行なわれた後の在庫数を示す情報である。更新日付は、対応する更新が行われて在庫更新明細テーブル12−4に情報が記憶された日付を示す情報である。
【0019】
図8は、本実施形態の業務処理記述機構が備える各部の実装例を示すクラス図である。例えば、業務処理部13のスーパークラスとして業務処理部13−0を定義する。業務処理部13−0には、予め対応付けられたDBアクセス部14を取得するメソッドを定義する。また、業務処理部13−0を継承するサブクラスである業務処理部13−1(口座更新業務処理部)と業務処理部13−2(商品在庫更新業務部)とを定義する。例えば、業務処理部13−1は、所有者Yに対応する口座00yから所有者Xに対応する口座00xに資金を移動させる業務処理を行う。一方、業務処理部13−2は、所有者Xが所有する商品コードPの在庫を所有者Yに引渡す業務処理を行う。それぞれの業務処理部13には、商品の引渡しに伴う口座テーブルや保有商品テーブルなどにおける一連の業務処理に必要なデータアクセス要求を行う複数のDBアクセス部14が対応付けられる。
【0020】
DBアクセス部14は、DB11に記憶される複数のテーブル12のうちいずれかのテーブル12に対するデータアクセス要求を行なう。ここで、データアクセスとは、例えば、データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)のような処理である。例えば、DBアクセス部14のスーパークラスとしてDBアクセス部14−0を定義する。また、DBアクセス部14−0を継承するサブクラスであり、口座テーブル12−1に対するデータアクセスを行なうDBアクセス部14−1(口座DBアクセス部)と、口座更新明細テーブル12−2に対するデータアクセスを行なう業務処理部14−2(口座更新明細DBアクセス部)と、保有商品テーブル12−3に対するデータアクセスを行なうDBアクセス部14−3(商品DBアクセス部)と、在庫更新明細テーブル12−4に対するデータアクセスを行なうDBアクセス部14−4(在庫更新明細DBアクセス部)とを定義する。
【0021】
図9は、図8に示したクラス構成に基づいて、本実施形態においてインスタンス化される業務処理部13とDBアクセス部14との例を示す図である。業務処理部13−1aは、口座「00y」から口座「00x」へ100円を移動させる業務処理を行うインスタンスである。業務処理部13−1aは、予め対応付けられた4つのDBアクセス部14のインスタンス、すなわちDBアクセス部14−1aと、DBアクセス部14−1bと、DBアクセス部14−2aと、DBアクセス部14−2bとのインスタンスを生成する。ここで、DBアクセス部14−1aとDBアクセス部14−1bとは、口座テーブル12−1に対するデータアクセスを行なう処理部である。DBアクセス部14−1aは口座「00y」の残高から100円を減算し、DBアクセス部14−1bは口座「00x」の残高に100円を加算する。DBアクセス部14−2aとDBアクセス部14−2bとは、口座更新明細テーブル12−2に対するデータアクセスを行なう処理部である。DBアクセス部14−2aは口座「00y」に対する出金明細を更新し、DBアクセス部14−2bは口座「00x」に対する入金明細を更新する。
【0022】
業務処理部13−2aは、アクターXからアクターYへ商品Pを1つ移動させる業務処理を行うインスタンスである。業務処理部13−2aは、予め対応付けられた4つのDBアクセス部14のインスタンス、すなわちDBアクセス部14−3aと、DBアクセス部14−3bと、DBアクセス部14−4aと、DBアクセス部14−4bとのインスタンスを生成する。ここで、DBアクセス部14−3aとDBアクセス部14−3bとは、保有商品テーブル12−3に対するデータアクセスを行なう処理部である。DBアクセス部14−3aはXの商品Pの在庫数を1つ減算し、DBアクセス部14−3bはYの商品Pの在庫数を1つ加算する。DBアクセス部14−4aとDBアクセス部14−4bとは、在庫更新明細テーブル12−4に対するデータアクセスを行なう処理部である。DBアクセス部14−4aはXの在庫更新明細に対する出庫明細を更新し、DBアクセス部14−4bはYの在庫更新明細に対する入庫明細を更新する。
【0023】
図1に戻り、業務処理登録部15は、DB11に記憶されたデータ単位毎にデータアクセス要求の入力を受け付けて、自身の記憶領域に備える業務処理記憶部16に記憶させるデータアクセス要求登録部である。業務処理登録部15は、複数のDBアクセス部14のうちいずれかのDBアクセス部14の登録を受け付けて業務処理記憶部16に記憶させるようにしても良いが、本実施形態では、業務処理登録部15は、複数のデータ単位に対する複数のDBアクセス部14が予め対応付けられた業務処理部13の入力を受け付け、入力された業務処理部13を業務処理記憶部16に記憶させる例を示す。具体的には、業務処理登録部15は、インスタンス化された業務処理部13−1および業務処理部13−2を、業務処理記憶部16に記憶させる。すなわち、業務処理登録部15は、複数のデータ単位に対する複数のデータアクセス要求(DBアクセス部14)が予め対応付けられた業務処理要求(業務処理部13)の入力を受け付けて、業務処理記憶部16に記憶させる。
【0024】
業務処理記憶部16は、DB11に記憶された複数のデータ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部である。本実施形態では、具体的には、インスタンス化された業務処理部13−1および業務処理部13−2が記憶される。上述したように、これらの業務処理部13−1および業務処理部13−2には、データアクセス要求を行う複数のDBアクセス部14が対応付けられるものである。
【0025】
DBアクセスルール記憶部17は、DB11に記憶されているデータのデータ単位毎に、そのデータ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部である。図10は、DBアクセスルール記憶部17に記憶されるDBアクセスルールのデータ例を示す図である。ここでは、DBテーブル名毎に、そのDBテーブルに対する順序(DBテーブル更新順序)が対応付けられている。例えば、口座テーブルに対して順序「3」が、口座更新明細テーブルに対して順序「4」が、保有商品テーブルに対して順序「1」が、在庫更新明細テーブルに対して順序「2」が対応付けられている。ここでは、複数のデータ単位(テーブル)のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、アクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されている。これにより、更新される順序が後であれば、その分だけテーブルがロックされる時間が短くなるため、他の処理単位との処理並行性を高めることができる。すなわち、例えば、口座へのアクセス頻度の方が商品へのアクセス頻度よりも多いという特徴がある場合、商品よりも口座へのアクセスの順序を後にする。次に、明細系は、口座や商品の操作を実施後でないと更新後の情報が得られないので、業務的な意味順序によって口座系よりも明細系の方が順番を後にする。このように、アクセス順序をユニークにするための考え方として、業務要件としてのアクセス順と、アクセス集中にともなう性能対策としてのアクセス順をあわせてアクセス順序のルールを決定する。このようにテーブル毎のアクセス頻度に応じて順序を定める他に、例えば、レコード順(口座番号順)にアクセス順序を定めたり、レコード毎のアクセス頻度に応じてアクセス順序を定めたりするようにしても良い。
【0026】
DBアクセスソート部18は、DBアクセスルール記憶部17に記憶されている順序に応じて、業務処理登録部15の業務処理記憶部16に記憶された複数のデータアクセス要求の実行順序を判定する実行順序ソート部である。具体的には、DBアクセスソート部18は、業務処理記憶部16に記憶された複数の業務処理部13のインスタンスに対応付けられた複数のDBアクセス部14のインスタンスを抽出し、抽出したDBアクセス部14のインスタンスが更新対象とするテーブルと、DBアクセスルール記憶部17に記憶されている順序とに基づいて、DBアクセス部14のインスタンスの実行順序を判定する。
【0027】
DBアクセス実行部19は、業務処理記憶部16に記憶されたデータアクセス要求によるデータのアクセス対象となるデータ単位をロックしてデータアクセス要求を実行するデータアクセス要求実行処理を、DBアクセスソート部18によって判定された実行順序に応じて順次行い、業務処理記憶部16に記憶されたデータアクセス要求の全てについてデータアクセス要求実行処理を行った後に、データ単位に対して行った全てのロックを解除するデータアクセス要求実行部である。具体的には、DBアクセス実行部19は、DBアクセスソート部18によって判定された実行順序に応じて、DBアクセス部14のインスタンスにデータアクセスを実行させる。この際、DBアクセス実行部19は、DBアクセス部14のインスタンスによる更新対象となるテーブル毎に、更新対象テーブルをロックする。DBアクセス実行部19は、全てのDBアクセス部14のインスタンスによるアクセス処理が完了した後に、全てのロックを解除する。
【0028】
次に、本実施形態のデータアクセス装置10の動作例を説明する。図11は、本実施形態によるデータアクセス装置10の動作例を示すフローチャートである。データアクセス装置10は、まず、業務処理要件に応じた業務処理部13のインスタンスを生成する。また、生成された業務処理部13は、自身に対応付けられた複数のDBアクセス部14のインスタンスを生成する(ステップS10)。次に、業務処理登録部15は、生成された業務処理部13のインスタンスを業務処理記憶部16に登録する(ステップS11)。データアクセス装置10は、他の業務処理部13の登録を行なう場合は(ステップS12:業務処理部あり)、ステップS10に戻る。
【0029】
ステップS12において他の業務処理部13の登録を行なわない場合は(ステップS12:業務処理部登録完了)、DBアクセス実行部19が、業務処理記憶部16に記憶された業務処理部13から、その業務処理部13に対応付けられたDBアクセス部14を取り出す(ステップS13)。DBアクセスソート部18は、DBアクセスルール記憶部17に記憶された順序に基づいて実行順序を判定し、DBアクセス部14をソートする(ステップS14)。DBアクセス実行部19は、DBアクセスソート部18によって判定された順序に応じて、DBアクセス部14によるデータアクセス処理を実行させる(ステップS15)。
【0030】
ステップS15において実行されたデータアクセス処理が異常終了すれば、DBアクセス実行部19は、更新したデータをロールバックして定められた例外処理を実行し(ステップS17)、処理を終了する。ステップS15において実行されたデータアクセス処理が正常終了した後、DBアクセス実行部19は、実行されていない他のDBアクセス部14が存在すれば、ステップS15に戻る(ステップS18:DBアクセス部あり)。業務処理記憶部16に記憶された業務処理部13に対応する全てのDBアクセス部14によるデータアクセス処理が終了すれば(ステップS18:すべて実行終了)、処理を終了する。
【0031】
ここでは、データアクセス装置10が業務処理部13のインスタンスを生成した際に、業務処理部13が自身に対応付けられた複数のDBアクセス部14のインスタンスを生成する例を説明したが、業務処理部13の登録後、実行前(例えば、ステップS13の前)にDBアクセス部14のインスタンスを生成するようにしても良い。
【0032】
図12および図13は、図11を参照して説明したデータアクセス装置10の動作例を、より具体的に示すシーケンス図である。データアクセス装置10は、アクターXからアクターYに商品Pを1つ移動させる業務処理部13−2のインスタンスである業務処理部13−2aを生成する(ステップS21)。データアクセス装置10は、生成された業務処理部13−2aを業務処理登録部15に登録する。業務処理登録部15は、業務処理部13−2aの登録を受け付ける(ステップS22)。次に、データアクセス装置10は、アクターYに対応する口座00yから、アクターXに対応する口座00xに100円を移動させる業務処理部13−1のインスタンスである業務処理部13−1aを生成する(ステップS23)。データアクセス装置10は、生成された業務処理部13−1aを業務処理登録部15に登録する。業務処理登録部15は、生成された業務処理部13−1aの登録を受け付ける(ステップS24)。
【0033】
データアクセス装置10は、業務処理登録部15に対してデータアクセスの実行要求を行う(ステップS25)。DBアクセス実行部19が、業務処理登録部15に記憶された複数の業務処理部13のインスタンスを読み出すと(ステップS26、S27)、業務処理部13−2aは、自身に対応付けられたDBアクセス部14−3aと、DBアクセス部14−4aと、DBアクセス部14−3bと、DBアクセス部14−4bとのインスタンスを生成する(ステップS28〜S31)。
【0034】
図13に進み、業務処理部13−1aは、自身に対応付けられたDBアクセス部14−1aと、DBアクセス部14−2aと、DBアクセス部14−1bと、DBアクセス部14−2bとのインスタンスを生成する(ステップS32〜S36)。DBアクセスソート部18は、業務処理部13−2aによって生成され業務処理登録部15に記憶された複数のDBアクセス部14のインスタンスと、業務処理部13−1aによって生成され業務処理登録部15に記憶された複数のDBアクセス部14のインスタンスとに基づいて、データアクセスの実行順序を判定する(ステップS37)。
【0035】
DBアクセス実行部19は、DBアクセスソート部18によって判定された実行順序に基づいて、まず、保有商品テーブル12−3をロックし、保有商品テーブル12−3に対するデータアクセスを行なうDBアクセス部14−3aとDBアクセス部14−3bとを実行させる(ステップS38、S39)。次に、在庫更新明細テーブル12−4をロックし、在庫更新明細テーブル12−4に対するデータアクセスを行なうDBアクセス部14−4aとDBアクセス部14−4bとを実行させる(ステップS40、S41)。次に、口座テーブル12−1をロックし、口座テーブル12−1に対するデータアクセスを行なうDBアクセス部14−1bとDBアクセス部14−1aとを実行させる(ステップS42、S43)。次に、口座更新明細テーブル12−2をロックし、口座更新明細テーブル12−2に対するデータアクセスを行なうDBアクセス部14−2bとDBアクセス部14−2aとを実行させる(ステップS44、S45)。
【0036】
このようにすれば、並行して処理を行う複数の処理単位間でのデッドロックを回避し、かつ高い処理性能を保ちながらデータアクセスを行なうことが可能となる。図14は、従来技術によるデータアクセス処理(符号a)と、本実施形態によるデータアクセス処理(符号b)との業務処理イメージを示す図である。従来技術では、Aテーブルと、Bテーブルと、Cテーブルとにアクセスを行なう場合、Aテーブルをロックして情報を読み込んだ後に、Bテーブルをロックして情報を読み込み、Cテーブルをロックして情報を読み込む。そして、全ての計算処理、アクセス処理が完了した後に、ロックを解除している。
【0037】
これに対し、本実施形態では、業務処理の登録を行った後、業務処理に対応付けられたDBアクセス部をソートして、テーブル毎にロックとデータアクセスとの処理を順次行っている。これにより、それぞれのデータ単位でのロック時間を従来に比べて短くすることができる。さらに、相対的にアクセス頻度の高いデータ単位への更新を、相対的にアクセス頻度の低い他のデータ単位への更新の後に行なうことで、アクセス頻度の高いデータ単位のロック時間をより短くすることが可能となる。
【0038】
図15は、お金の移動という業務処理を、削減して増加するというロジックで構成した場合、複数の処理単位(トランザクション)によりデータアクセスが行なわれる例を示すシーケンス図である。例えば、トランザクション1(Tr1)は、A口座をロックして残高の削減を行い(ステップS51)、トランザクション2(Tr2)が、B口座をロックして残高の削減を行なう(ステップS52)。次に、Tr1が、B口座に対する残高の増加を行おうとする場合(ステップS53)、B口座はTr2によりロックされているため、待ちとなる。同様に、Tr2が、A口座に対する残高の増加を行おうとする場合(ステップS54)、A口座はTr1によりロックされているため、デッドロックが発生してデータアクセスできない。
【0039】
これに対し、図16は、本実施形態のデータアクセス装置10を適用して、複数のトランザクションによりデータアクセスが行なわれる例を示すシーケンス図である。ここでは、Tr1において業務処理部13が登録された後、DBアクセス部14の実行順序が判定されると(ステップS61)、B口座、A口座の順序でデータアクセスが行なわれる(ステップS63、S64)。一方、Tr2において業務処理部13が登録された後、DBアクセス部14の実行順序が判定された場合(ステップS62)にも、B口座、A口座の順序でデータアクセスが行なわれる(ステップS65、S66)。このように、いずれのトランザクションにおいてもB口座に対するデータアクセスから処理され、後にA口座に対するデータアクセスが処理されるため、デッドロックを回避することが可能である。
図17は、デッドロックを回避しつつ、アクセス頻度の高いA口座のロック時間を短縮し、同時処理並行性を高められる例である。
【0040】
さらに、本実施形態において示したようなクラス構成を適用し、図1に示した各部を構成しておけば、これらの機能部を用いて業務処理プログラムを作成するプログラマは、デッドロック回避のための処理手順などを気にすることなく実装作業を行うことができるため、プログラムの作成効率が高まることが期待できる。
【0041】
なお、本実施形態では、データアクセス装置10がアクセスする記憶部は、テーブルをデータ単位としたデータベースであることとしたが、例えば、ファイルをデータ単位とした記憶領域であっても良い。また、DBアクセス部14は、本実施形態におけるデータ単位であるデータベースのテーブル毎に更新を行なう例を説明したが、例えば、テーブルにおけるレコード単位に異なるDBアクセス部14を構成するようにしても良い。
【0042】
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりデータアクセスを行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0043】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【符号の説明】
【0044】
10 データアクセス装置
11 DB
12 テーブル
13 業務処理部
14 DBアクセス部
15 業務処理登録部
16 業務処理記憶部
17 DBアクセスルール記憶部
18 DBアクセスソート部
19 DBアクセス実行部
【特許請求の範囲】
【請求項1】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部にアクセスするデータアクセス装置であって、
前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、
前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部と、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるデータアクセス要求登録部と、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定する実行順序ソート部と、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、前記実行順序ソート部によって判定された前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するデータアクセス要求実行部と、
を備えることを特徴とするデータアクセス装置。
【請求項2】
前記データアクセス要求登録部は、複数の前記データ単位に対する複数の前記データアクセス要求が予め対応付けられた業務処理要求の入力を受け付け、入力された当該業務処理要求に対応する前記データアクセス要求を前記データアクセス要求記憶部に記憶させる
ことを特徴とする請求項1に記載のデータアクセス装置。
【請求項3】
前記順序記憶部には、複数の前記データ単位のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、相対的にアクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されている
ことを特徴とする請求項1または請求項2に記載のデータアクセス装置。
【請求項4】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のデータアクセス方法であって、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるステップと、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定するステップと、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、判定した前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するステップと、
を備えることを特徴とするデータアクセス方法。
【請求項5】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のコンピュータに、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるステップと、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定するステップと、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、判定した前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するステップと、
を実行させるデータアクセスプログラム。
【請求項1】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部にアクセスするデータアクセス装置であって、
前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、
前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部と、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるデータアクセス要求登録部と、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定する実行順序ソート部と、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、前記実行順序ソート部によって判定された前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するデータアクセス要求実行部と、
を備えることを特徴とするデータアクセス装置。
【請求項2】
前記データアクセス要求登録部は、複数の前記データ単位に対する複数の前記データアクセス要求が予め対応付けられた業務処理要求の入力を受け付け、入力された当該業務処理要求に対応する前記データアクセス要求を前記データアクセス要求記憶部に記憶させる
ことを特徴とする請求項1に記載のデータアクセス装置。
【請求項3】
前記順序記憶部には、複数の前記データ単位のうち、相対的にアクセス頻度の高いデータ単位が相対的に後の順序に、相対的にアクセス頻度の低いデータ単位が相対的に先の順序に定められて記憶されている
ことを特徴とする請求項1または請求項2に記載のデータアクセス装置。
【請求項4】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のデータアクセス方法であって、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるステップと、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定するステップと、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、判定した前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するステップと、
を備えることを特徴とするデータアクセス方法。
【請求項5】
定められた複数のデータ単位毎にデータが記憶されているデータ記憶部と、前記データ単位毎に、当該データ単位に含まれるデータに対してアクセスを行なう順序が予め記憶されている順序記憶部と、前記データ記憶部に記憶された複数の前記データ単位のうちいずれかのデータ単位に対するデータアクセス要求が記憶されるデータアクセス要求記憶部とを備えるデータアクセス装置のコンピュータに、
複数の前記データアクセス要求の入力を受け付けて、前記データアクセス要求記憶部に記憶させるステップと、
前記順序記憶部に記憶されている前記順序に応じて、前記データアクセス要求記憶部に記憶された前記複数のデータアクセス要求の実行順序を判定するステップと、
前記データアクセス要求によるアクセス対象である前記データ単位をロックして当該データアクセス要求を実行するデータアクセス要求実行処理を、判定した前記実行順序に応じて順次行い、前記データアクセス要求記憶部に記憶された前記データアクセス要求の全てについて前記データアクセス要求実行処理を行った後に、前記データ単位に対して行った全てのロックを解除するステップと、
を実行させるデータアクセスプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2011−96065(P2011−96065A)
【公開日】平成23年5月12日(2011.5.12)
【国際特許分類】
【出願番号】特願2009−250513(P2009−250513)
【出願日】平成21年10月30日(2009.10.30)
【出願人】(000102728)株式会社エヌ・ティ・ティ・データ (438)
【Fターム(参考)】
【公開日】平成23年5月12日(2011.5.12)
【国際特許分類】
【出願日】平成21年10月30日(2009.10.30)
【出願人】(000102728)株式会社エヌ・ティ・ティ・データ (438)
【Fターム(参考)】
[ Back to top ]