JP6127608B2 - 情報処理装置、データベースアクセス方法、及びプログラム - Google Patents

情報処理装置、データベースアクセス方法、及びプログラム Download PDF

Info

Publication number
JP6127608B2
JP6127608B2 JP2013051812A JP2013051812A JP6127608B2 JP 6127608 B2 JP6127608 B2 JP 6127608B2 JP 2013051812 A JP2013051812 A JP 2013051812A JP 2013051812 A JP2013051812 A JP 2013051812A JP 6127608 B2 JP6127608 B2 JP 6127608B2
Authority
JP
Japan
Prior art keywords
lock
application
request
record
pessimistic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013051812A
Other languages
English (en)
Other versions
JP2014178831A (ja
Inventor
桂太 岩野
桂太 岩野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2013051812A priority Critical patent/JP6127608B2/ja
Publication of JP2014178831A publication Critical patent/JP2014178831A/ja
Application granted granted Critical
Publication of JP6127608B2 publication Critical patent/JP6127608B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は情報処理装置、データベースアクセス方法、及びプログラムに関する。
データベース内のテーブルにアクセスする複数のアプリケーションのトランザクションに関する排他制御(ロック)方式として、悲観的ロック方式と楽観的ロック方式が挙げられる。
悲観的ロック方式は、テーブル内のレコードを読み取った時点で、当該レコードに対するロックを取得し、レコードに関する更新が確定するまでロックを保持する。これにより、レコードの読み取りから更新確定までの整合性が確保される。
一方、楽観的ロック方式は、テーブル内のレコードを読み取った時点ではロックを取得せず、レコード更新実行時に他の利用者によってレコードが更新されていないことを確認したうえで更新を確定する方式である。楽観的ロック方式では、レコードが更新されていた場合に、そのトランザクションは失敗であるとみなして、最初から処理をやり直す等の処理が実行される。
これらの排他制御方式(ロック方式)は、テーブル毎にいずれか一方のみしか採用できない。そのため、楽観的ロックを採用しているテーブルに対してバッチ処理のような大量のレコード更新を行う処理を実行した場合、競合発生を考慮してトランザクション期間を短くする等の工夫が必要であった。また楽観的ロックを採用しているテーブルに対してバッチ処理を行う場合、競合発生時のロールバックコストが大きいという問題があった。
一方、悲観的ロックを採用しているテーブルに対して競合の可能性が低いアクセスを実行する場合、常にロックを取得することによって処理性能が低下してしまうという問題があった。
例えば銀行システムでは、昼間の時間帯には入出金処理等の一般利用者による小規模なトランザクションが大量に発生し、夜間の時間帯には振込処理等の大量の情報の一括処理が行われる。この場合、前者は競合の可能性が低いため楽観的ロックを適用し、後者には処理時間が短いため悲観的ロックを適用することが望ましい。しかしながら、上述のように、あるテーブルに対しては一方の排他制御方式(ロック方式)のみしか採用できない。そのため、アプリケーションの処理内容と排他制御方式(ロック方式)が適合していない(例えば小規模なトランザクションであっても悲観的ロックを採用しなければならない等)といった状況が発生していた。このような状況は、銀行システムに限られず、在庫管理システム等のあらゆるシステムにおいて問題と成り得る。
特許文献1には、ロック方式に関するシステムが開示されている。当該システムは、アプリケーションのトレースログを蓄積して解析することにより、データベース処理の適切なロック方式を動的に設定する。これによりユーザは、アプリケーションの特徴、システム構成、性能要件等に応じて手動でロック方式を設定する処理から解放される。
特開2009−37544号公報
特許文献1のシステムは、テーブル毎に排他制御方式(ロック方式)のいずれか一方のみを適用するという点では一般的なシステムと相違が無い。そのため、例えば悲観的ロック方式でのアクセスが適切なアプリケーションであっても、他のアプリケーションのアクセス内容によっては楽観的ロック方式でアクセスする必要が生じる。これにより特許文献1のシステムでは、性能が劣化するといった問題が生じていた。
本発明は上述した問題に鑑みてなされたものであり、テーブル毎の排他制御方式の割り当てによる性能劣化を回避することができる情報処理装置、データベースアクセス方法、及びプログラムを提供することを主たる目的とする。
本発明にかかる情報処理装置の一態様は、
テーブルが構成されたデータベースと、
前記テーブルに対するロック要求が生じてからコミット処理が終わるまでの悲観的ロックを用いたアクセスを管理する悲観的ロック管理テーブルと、
前記テーブルに対するロック要求が生じてからコミット処理が終わるまでの楽観的ロックを用いたアクセスを管理する楽観的ロック管理テーブルと、
悲観的ロックを行う第1アプリケーションから前記テーブルへのロック要求時に、前記悲観的ロック管理テーブルを参照して操作対象レコードがロック中かを判定し、ロック中でない場合にはコミット要求に応じて前記テーブルを更新する悲観的ロック処理部と、
楽観的ロックを行う第2アプリケーションからの前記テーブルへのロック要求時に、前記テーブルから操作対象レコードの更新状態を取得して前記楽観的ロック管理テーブルに反映し、
前記第2アプリケーションからのコミット要求時に前記悲観的ロック管理テーブルを参照して前記操作対象レコードがロック中かを判定するとともに、前記第2アプリケーションによる前記ロック要求からコミット要求までの間に前記操作対象レコードに更新が無いかを前記楽観的ロック管理テーブルを参照して判定し、
ロック中でなく、かつ更新なしと判定した場合には前記テーブルを更新する楽観的ロック処理部と、を備えるものである。
本発明にかかるデータベースアクセス方法の一態様は、
悲観的ロックを行う第1アプリケーションからデータベース内のテーブルへのロック要求時に、操作対象レコードがロック中かを判定し、ロック中でない場合にはコミット要求に応じて前記テーブルを更新する悲観的ロック処理ステップと、
楽観的ロックを行う第2アプリケーションからの前記テーブルへのロック要求時に、前記テーブルから操作対象レコードの更新状態を取得して前記楽観的ロック管理テーブルに反映し、前記第2アプリケーションからのコミット要求時に前記悲観的ロック管理テーブルを参照して前記操作対象レコードがロック中かを判定するとともに、前記第2アプリケーションによる前記ロック要求からコミット要求までの間に前記操作対象レコードに更新が無いかを前記楽観的ロック管理テーブルを参照して判定し、ロック中でなく、かつ更新なしと判定した場合には前記テーブルを更新する楽観的ロック処理ステップと、
を有する、ものである。
本発明にかかるプログラムの一態様は、
コンピュータに、
悲観的ロックを行う第1アプリケーションからデータベース内のテーブルへのロック要求時に、操作対象レコードがロック中かを判定し、ロック中でない場合にはコミット要求に応じて前記テーブルを更新する悲観的ロック処理ステップと、
楽観的ロックを行う第2アプリケーションからの前記テーブルへのロック要求時に、前記テーブルから操作対象レコードの更新状態を取得して前記楽観的ロック管理テーブルに反映し、前記第2アプリケーションからのコミット要求時に前記悲観的ロック管理テーブルを参照して前記操作対象レコードがロック中かを判定するとともに、前記第2アプリケーションによる前記ロック要求からコミット要求までの間に前記操作対象レコードに更新が無いかを前記楽観的ロック管理テーブルを参照して判定し、ロック中でなく、かつ更新なしと判定した場合には前記テーブルを更新する楽観的ロック処理ステップと、
を実行させる、ものである。
本発明は、テーブル毎の排他制御方式の割り当てによる性能劣化を回避することができる情報処理装置、データベースアクセス方法、及びプログラムを提供することができる。
実施の形態1にかかる情報処理装置の構成を示すブロック図である。 実施の形態1にかかる悲観的ロック管理テーブル220の構成を示す概念図である。 実施の形態1にかかる楽観的ロック管理テーブル210の構成を示す概念図である。 実施の形態1にかかる悲観的ロックを採用するアプリケーションからのアクセス時の情報処理装置1の動作を示すシーケンス図である。 実施の形態1にかかる悲観的ロックを採用するアプリケーションからのアクセス時の情報処理装置1の動作を示すシーケンス図である。 実施の形態1にかかる楽観的ロックを採用するアプリケーションからのアクセス時の情報処理装置1の動作を示すシーケンス図である。 実施の形態1にかかる楽観的ロックを採用するアプリケーションからのアクセス時の情報処理装置1の動作を示すシーケンス図である。 実施の形態1にかかる情報処理装置1の動作を示すシーケンス図である。 実施の形態1にかかる情報処理装置1の動作を示すシーケンス図である。 本発明にかかる情報処理装置の構成を示すブロック図である。
<実施の形態1>
以下、図面を参照して本発明の実施の形態について説明する。図1は、本実施の形態にかかる情報処理装置の構成を示すブロック図である。情報処理装置1は、アプリケーション100、トランザクション処理部200、及びデータベース300が動作する構成である。情報処理装置1は、CPU(Central Processing Unit)やHDD(Hard Disk Drive)を有するいわゆるコンピュータ装置であり、各種のプログラムによる演算処理を行う。なおアプリケーション100、トランザクション処理部200、及びデータベース300は図1に示すように単一コンピュータ装置上のプログラムとして実行されてもよく、インターネットにより接続された複数のコンピュータ装置上で分散して動作するプログラムとして実現されてもよい。
トランザクション処理部200は、楽観的ロック管理テーブル210、悲観的ロック管理テーブル220、楽観的ロック処理部230、悲観的ロック処理部240、及びデータベースアクセス部250を有する。
データベース300には、1つ以上のテーブルが展開されている。データベース300は、アプリケーション100からトランザクション処理部200を介してアクセスされる。データベース300内の各テーブルには、各ユーザが定義する項目(カラム)に加えて、そのレコードの更新状態を確認するための項目(カラム)が定義される。この項目には、更新日時や版番のような値が管理される。以下の説明において当該項目は、更新日時であるものとする。テーブル内の各レコードが更新される毎に当該更新日時も合わせて更新される。なおアプリケーション100は、データベース300内のテーブルにおける当該更新日時の存在を意識することなくアクセス処理を行えばよい。
アプリケーション100は、トランザクション処理部200を介してデータベース300内のテーブルにアクセスする。図示するようにアプリケーション100は、システム内において複数(AP1〜APn(nは2以上の自然数))動作している。アプリケーション毎に各テーブルに対して悲観的ロックによってアクセスするか(当該悲観的ロックを用いたアクセスを行うアプリケーションを第1アプリケーションとも呼称する。)、楽観的ロックによってアクセスするか(当該楽観的ロックを用いたアクセスを行うアプリケーションを第2アプリケーションとも呼称する。)が異なる。
楽観的ロック管理テーブル210及び悲観的ロック管理テーブル220は、アプリケーション(AP1〜APnのいずれか)がデータベース300のテーブルにおける各レコードにコミット要求を行う時点で最終的に行う操作情報(操作対象となるテーブルやレコード、操作内容((更新イメージ)等)を格納する。楽観的ロック管理テーブル210及び悲観的ロック管理テーブル220は、アプリケーション100からのコミット要求またはロールバック要求に対する処理が終了した場合に、当該アプリケーション100に関するレコードが削除される。すなわち楽観的ロック管理テーブル210及び悲観的ロック管理テーブル220は、ロック要求が生じてからコミットが完了するまで(所望の処理が終了するまで)の操作情報を管理する。
悲観的ロック管理テーブル220は、データベース300内のテーブルに対して、悲観的ロックを行ってアクセスする際の操作情報を格納する。悲観的ロック管理テーブル220は、情報処理装置1内に1つだけ存在する。悲観的ロック管理テーブル220は、各アプリケーション(AP1〜APn)から適宜参照される。すなわち悲観的ロック管理テーブル220は、各アプリケーション(AP1〜APn)によって共有される。悲観的ロック管理テーブル220の各行は、ロックされたレコード1件に対応する。
図2は悲観的ロック管理テーブル220の構成を示す概念図である。ロック保持APの項目(カラム)には、ロックを取得したアプリケーションを識別する情報(AP1〜APn)が格納される。悲観的ロックを用いてアクセスを行う場合、アプリケーション100は、該当するレコードに対するLOCK要求を送信した後に各種の操作(たとえば更新要求)を行い、コミット(またはロールバック)を行う。
操作種別の項目(カラム)には、コミット時にデータベース400内のテーブルのレコードに対して行う操作の種類が格納される。操作種別には、LOCK、WRITE、DELETE、REWRITEのいずれかが格納される。LOCKはロックをしただけの状態を示す。LOCKを行うことにより、該当レコードへの処理が開始する。WRITEはレコードの追加要求を受けた状態を示す。DELETEはレコードの削除要求を受けた状態を示す。REWRITEはレコード更新要求を受けた状態を示す。
更新日時の項目(カラム)は、データベース300内のテーブルのレコードが最後に更新完了された日時を示す。なお操作種別がWRITEである場合、データベース300内のテーブルには該当レコードが書き込まれていないため、更新日時の項目にはデータが無い状態となる。
格納先テーブルの項目(カラム)は、データベース300上のテーブルを識別する情報を格納する。キー情報の項目(カラム)は、格納先テーブル内でのレコードを一意に特定する情報を格納する。例えばキー情報の項目には、格納先テーブル内でのレコードの主キー等が格納される。
更新後イメージの項目(カラム)は、操作種別がWRITEまたはREWRITEである場合に、最終的にデータベース300のテーブルに追加または更新するレコードのイメージを格納する。
悲観的ロック管理テーブル220に格納される各レコードは、ロック保持APが示すアプリケーションによるコミット要求の完了、またはロールバック要求の完了の後に削除される。悲観的ロック管理テーブル220内にレコードが格納されている場合、当該レコードのロック保持AP以外からの更新要求は受け付けられない。例えば図2に示す状態において、データベース300内のTABLE1のkey0122が指し示すレコードには、AP1以外から更新要求が受付できないようになる。
なお、悲観的ロック管理テーブル220においては、更新日時に関する項目は必ずしも必須ではなく、更新日時に関する項目が存在しない構成としてもよい。
続いて楽観的ロック管理テーブル210について説明する。楽観的ロック管理テーブル210は、データベース300内のテーブルに対して、楽観的ロックを行ってアクセスする際の操作情報を格納する。楽観的ロック管理テーブル210は、アプリケーション毎に設けられる(210−1〜210−n)。
図3を参照して楽観的ロック管理テーブル210(210−1〜210−n)の構成例について説明する。楽観的ロック管理テーブル210は、図示するように項目(カラム)として操作種別、更新日時、格納先テーブル、キー情報、更新後イメージを有する。各項目の格納情報は、図2に示す悲観的ロック管理テーブル220と同様である。なお楽観的ロック管理テーブル210は、ロック保持APの項目は有さない。これは、楽観的ロック管理テーブル210は、アプリケーション毎(AP1〜APn)毎に設けられる(楽観的ロック管理テーブル210−1〜210−n)ためである。
楽観的ロック管理テーブル210に格納されるレコードは、対応するアプリケーションからのコミット要求の完了、またはロールバック要求の完了の後に削除される。楽観的ロック管理テーブル210内にレコード情報が格納されている場合であっても、他のアプリケーションからの当該レコードへの更新要求は受付可能である。例えば図3がAP1に関する楽観的ロック管理テーブル210である場合、データベース300内のTABLE2のkey0222が指し示すレコードに対して、AP1以外のアプリケーションからの更新要求が可能である。
再び図1を参照する。アプリケーションAP1〜APnの各々は、自身がデータベース300内のテーブルに対して楽観的ロックを行うか、悲観的ロックを行うかを判断して、アクセス要求(追加要求、ロック要求、コミット要求等)を送信する。なお、必ずしもこれに限られず、トランザクション処理部200が各アプリケーション(AP1〜APn)とデータベース300内のデータベース300内の各テーブルの対応表を有し、対応表に基づいて悲観的ロック処理部240と楽観的ロック処理部230にアクセス要求を振り分ける処理部(アクセス振り分け部)を有する構成であってもよい。
悲観的ロック処理部240は、データベース300内のテーブルに対する悲観的ロックを用いたアクセスを制御する。悲観的ロック処理部240は、アプリケーションAP1〜APnから送信された悲観的ロックに関するアクセス要求を解析し、アクセス先のテーブル及び当該テーブル内のアクセス先のレコードを特定する。そして悲観的ロック処理部240は、悲観的ロック管理テーブル220を参照して、当該アクセス先のテーブル内の当該レコードの読み出し、書き込み等を制御する。制御の詳細は、図4を参照して後述する。
楽観的ロック処理部230は、データベース300のテーブルに対する楽観的ロックを用いたアクセスを制御する。楽観的ロック処理部230は、アプリケーションAP1〜APnから送信された楽観的ロックに関するアクセス要求を解析し、アクセス先のテーブル及び当該テーブル内のアクセス先のレコードを特定する。そして楽観的ロック処理部230は、楽観的ロック管理テーブル210及び悲観的ロック管理テーブル220を参照して、当該アクセス先のテーブル内の当該レコードの読み出し、書き込み等を制御する。制御の詳細は、図5を参照して後述する。
データベースアクセス部250は、楽観的ロック処理部230や悲観的ロック処理部240の制御に応じてデータベース300内のテーブルの操作(レコード追加、レコード更新、レコード削除等)を行う。
続いて図4(図4−1、図4−2)を参照して、悲観的ロックを採用するアプリケーションAPからのアクセス時の情報処理装置1の動作について説明する。
アプリケーションは、データベース300内のテーブルのレコードに対するロック要求を悲観的ロック処理部240に供給する(P001)。悲観的ロック処理部240は、ロック要求にかかるレコードが既に他のアプリケーションによってロックされているかを悲観的ロック管理テーブル220を参照して確認する(P002)。ロックされていない場合、悲観的ロック処理部240はデータベース300に対して当該レコードのロックを要求してデータベース300内のテーブルの当該レコードの情報を取得する(P003)。その後に悲観的ロック処理部240は、取得したレコードの情報を悲観的ロック管理テーブル220に格納する(P004)。例えばアクセス対象のデータベース300から格納先のテーブル名やキー情報を取得して悲観的ロック管理テーブル220に反映する。この際に悲観的ロック管理テーブル220に格納されるレコードの操作種別はLOCKである。
続いてレコードの追加要求について説明する。アプリケーションは、データベース300内のテーブルのレコード追加要求を悲観的ロック処理部240に供給する。悲観的ロック処理部240は、アクセス要求にかかるレコードが既に他のアプリケーションによってロックされているかを悲観的ロック管理テーブル220を参照して確認する(P006)。ロックされていない場合、悲観的ロック処理部240はデータベース300に対して当該レコードの読み取り要求を送信する(P007)。そして悲観的ロック処理部240はレコードが読み取れないことをもって追加可能と判断し、指定された追加レコードに関する情報を悲観的ロック管理テーブル220に格納する(P008)。すなわち悲観的ロック処理部240は、アプリケーションから送信されたデータにより悲観的ロック管理テーブル220内の更新後イメージの項目を更新する。この際に悲観的ロック管理テーブル220に格納されるレコードの操作種別はWRITEである。
続いてレコードの更新要求について説明する。アプリケーションは、データベース300内のテーブルにおけるレコードの更新要求を悲観的ロック処理部240に供給する(P009)。悲観的ロック処理部240は、悲観的ロック管理テーブル220内の当該レコードの操作種別をREWRITEに変更し、指定されたレコードイメージを上書きする(P010)。
続いてレコードの削除要求について説明する。アプリケーションは、データベース300内のテーブルにおけるレコードの削除要求を悲観的ロック処理部240に供給する(P011)。悲観的ロック処理部240は、悲観的ロック管理テーブル220内の当該レコードの操作種別をDELETEに変更し、指定されたレコードイメージを削除する(P012)。なお、ロック要求からコミット要求までの間異に行われる処理は、アプリケーション毎に異なり、例えば追加要求のみしか行われないこともある。
アプリケーションがコミット要求を出力した場合(P013)、悲観的ロック処理部240は、データベースアクセス部250を介してデータベース300にトランザクションの開始を宣言する(P014)。その後に悲観的ロック処理部240は、悲観的ロック管理テーブル220からコミット要求を出力したアプリケーションのレコードをロック保持APの項目に従って読み出し(P015)、操作種別に応じて順次データベース300に反映する(P016)。例えばコミット要求を出力したアプリケーションがAP2である場合、悲観的ロック処理部240は、悲観的ロック管理テーブル220からロック保持APの項目にAP2が書き込まれたレコードを全て取得し、取得したレコードをデータベース300に反映する。なお、操作種別がLOCKであるレコードについてはP016の処理は実行しない。全てのレコードの反映が終了した後に悲観的ロック処理部240は、コミット要求を、データベースアクセス部250を介してデータベース300に送信する(P017)。また悲観的ロック処理部240は、悲観的ロック管理テーブル220から処理を行ったレコードを削除することにより、ロック解放処理を行う。
続いてロールバック要求が生じた場合の処理について説明する。アプリケーションがロールバック要求を出力した場合(P018)、悲観的ロック処理部240は、悲観的ロック管理テーブル220からロールバック要求を出力したアプリケーションのレコードを全て削除する(P019)。削除処理によりロールバック要求を出力したアプリケーションがそれまでに出力した操作要求は一切データベース300に反映されなくなる。
続いて図5(図5−1、図5−2)を参照して、楽観的ロックを採用するアプリケーションAPからのアクセス時の情報処理装置1の動作について説明する。
O001〜O012の各要求(ロック要求、追加要求、更新要求、削除要求)についての処理は、テーブルの書き込み先が楽観的ロック管理テーブル210である点を除いて図4に示すP001〜P012と概ね同様であるが、以下の点が異なる。まず悲観的ロック処理部240は、悲観的ロック管理テーブル220に対してロック中であるかの判断を行っていたが(P002)、楽観的ロック処理部230は対応する処理を行わない(すなわちO002がない)。また楽観的ロック処理部230は、データベースアクセス部250に対して当該レコードのロックを要求し、データベース300内のテーブルの当該レコードの情報を取得する(O003)。この際に当該レコードの更新日時の情報を必ず取得する。そして楽観的ロック処理部230は、O103において取得したレコードの情報(更新日時の情報を含む)を楽観的ロック管理テーブル210に格納する(O004)。
アプリケーションからコミット要求を受信(O013)した楽観的ロック処理部230は、データベースアクセス部250を介してデータベース300にトランザクションの開始を宣言する(O014)。そして悲観的ロック処理部230は、当該コミット要求を出したアプリケーションに関する全レコードを楽観的ロック管理テーブル210から順次取得し(O015)、該当レコードが悲観的ロック管理テーブル220に格納されていないことを確認する(O016)。格納されている場合、コミットを行わずに処理を終了する。
操作種別に応じてデータベース300に反映する(O017)。O017の処理において、はじめに楽観的ロック処理部230は、データベース300内のテーブルの処理対象のレコードの更新日時情報を取得する。そして楽観的ロック処理部230は、O015において読み出した各レコードの更新日時情報と、取得した当該更新日時情報と、が一致するかを確認する。ここで一致しないレコードが一つでもある場合、コミットを行わずに処理を終了する。すなわち楽観的ロック処理部230は、アプリケーションがロック要求を行ってからコミット要求が行われるまでに他のアプリケーションによって該当レコードが更新されていなかったか否かを判定する。全ての更新日時情報が一致する場合(該当レコードが更新されていなかった場合)、楽観的ロック処理部230は、O015において読み出した各レコードの情報をデータベース300に反映する。なお操作種別がLOCKであるレコードについては、上述のO017の処理は実行されない。データベース300への反映が終了した後に、悲観的ロック処理部230はコミット要求をデータベースアクセス部250を介してデータベース300に送信する(O018)。これによりデータベース300の更新が確定する。また悲観的ロック処理部230は、悲観的ロック管理テーブル210から処理済のレコードを削除する。
なお、O016において悲観的ロック管理テーブル220に処理対象のレコードが存在していた場合やO017において更新日時が一致しない場合、楽観的ロック処理部230はコミット要求を送信しない。
続いてロールバック要求が生じた(O019)場合の処理について説明する。ロールバック要求を受信した楽観的ロック処理部230は、楽観的ロック管理テーブル210からロールバック要求を発行したアプリケーションに関するレコードを全て削除する。削除処理によりロールバック要求を出力したアプリケーションがそれまでに出力した操作要求は一切データベース300に反映されなくなる。
続いて図6及び図7を参照して、悲観的ロックを採用するアプリケーション(AP1)と楽観的ロックを採用するアプリケーション(AP2)が略同一タイミングで同一レコードに対する操作要求を送信した場合の情報処理装置1の動作について説明する。
図6は、アプリケーションAP1からのレコード更新要求が送信された直後にアプリケーションAP2からのコミット要求が発生した場合の動作を示すシーケンス図である。アプリケーションAP1は、ロック要求を悲観的ロック処理部240に出力する(P101)。悲観的ロック処理部240は、ロック要求にかかるレコードが既に他のアプリケーションによってロックされているかを悲観的ロック管理テーブル220を参照して確認する(P102)。ロックされていない場合、悲観的ロック処理部240はデータベースアクセス部250に対して当該レコードのロックを要求してデータベース300内のテーブルの当該レコードの情報を取得する(P103)。その後に悲観的ロック処理部240は、取得したレコードの情報を悲観的ロック管理テーブル220に格納する(P104)。これによりアプリケーションAP1は、該当レコードのロックを取得する。
アプリケーションAP1は、該当レコードに対する更新要求を出力する(P105)。これに応じて悲観的ロック処理部240は、悲観的ロック管理テーブル220への更新を行う(P106)。
全ての更新が終了した後にアプリケーションAP1は、コミット要求を悲観的ロック処理部240に出力する(P107)。悲観的ロック処理部240は、データベースアクセス部250を介してデータベース300にトランザクションの開始を宣言する(P108)。悲観的ロック処理部240は、悲観的ロック管理テーブル220からアプリケーションAP1に関するレコードをロック保持APの項目に従って読み出し(P109)、操作種別に応じて順次データベース300に反映する(P110)。全てのレコードの反映が終了した後に悲観的ロック処理部240は、コミット要求を、データベースアクセス部250を介してデータベース300に送信する(P111)。また悲観的ロック処理部240は、悲観的ロック管理テーブル220から処理を行ったレコードを削除することにより、ロック解放処理を行う。
アプリケーションAP1のあるレコードの更新要求の送信(P101)の直後に、アプリケーションAP2が同一レコードに対する処理を進めた場合を検討する。ロック要求(O101)を受け付けた楽観的ロック処理部230は、該当レコードに関する更新日時をデータベース300から取得する(O102)。その後に楽観的ロック処理部230は、データベース300への追加要求、更新要求等を楽観的ロック管理テーブル210に書き込む(O103〜O105)。
コミット要求(O106)を受信した楽観的ロック処理部230は、データベースアクセス部250を介してデータベース300にトランザクションの開始を宣言する(O107)。そして楽観的ロック処理部230は、楽観的ロック処理部230は、楽観的ロック管理テーブル210を参照してアプリケーションAP2に関するレコードを読み出す(O108)。楽観的ロック処理部230は、O108において読み出したレコードから格納対象テーブルと対象レコードを読み出す。そして楽観的ロック処理部230は、当該格納対象テーブル及び対象レコードと同一のテーブル及びレコードを処理対象とするレコードが悲観的ロック管理テーブル220に格納されているかを照会する(O109)。本ケースでは、アプリケーションAP1による更新確定直後であるため、当該レコードはどのアプリケーションからもロックされていない。そのため、楽観的ロック処理部230は、O108で読み出したレコードを用い、操作種別に応じてデータベース300に反映する(O110)。
O110の処理において、楽観的ロック処理部230は、データベース300内のテーブルの該当レコードの更新日時情報と、O102において読み出してO103において楽観的ロック管理テーブル210に格納した該当レコードの更新日時情報が一致するかを確認する。
一致する場合、楽観的ロック処理部230はデータベース300へのコミット要求を送信する(O111)。一致しない場合には楽観的ロック処理部230はデータベース300へのコミット要求を送信しない。
アプリケーションAP2のレコード更新要求が成功するケースは、アプリケーションAP1が同一レコードのロックを取得していなかった場合、またはロックを取得しても当該レコードに何らの更新処理を行わなかった場合である。アプリケーションAP1がロックを取得していないケースでは、そもそも競合が発生しない。
アプリケーションAP2のレコード更新要求が失敗するケースは、アプリケーションAP1が同一レコードに対してロックを取得し、当該レコードに対して更新を行った場合である。この場合、アプリケーションAP2がO102において取得した更新日時と、コミット実行時の楽観的ロック管理テーブル210の更新日時が不一致となる。不一致の場合にはデータベース300へのコミット要求を出力しないため、レコード更新による不整合は生じない。
続いて図7を参照して、アプリケーションAP1がレコードロックを取得(P203)してから更新要求を確定する(P211)前に、アプリケーションAP2からコミット要求が送信された(O206)場合の処理について説明する。
本ケースでは、楽観的ロック処理部230が悲観的ロック管理テーブル220に照会を行った時点で、AP2が更新対象とするレコードがAP1によってロックされていることを認識する(O209)。よって楽観的ロック処理部230は、以降のデータベース300への反映要求(O210)やコミット要求(O211)を行わない。
図7のケースでは、アプリケーションAP1がロックの取得をしているだけでもアプリケーションAP2の更新要求は失敗する。これはアプリケーションAP1が最終的にロックの取得のみしか行わなかった場合であっても、アプリケーションAP2側からは更新操作が実施されないことを断定できないためである。
なお図6及び図7のいずれのケースであっても、アプリケーションAP1がロックを取得するタイミング(P204)と、アプリケーションAP2がレコードを最初に読み取るタイミング(O202)が前後することは問題ない。この時点において両者は、他方が参照または更新するロック管理テーブルの内容について関知しないためである。
続いて本実施の形態にかかる情報処理装置の効果について説明する。上述したように、データベース300のテーブルに対するアクセスは、楽観的ロック方式と悲観的ロック方式が併存している。これにより、アプリケーション100−1〜100−n毎に処理の性質等に応じたロック方式の選択が可能となり、システム全体としての処理性能を向上させることができる。
悲観的ロック処理部240は、テーブルに対する悲観的ロックを用いたアクセスが生じているかを管理する悲観的ロック管理テーブル220を参照して、すでにロックが取得されていない場合に限りロックを取得する。また楽観的ロック処理部230もコミット前に悲観的ロック管理テーブル220を参照し、すでにロックが取得されていない場合に限りコミットを行う。これにより、悲観的ロックが生じている場合にはロックの取得が他のアプリケーションからも禁止され、一般的な悲観的ロックと同様の効果を得ることができる。
また楽観的ロック処理部230は、あるアプリケーションからのロック取得要求時に対象となるレコードの更新状況を取得する。楽観的ロック処理部230は、コミット時に悲観的ロック管理テーブル220を参照して確認する。また楽観的ロック処理部230は、当該アプリケーションロック取得要求からコミットまでの間に処理対象のレコードに更新が生じていなかったかを楽観的ロック管理テーブル210を参照して確認し、悲観的ロックが取得されておらず、かつレコードの更新が生じていなかった場合にのみ更新処理を行う。これにより、一般的な楽観的ロック方式と同様の処理を実現することができ、かつ悲観的ロックとの整合性も保たれる。
楽観的ロック処理部230による更新判定は、上述のように更新日時を用いて更新日時の比較を行う。日時取得は一般的なコンピュータ装置が有している機能であるため、既存のシステムに大きな変更を加えることなく、上述の判定を実現できる。また更新判定に通番を使った場合、データベース300とトランザクション処理部200が異なる装置上にあることにより計時時刻のずれがあるような場合であっても正確な判定を行うことができる。
ロールバック要求の発生時には、楽観的ロック管理テーブル210及び悲観的ロック管理テーブル220から要求発行元のアプリケーションに関するデータ列が削除される。これにより、データベース300に何らの影響を与えることなく処理の取り消しを実現することができる。
上述した実施の形態は本件発明者により得られた技術思想の適用に関する例に過ぎない。すなわち、当該技術思想は、上述した実施の形態のみに限定されるものではなく、種々の変更が可能であることは勿論である。
たとえば、データベース300が複数のユーザからのトランザクションを受付可能である場合、データベース300内のテーブル毎に悲観的ロック管理テーブル220を設ける等して同時実効性を高めてもよい。
また楽観的ロック管理テーブル210は、アプリケーション毎に設けられるものとしたが必ずしもこれに限られず、一つのテーブルにより実現してもよい。この場合、当該テーブル内にアプリケーションAP1〜APnを識別する識別情報の項目(カラム)を設ければよい。
アプリケーション100及びトランザクション処理部200内の各処理は任意のコンピュータ内で動作するプログラムとして実現することが可能である。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(random access memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
最後に図8を参照して、本発明にかかる情報処理装置1の本質的な動作について改めて説明する。データベース300には1以上のテーブルが展開されている。アプリケーションAP1〜APnは、その性質毎にロック要求等のアクセス要求を悲観的ロック処理部240または楽観的ロック処理部230に送信する。
悲観的ロック管理テーブル220は、ロック要求が生じてからコミット処理が終わるまでの悲観的ロックを用いたアクセスを管理する。たとえば該当レコードに対するロックが行われたのちに更新が行われた場合、その更新内容が管理される。
楽観的ロック管理テーブル210は、ロック要求が生じてからコミット処理が終わるまでの楽観的ロックを用いたアクセスを管理する。ここで楽観的ロック管理テーブル210は、データベース300内のテーブルにおける操作対象レコードのロック時の更新状態(最終更新日時等)も合わせて管理する。
悲観的ロック処理部240は、悲観的ロックを行うアプリケーションからのロック要求時に、悲観的ロック管理テーブル220を参照して操作対象のレコードにロックが生じているかを判定する。ロックが無い場合に悲観的ロック処理部240は、コミット要求に応じてテーブルへのコミット処理を行う。
楽観的ロック処理部230は、楽観的ロックを行うアプリケーションからのロック要求時に、データベース300から操作対象のレコードの更新状態(更新日時等)を取得する。悲観的ロック処理部240は、コミット要求に応じて、楽観的ロック管理テーブル210を参照し、ロックが生じてからコミットまでに操作対象となるレコードが更新されていないかを判定する。当該判定は、例えば上述のように更新日時の一致性により行う。レコードの更新が行われていない場合、楽観的ロック処理部230は、データベース300ンに対してコミット処理を行う。
上述の構成により、アプリケーション毎にロック方式を選択できるとともに、悲観的ロックが行われている際にはロックの取得が禁止される。また楽観的ロックの要求が生じてからコミットが行われるまでのレコード更新も判定するため、一般的な楽観的ロック方式と同等の制御が可能となる。
1 情報処理装置
100(AP1〜APn) アプリケーション
200 トランザクション処理部
210(210−1〜210−n) 楽観的ロック管理テーブル
220 悲観的ロック管理テーブル
230 楽観的ロック処理部
240 悲観的ロック処理部
250 データベースアクセス部
300 データベース

Claims (7)

  1. アクセス対象テーブルを含むデータベースと、
    前記アクセス対象テーブルに対するロック要求が生じてからコミット処理が終わるまでの悲観的ロックを用いたアクセスを管理する悲観的ロック管理テーブルと、
    前記アクセス対象テーブルに対するロック要求が生じてからコミット処理が終わるまでの楽観的ロックを用いたアクセスを管理する楽観的ロック管理テーブルと、
    悲観的ロックを行う第1アプリケーションから前記アクセス対象テーブルへのロック要求時に、前記悲観的ロック管理テーブルを参照して操作対象レコードがロック中かを判定し、ロック中でない場合にはコミット要求に応じて前記アクセス対象テーブルを更新する悲観的ロック処理部と、
    楽観的ロックを行う第2アプリケーションからの前記アクセス対象テーブルへのロック要求時に、前記アクセス対象テーブルから操作対象レコードの更新状態を取得して前記楽観的ロック管理テーブルに反映し、
    前記第2アプリケーションからのコミット要求時に前記悲観的ロック管理テーブルを参照して前記操作対象レコードがロック中かを判定するとともに、前記第2アプリケーションによる前記ロック要求からコミット要求までの間に前記操作対象レコードに更新が無いかを前記楽観的ロック管理テーブルを参照して判定し、
    ロック中でなく、かつ更新なしと判定した場合には前記アクセス対象テーブルを更新する楽観的ロック処理部と、
    を備える情報処理装置。
  2. 前記悲観的ロック管理テーブルは、前記アクセス対象テーブルを操作するアプリケーションの識別子と、操作対象のレコードを識別する情報と、操作内容と、を管理し、
    前記楽観的ロック管理テーブルは、操作対象のレコードを識別する情報と、操作内容と、前記第2アプリケーションからの前記ロック要求が生じた時の前記第2アプリケーションが操作対象とするレコードの更新状態と、を管理する、請求項1に記載の情報処理装置。
  3. 前記悲観的ロック処理部は、前記第1アプリケーションからロールバック要求が生じた場合に前記悲観的ロック管理テーブルから前記第1アプリケーションにかかるデータ列を削除する、請求項1または請求項2に記載の情報処理装置。
  4. 前記楽観的ロック処理部は、前記第2アプリケーションからロールバック要求が生じた場合に前記楽観的ロック管理テーブルから前記第2アプリケーションにかかるデータ列を削除する、請求項1〜請求項3のいずれか1項に記載の情報処理装置。
  5. 前記更新状態は、最終更新日時または更新順序を示す通番である、請求項2に記載の情報処理装置。
  6. 悲観的ロックを行う第1アプリケーションからデータベース内のアクセス対象テーブルへのロック要求時に、操作対象レコードがロック中かを判定し、ロック中でない場合にはコミット要求に応じて前記アクセス対象テーブルを更新する悲観的ロック処理ステップと、
    楽観的ロックを行う第2アプリケーションからの前記アクセス対象テーブルへのロック要求時に、前記アクセス対象テーブルから操作対象レコードの更新状態を取得して楽観的ロック管理テーブルに反映し、前記第2アプリケーションからのコミット要求時に悲観的ロック管理テーブルを参照して前記操作対象レコードがロック中かを判定するとともに、前記第2アプリケーションによる前記ロック要求からコミット要求までの間に前記操作対象レコードに更新が無いかを前記楽観的ロック管理テーブルを参照して判定し、ロック中でなく、かつ更新なしと判定した場合には前記アクセス対象テーブルを更新する楽観的ロック処理ステップと、
    を有するデータベースアクセス方法。
  7. コンピュータに、
    悲観的ロックを行う第1アプリケーションからデータベース内のアクセス対象テーブルへのロック要求時に、操作対象レコードがロック中かを判定し、ロック中でない場合にはコミット要求に応じて前記アクセス対象テーブルを更新する悲観的ロック処理ステップと、
    楽観的ロックを行う第2アプリケーションからの前記アクセス対象テーブルへのロック要求時に、前記アクセス対象テーブルから操作対象レコードの更新状態を取得して楽観的ロック管理テーブルに反映し、前記第2アプリケーションからのコミット要求時に悲観的ロック管理テーブルを参照して前記操作対象レコードがロック中かを判定するとともに、前記第2アプリケーションによる前記ロック要求からコミット要求までの間に前記操作対象レコードに更新が無いかを前記楽観的ロック管理テーブルを参照して判定し、ロック中でなく、かつ更新なしと判定した場合には前記アクセス対象テーブルを更新する楽観的ロック処理ステップと、
    を実行させる、プログラム。
JP2013051812A 2013-03-14 2013-03-14 情報処理装置、データベースアクセス方法、及びプログラム Active JP6127608B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013051812A JP6127608B2 (ja) 2013-03-14 2013-03-14 情報処理装置、データベースアクセス方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013051812A JP6127608B2 (ja) 2013-03-14 2013-03-14 情報処理装置、データベースアクセス方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2014178831A JP2014178831A (ja) 2014-09-25
JP6127608B2 true JP6127608B2 (ja) 2017-05-17

Family

ID=51698732

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013051812A Active JP6127608B2 (ja) 2013-03-14 2013-03-14 情報処理装置、データベースアクセス方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP6127608B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6442996B2 (ja) 2014-11-13 2018-12-26 日本電気株式会社 トランザクション処理装置、トラザクション処理方法、及びプログラム
CN111400283B (zh) * 2020-03-19 2024-02-06 中国建设银行股份有限公司 一种数据处理方法、系统、电子设备及存储介质
CN111797107B (zh) * 2020-07-08 2024-02-09 贵州易鲸捷信息技术有限公司 混合乐观锁和悲观锁的数据库事务并发控制方法
CN114598559A (zh) * 2021-07-22 2022-06-07 湖南亚信软件有限公司 数据处理方法、装置、电子设备及计算机可读存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0619769A (ja) * 1992-06-30 1994-01-28 Oki Electric Ind Co Ltd レコードロック制御方法
AU7704696A (en) * 1995-12-01 1997-06-27 British Telecommunications Public Limited Company Database access
JP3450154B2 (ja) * 1997-04-18 2003-09-22 日本電気株式会社 ファイルアクセス処理システム
US6850938B1 (en) * 2001-02-08 2005-02-01 Cisco Technology, Inc. Method and apparatus providing optimistic locking of shared computer resources

Also Published As

Publication number Publication date
JP2014178831A (ja) 2014-09-25

Similar Documents

Publication Publication Date Title
US10579364B2 (en) Upgrading bundled applications in a distributed computing system
US11099937B2 (en) Implementing clone snapshots in a distributed storage system
US9058351B2 (en) Apparatus and method for read optimized bulk data storage
US11132350B2 (en) Replicable differential store data structure
EP3465473B1 (en) Versioning and non-disruptive servicing of in-memory units in a database
CN108021338B (zh) 用于实现两层提交协议的系统和方法
US20140149700A1 (en) Managing write operations to an extent of tracks migrated between storage devices
US9009125B2 (en) Creating and maintaining order of a log stream
US8832022B2 (en) Transaction processing device, transaction processing method and transaction processing program
US9734157B1 (en) Method for sub-block operations on a journal block using ranged locking
US11847034B2 (en) Database-level automatic storage management
JP2019204278A (ja) 情報処理システム、情報処理装置およびプログラム
JP5357068B2 (ja) 情報処理装置、情報処理システム、データ・アーカイブ方法およびデータ削除方法
JP5439236B2 (ja) 計算機システムおよびアプリケーションプログラムの実行方法
JP6127608B2 (ja) 情報処理装置、データベースアクセス方法、及びプログラム
JP2005532615A (ja) データ項目の使用可能バージョンの提供
US10664450B2 (en) Decoupling the commit and replay of metadata updates in a clustered file system
US10346362B2 (en) Sparse file access
US10922280B2 (en) Policy-based data deduplication
US11275795B2 (en) System and method for in-place record content management
US11599504B2 (en) Executing a conditional command on an object stored in a storage system
US20110093688A1 (en) Configuration management apparatus, configuration management program, and configuration management method
JP4930553B2 (ja) データ移行機能を有した装置及びデータ移行方法
US10409651B2 (en) Incremental workflow execution
US11748203B2 (en) Multi-role application orchestration in a distributed storage system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160203

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170110

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170308

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170314

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170327

R150 Certificate of patent or registration of utility model

Ref document number: 6127608

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150