JP2017054207A - データベース制御プログラム、データベース制御方法及びデータベース制御装置 - Google Patents

データベース制御プログラム、データベース制御方法及びデータベース制御装置 Download PDF

Info

Publication number
JP2017054207A
JP2017054207A JP2015176111A JP2015176111A JP2017054207A JP 2017054207 A JP2017054207 A JP 2017054207A JP 2015176111 A JP2015176111 A JP 2015176111A JP 2015176111 A JP2015176111 A JP 2015176111A JP 2017054207 A JP2017054207 A JP 2017054207A
Authority
JP
Japan
Prior art keywords
record
update process
value
transaction
updated
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.)
Granted
Application number
JP2015176111A
Other languages
English (en)
Other versions
JP6515753B2 (ja
Inventor
高橋 幸治
Koji Takahashi
幸治 高橋
樹一 山田
Kiichi Yamada
樹一 山田
真彦 永田
Masahiko Nagata
真彦 永田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015176111A priority Critical patent/JP6515753B2/ja
Priority to US15/246,886 priority patent/US10417214B2/en
Publication of JP2017054207A publication Critical patent/JP2017054207A/ja
Application granted granted Critical
Publication of JP6515753B2 publication Critical patent/JP6515753B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps

Abstract

【課題】更新処理の待ち時間を短縮することを目的とする。
【解決手段】コンピュータに、データベースに記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合に、前記項目値が前記更新処理により更新された場合の数値を項目値とするレコードと、前記項目値が前記更新処理により更新されない場合の数値を項目値とするレコードと、を生成し、前記更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、ことを実行させるデータベース制御プログラムが提供される。
【選択図】図5

Description

本発明は、データベース制御プログラム、データベース制御方法及びデータベース制御装置に関する。
複数のトランザクションからデータベースへのアクセスが同時に発生した場合、排他制御を行うことでデータベース内のデータの整合性が保証される。このとき、競合するトランザクションのうちの一方がデータの更新をコミット又はロールバックするまで他方のトランザクションは待ち状態になる。つまり、排他制御では、複数のトランザクションを並列に実行することができないため、トランザクションの処理効率が低下する。これに対して、競合するトランザクションを並列に実行する技術が知られている(例えば、特許文献1及び特許文献2参照)。
また、データベースの更新処理において、オンライン処理とバッチ処理とを並列に実行する技術として、MVCC(Multi-Version Concurrency Control:多版式同時実行制御)が知られている。MVCCでは、更新前のレコードをデータベース上に記憶しつつ、更新後のレコードを新しいレコードとしてデータベース上に追記することで複数の新旧バージョンのレコードを管理する。これにより、比較的少量のレコードの更新を行うオンライン処理と比較的大量のレコードの更新を行うバッチ処理とを並列に実行することができる。
特開平11−85544号公報 特開2012−155498号公報
しかしながら、データベース内のデータのうち、最新のレコードはあくまで一つである。よって、複数のトランザクションがいずれも最新のレコードを更新しようとすると、それらの更新処理を同時に行うことはできず、排他制御しなければならない。例えば、並列に実行されているオンライン処理とバッチ処理とにおいて最新のレコードを更新する更新処理が発生した場合、オンライン処理とバッチ処理の一方の更新処理が完了しないと、ロックが解除されず、他方の更新処理が実行できない。このため、ロックが解除されるまでの間に他方の更新処理の待ち時間が発生し、処理効率が低下するという課題がある。
そこで、一側面では、本発明は、更新処理の待ち時間を短縮することを目的とする。
一つの案では、コンピュータに、データベースに記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合に、前記項目値が前記更新処理により更新された場合の数値を項目値とするレコードと、前記項目値が前記更新処理により更新されない場合の数値を項目値とするレコードと、を生成し、前記更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、ことを実行させるデータベース制御プログラムが提供される。
一側面によれば、更新処理の待ち時間を短縮することができる。
データベースに記憶されるレコードの一例を示す図。 レコード更新時のロックの一例を説明するための図。 一実施形態にかかるデータベースサーバの機能構成の一例を示す図。 一実施形態にかかる更新処理の一例を示すフローチャート。 一実施形態にかかる更新処理中のレコードの状態の一例を示す図。 一実施形態にかかるデータベースに記憶されるレコードの一例を示す図。 一実施形態にかかる更新処理中のレコードの状態の他の例を示す図。 一実施形態にかかる更新処理中のレコードの状態の他の例を示す図。 一実施形態にかかる更新処理中のレコードの状態の他の例を示す図。 一実施形態にかかる更新処理中のレコードの状態の他の例を示す図。 一実施形態にかかる更新処理中のレコードの状態の他の例を示す図。 一実施形態にかかるデータベースサーバのハードウェア構成の一例を示す図。
以下、本発明の実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省く。
(データベース更新処理)
データベースへの更新処理を、オンライン処理とバッチ処理とに分け、昼間はオンライン処理、夜間はバッチ処理というように時間を分けて実行する方法がある。しかし、24時間サービス化、グローバル化、スピード化に伴い、オンライン処理とバッチ処理とを並列で実行する必要性が出てきている。そこで、オンライン処理とバッチ処理とを並列に実行することができる技術としてMVCCが知られている。
(MVCC)
MVCC(Multi-Version Concurrency Control:多版式同時実行制御)について、図1を参照しながら簡単に説明する。図1は、データベースに記憶されるレコードの一例を示す。MVCCでは、更新前のレコードをデータベース上に記憶しつつ、更新後のレコードを新しいレコードとして同じデータベース上に追記する。
例えば図1(a)に示すように、にんじんを10個入荷するトランザクションプログラム(以下、「トランザクション」ともいう。)Tx100による更新処理によってデータベースにレコード番号「No.1」のレコードが記憶されたとする。このとき、レコード番号「No.1」の品目、個数、追加トランザクション(Tx)ID、レコード状態の各項目には、にんじん、10、Tx100、有効の情報がそれぞれ記憶される。
次に、たまねぎを4個入荷するトランザクションTx101による更新処理によってデータベースには図1(b)に示すレコード番号「No.2」のレコードが記憶される。次に、たまねぎを4個加算するトランザクションTx105による更新処理によって、データベースには図1(c)に示すレコード番号「No.3」のレコードが記憶される。レコード番号「No.3」のレコードのたまねぎの個数は8個になる。このとき、更新前のレコード番号「No.2」のレコードをデータベースに記憶したまま、更新後のレコード番号「No.3」のレコードが新たに記憶される。レコード番号「No.2」のレコードの削除トランザクション(Tx)IDには、トランザクションTx105が記憶され、レコード番号「No.2」のレコードのレコード状態は無効になる。
次に、しいたけを2個入荷することと品目からたまねぎを削除するトランザクションTx110による更新処理によって、図1(d)に示すように、データベースにはレコード番号「No.4」のしいたけを2個入荷したことを記録するレコードが記憶される。また、品目からたまねぎを削除することで、レコード番号「No.3」のレコードの削除トランザクション(Tx)IDには、トランザクションTx110が記憶され、レコード番号「No.3」のレコードのレコード状態は無効になる。
例えばトランザクションNo.が若い数字から順にトランザクション処理が実行された場合、他トランザクションTx90、Tx106、Tx120からのレコードの見え方の一例を図1(e)に示す。図1(e)では、トランザクションTx90、Tx106、Tx120のそれぞれからデータベースに格納された各レコードがどのように見えるかを示す。
トランザクションTx90は、トランザクションTx100よりも早く実行されるため、トランザクションTx90から見てレコード番号「No.1」〜「No.4」のレコードはデータベースに存在しない。トランザクションTx106は、トランザクションTx105とトランザクションTx110との間に実行される。よって、トランザクションTx106は、図1(c)に示す有効なレコード番号「No.1」及び「No.3」のレコードを見ることができ、図1(c)に示す無効なレコード番号「No.2」のレコードを見ることができない。また、このとき、図1(d)に示すレコード番号「No.4」のレコードは存在しない。
トランザクションTx120は、トランザクションTx110の後に実行される。よって、トランザクションTx120は、図1(d)に示す有効なレコード番号「No.1」及び「No.4」のレコードを見ることができ、図1(d)に示す無効なレコード番号「No.2」及び「No.3」のレコードを見ることができない。
(レコード更新時のロック)
以上に示したMVCCではデータベースに新旧バージョンのレコードが記憶される。しかしながら、一のデータについての最新のレコードはあくまで一つである。よって、複数のトランザクションがいずれも最新のレコードを更新しようとすると、それらの更新処理を同時に行うことはできず、排他制御が発生する。
例えば、図2を参照しながら2種類のトランザクションのレコード更新時のロックについて説明する。オンライン処理のトランザクションをTo1〜To3で示し、バッチ処理のトランザクションをTb1で示す。
オンライン処理のトランザクションTo1〜To3は、少量のレコードを更新する。オンライン処理の一例としては出荷処理がある。オンライン処理のトランザクションは、同時に多数動作することがある。これに対して、バッチ処理のトランザクションTb1は、大量のレコードを更新する。バッチ処理の一例としては入荷処理がある。バッチ処理のトランザクションが同時に動作する数は、オンライン処理よりも少ない。
例えば、同じデータベースに記憶されたレコードを更新する場合、先行のトランザクションを実行中、後続のトランザクションがロック待ちとなり後続のトランザクションの処理時間が間延びする。つまり、ロックが解除されるまで後続のトランザクションの更新処理が行えずに待ち時間が発生し、処理効率が低下するという課題がある。
図2の横軸は、各トランザクションTo1〜To3、Tb1と各レコードのロック状況を示し、縦軸は、紙面の上から下へ向かって経過する時間を示す。具体的には、バッチ処理Tb1がにんじんのレコードを更新するためににんじんのレコードをロックした後、オンライン処理To1がたまねぎのレコードを更新するためにたまねぎのレコードをロックする。その後、バッチ処理Tb1がたまねぎのレコードを更新する際、図2の(1)に示すように、オンライン処理To1が更新中のためにたまねぎのレコードはロックされており、ロックが解除されるまでバッチ処理Tb1に待ち時間が生じる。オンライン処理To1のたまねぎのレコードの更新が完了(コミット)すると、バッチ処理Tb1がたまねぎのレコードをロックする。
次に、オンライン処理To2がしいたけのレコードを更新するためにしいたけのレコードをロックする。次に、バッチ処理Tb1がしいたけのレコードを更新する際、図2の(2)に示すように、オンライン処理To2が更新中であるため、しいたけのレコードのロックが解除されるまでバッチ処理Tb1に待ち時間が生じる。この結果、図2の(3)に示すように、同一レコードを同時に更新することができず、同一レコードの更新処理をシリアルに実行しているためにバッチ処理Tb1に待ち時間が蓄積する。このようにしてバッチ処理Tb1の処理時間がオンライン処理To1、To2の処理状況に応じて長くなる。同様に、図2の(4)に示すように、バッチ処理Tb1が更新中のレコードを更新したいオンライン処理To3は、バッチ処理Tb1の更新処理が完了するまで待たされる。
このように、データベースの更新処理において、オンライン処理とバッチ処理とを並列して実行するMVCC技術があるものの、あくまでも最新のレコードは一つであるため複数のトランザクションで同時に同一のレコードを更新することはできない。あるレコードを更新する場合、そのレコードが他のトランザクションから更新されないようにロックする。ロックが解除されるのは、トランザクションの終了時、つまり、トランザクションがコミットされたときである。よって、先行のオンライン処理中のトランザクションのコミットを待たないと後続のバッチ処理が実行できない。同様に、先行のバッチ処理中のトランザクションのコミットを待たないと後続のオンライン処理が実行できない。
そこで、以下に説明する本実施形態にかかるデータベース制御方法では、複数のトランザクションによる同一レコードへの更新を並列に、かつ同時に更新する。これにより、先行のトランザクションがコミット又はロールバックするまで後続のトランザクションに生じる待ち時間を減らすことができる。その結果、トランザクションの更新処理における実行時間を短縮することができる。
なお、コミットは、更新処理を確定することをいい、ロールバックは、更新処理をコミットせずに更新処理の一つ前の状態に戻すことをいう。
[データベースサーバの機能構成]
まず、本発明の一実施形態に係るデータベースサーバ20の機能構成の一例について、図3を参照しながら説明する。本実施形態に係るデータベースサーバ20は、利用者端末10とネットワークを介して接続されており、データベース27に記憶されたデータの検索、更新、削除などの処理を実行するトランザクションを受け付ける。データベースサーバ20は、データベース制御装置の一例である。
データベースサーバ20は、トランザクション実行部21、レコード生成部23、レコード削除部24及び記憶部25を有する。トランザクション実行部21は、記憶部25に記憶されるデータベース27のデータの検索、更新、削除などの各種トランザクション処理を実行する。トランザクション実行部21で実行されるトランザクション処理のうちの更新処理は、更新処理部22により実行される。
具体的には、更新処理部22は、更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、新たな更新処理を行う。
データベース27に記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合について説明する。この場合、レコード生成部23は、項目値が更新処理により更新された場合の数値を項目値とするレコードと、項目値が更新処理により更新されない場合の数値を項目値とするレコードとを生成する。
レコード削除部24は、いずれかの更新処理(新たな更新処理を含む)がコミット又はロールバックした時点で、取り得る可能性がなくなったデータ項目の項目値を含むレコードを削除する。
記憶部25は、データベース27に所定のデータを記憶する。図6にデータベース27のデータ構造の一例を示す。データベース27は、レコード番号271、品目272、個数273、トランザクションID274及びレコードの状態275の各データ項目を有する。本実施形態では、入荷処理や出荷処理のトランザクションを実行することで、数値の項目値である個数273が更新される。
記憶部25には、データベース27のデータの更新等を行うための更新処理プログラム28がインストールされている。データベースサーバ20は、更新処理プログラム28がインストールされることにより、利用者端末10が要求するデータベース27のデータの検索、更新、削除などの各種トランザクション処理を実行する。
[データベース制御処理]
次に、本実施形態に係るデータベース制御処理中の更新処理について図4のフローチャートを参照して説明する。トランザクション実行部21は、利用者端末10からデータベース27のデータ検索等を行うトランザクションを受け付けると、所定のデータを検索する。トランザクション実行部21の更新処理部22は、トランザクション中で実行されるデータの更新処理を実行する。
図4の更新処理の実行が開始されると、トランザクション実行部21の更新処理部22は、データベース27の更新処理が発生したかを判定する(ステップS10)。更新処理部22は、データベース27の更新処理が発生するまで待つ。更新処理部22は、更新処理が発生した場合、更新処理により更新された場合の更新後レコードと、更新処理により更新されない場合の更新後レコードとの2(n=1)個(ここでは2個)の更新後レコードを生成する(ステップS12)。
例えば、図5には、以下の<パターン1−1>のトランザクションが順に発生した場合にデータベース27に記憶されるレコードの一例を示す。図5の紙面の左から右に向かって時間が経過し、各レコードの数値の経時的な遷移が示されている。
<パターン1−1>
先行トランザクション:入荷処理(バッチ処理)
後続トランザクション:出荷処理(オンライン処理)
・後続トランザクションが先行トランザクションよりも先にコミット(確定)する場合
(1)先行トランザクションを実行し、50個を入荷
(2)後続トランザクションを実行し、30個を出荷
(3)後続トランザクションの出荷処理がコミット(確定)
(4)先行トランザクションの入荷処理がコミット(確定)
図4のステップS10において(1)先行トランザクションの更新処理が発生したとする。この場合、ステップS12では、この時点で考えられる更新処理のすべてのレコードが生成される。ここで、(1)の入荷処理が成功した場合と、失敗した場合との2つの更新処理がこの時点で考えられる更新処理のすべてである。よって、(1)先行トランザクションの実行後、データベース27には入荷処理が成功した場合の150個を記憶したレコードと、入荷処理が失敗した場合の100個を記憶したレコードとが記憶される。
つまり、(1)の先行トランザクション実行前、図6(a)に示すように、レコード番号271「No.1」のレコード(以下、「レコード1」ともいう。)がデータベース27に記憶されているとする。
図6(a)の(1)に示すように、先行トランザクションTx11の実行後、(1)の入荷処理が成功した場合のレコード番号271「No.2」のレコード(以下、「レコード2」ともいう。)がデータベース27に追記される。レコード2の各データ項目には、品目272「たまねぎ」、個数273「150」、トランザクションID274「Tx11」、状態275「未コミット」が記憶される。また、(1)の入荷処理が失敗した場合のレコード番号271「No.1」もそのままデータベース27に記憶される。
図4に戻り、次に、更新処理部22は、すべての更新処理がコミットしたかを判定し(ステップS14)、すべての更新処理がコミットした場合、本処理を終了する。この時点では、先行トランザクションの更新処理はコミットされていない。よって、更新処理部22は、ステップS16に進み、新たな更新処理が発生したかを判定する(ステップS16)。
更新処理部22は、新たな更新処理が発生していないと判定した場合、ステップS22に進む。更新処理部22は、新たな更新処理が発生したと判定した場合、nに「1」を加算する(ステップS18)。次に、更新処理部22は、更新後のレコード(図5の「100」と「150」のレコード)のそれぞれに対して新たな更新処理により更新された場合の更新後レコード及び更新されない場合の更新後レコードの2(=4)個の更新後レコードを生成する(ステップS20)。
図4のステップS16では図5の(2)後続トランザクションの更新処理が発生したとする。この場合、ステップS20では、(1)の入荷処理が成功した場合と、失敗した場合とのそれぞれに対して、(2)の出荷処理が成功した場合と、失敗した場合との4つの組み合わせの更新処理が、この時点で考えられる更新処理のすべてである。
よって、(2)後続トランザクションの実行後、データベース27には以下の4つのレコードが記憶される。
・(1)入荷処理が成功し、(2)出荷処理が成功した場合の120個を記憶したレコード
・(1)入荷処理が成功し、(2)出荷処理が失敗した場合の150個を記憶したレコード
・(1)入荷処理が失敗し、(2)出荷処理が成功した場合の70個を記憶したレコード
・(1)入荷処理が失敗し、(2)出荷処理が失敗した場合の100個を記憶したレコード
つまり、図6(a)の(2)に示すように、(2)の後続トランザクションTx12の実行後、レコード番号271「No.3」のレコード(レコード3)と「No.4」のレコード(レコード4)とがデータベース27に追記される。レコード3の各データ項目には、品目272「たまねぎ」、個数273「70」、トランザクションID274「Tx12」、状態275「未コミット」が記憶される。レコード4の各データ項目には、品目272「たまねぎ」、個数273「120」、トランザクションID274「Tx12」、状態275「未コミット」が記憶される。
図4に戻り、次に、更新処理部22は、いずれかの更新処理がコミット又はロールバックしたかを判定する(ステップS22)。図5の場合、更新処理部22は、(1)の先行トランザクションの更新処理又は(2)の後続トランザクションの更新処理がコミット又はロールバックしたかを判定する。更新処理部22は、いずれの更新処理もコミット又はロールバックしていないと判定した場合、ステップS14に戻り、ステップS14以降の処理を繰り返す。
他方、更新処理部22は、いずれかの更新処理がコミット又はロールバックしたと判定した場合、取り得る可能性がない更新後のレコードを削除し(ステップS24)、その後、ステップS14に戻り、ステップS14以降の処理を繰り返す。
図5では(3)において後続トランザクションの出荷処理がコミットする。この場合、(3−2)に示す出荷されていない場合の「150」のレコードは、取り得る可能性がない更新後レコードであるため、削除される。また、(3−1)に示すように、「100」で示すレコードがコミット済の古いレコードになり、「70」で示すレコードがコミット済の最新レコードになる。更に、(3−3)に示すように、「120」で示すレコードは、入荷後に出荷した(120=100+50−30)ではなく、出荷後に入荷した(120=100−30+50=70+50))未コミットのレコードになる。
この結果、この時点では、図6(b)に示すように、(3)の後続トランザクションTx12のコミット後、レコード2がデータベース27から削除される。この結果、レコード1の状態275が「コミット済古い(コミット済の古いレコード)」、レコード3の状態275が「コミット済最新(コミット済の最新レコード)」、レコード4の状態275が「未コミット(コミットされていないレコード)」となる3つのレコードが記憶される。
図4に戻り、次に、更新処理部22は、ステップS14に戻り、すべての更新処理がコミットされているかを判定する。この時点で(4)先行トランザクションの入荷処理がコミットされていない。よって、更新処理部22は、ステップS16に進み、新たな更新処理が発生したかを判定する。この時点では新たな更新処理が発生していない。よって、更新処理部22は、ステップS22に進み、いずれかの更新処理がコミット又はロールバックしたかを判定する(ステップS22)。図5の場合、更新処理部22は、(3)の後続トランザクションがコミットした後、(4)の先行トランザクションの更新処理がコミットされている。このとき、更新処理部22は、取り得る可能性がない更新後のレコードを削除する(ステップS24)。ここでは削除すべき更新後のレコードは存在しない。
図5に示すように、(4)の先行トランザクションの更新処理がコミットされた場合、図5の(4―1)に示す「120」のレコード4が、コミット済の最新値「120」を有する最新レコードと判定される。これにより、「120」を有する最新レコードは、他のトランザクションから参照可能になる。そして、図5の(4―2)に示す「70」のレコード3が、「コミット済古い」となる。この時点では、図6(c)に示すように、(4)の先行トランザクションTx11のコミット後、レコード1及びレコード3の状態275「コミット済古い」、レコード4の状態275「コミット済最新」で示される3つのレコードが記憶される。
図4に戻り、ステップS14に戻り、この時点で、更新処理部22は、すべての更新処理がコミットされたと判定し、本処理を終了する。
以上に説明したように、本実施形態にかかるデータベース制御方法によれば、本実施形態は、データベースのトランザクションの同時実行に関し、特に同一資源に対して複数のトランザクションの更新処理を同時に行うことができる。つまり、一のトランザクションが他のトランザクションの更新処理が終わることを待つのではなく、同時に同一のデータに対して更新処理を行うことができる。これにより、データベースの更新処理において、オンライン処理とバッチ処理を同時に実行できる。
具体的には、本実施形態では、あるトランザクションがコミットする前に、別のトランザクションの処理を実行した場合において、その時点で考えられる更新処理のすべてのレコードが生成される。これにより、データベース27の更新処理において、複数のトランザクション(例えば、オンライン処理とバッチ処理)の更新処理を同時に実行できる。この結果、複数のトランザクション処理の待ち時間を短縮することができる。
また、本実施形態では、それぞれのトランザクションがコミットした時点で取り得ないレコードを削除する。これにより、不要なレコードをデータベース27から削除し、複数のトランザクションアクセス可能な共通資源を有効利用することができる。
以上の<パターン1−1>では、後続トランザクションが先行トランザクションよりも先にコミットする場合についてのデータベース27に記憶されるレコードについて説明した。次に、先行トランザクションが後続トランザクションよりも先にコミットする場合の<パターン1−2>について、図7を参照して説明する
<パターン1−2>
<パターン1−2>では以下の手順でトランザクションが処理される。
(1)先行トランザクションを実行し、50個を入荷
(2)後続トランザクションを実行し、30個を出荷
(3)先行トランザクションの入荷処理がコミット
(4)後続トランザクションの出荷処理がコミット
この場合、図4の本実施形態にかかる更新処理を実行すると、(3)の先行トランザクションの処理がコミットされた場合、図7の(3−2)に示す入荷されていない場合の「70」のレコードは、取り得る可能性がない更新後レコードであるため、削除される。
(4)の後続トランザクションの処理がコミットされた場合、図7の(4―1)に示す「120」のレコードが、コミット済の最新値「120」を有する最新レコードと判定される。これにより、「120」を有する最新レコードは、他のトランザクションから参照可能になる。そして、図7の(4―2)に示す「150」のレコードが、「コミット済古い」となる。この結果、(4)の後続トランザクションTx12のコミット後、「100」、「150」の2つのレコードの状態275が「コミット済古い」、「120」のレコードの状態275が「コミット済最新」となる3つのレコードが記憶される。
以上では、更新処理部22は、各トランザクションがコミットした時点で取り得る可能性がなくなったレコードを削除した。次に、更新処理部22は、各トランザクションがロールバック(失敗)した時点においても取り得る可能性がなくなったレコードを削除する場合のデータベース制御方法について説明する。
<パターン2−1>
以下では、<パターン2−1>の後続トランザクションがコミット後に先行トランザクションがロールバック(取消)される場合について、図8を参照して説明する。<パターン2−1>では以下の手順でトランザクションが処理される。
(1)先行トランザクションを実行し、50個を入荷
(2)後続トランザクションを実行し、30個を出荷
(3)後続トランザクションの出荷処理がコミット
(4)先行トランザクションの入荷処理がロールバック(取消)
<パターン2−1>の(1)〜(3)の手順は、<パターン1−1>の(1)〜(3)の手順と同じである。よって、図8の(3)後続トランザクションの出荷処理がコミットしたときにデータベース27に記憶されたレコードは、<パターン1−1>の場合と同じである。
<パターン2−1>の(4)の手順は、図5に示す<パターン1−1>の入荷処理のコミットと異なり、入荷処理のロールバックである。このとき、図8の(4―1)に示す「70」のレコードが、最新レコードと判定される。これにより、「70」を有する最新レコードは、他のトランザクションから参照可能になる。そして、図8の(4―2)に示す「120」のレコードは、取り得る可能性がなくなったレコードであり、削除される。この時点では、(4)の先行トランザクションのロールバック後、図8の(4)に示す「100」のレコードの状態275が「コミット済古い」、「70」のレコードの状態275が「コミット済最新」となる2つのレコードが記憶される。
<パターン2−2>
次に、<パターン2−2>の先行トランザクションがロールバック後に後続トランザクションがコミットされる場合について、図9を参照して説明する。<パターン2−2>では以下の手順でトランザクションが処理される。
(1)先行トランザクションを実行し、50個を入荷
(2)後続トランザクションを実行し、30個を出荷
(3)先行トランザクションの入荷処理がロールバック
(4)後続トランザクションの出荷処理がコミット
<パターン2−2>の(1)(2)(4)の手順は、図7に示す<パターン1−2>の(1)(2)(4)の手順と同じである。<パターン2−2>の(3)の手順は、<パターン1−2>の入荷処理のコミットと異なり、入荷処理のロールバックである。このとき、図9の(3)に示す「120」、「150」のレコードは、取り得る可能性がなくなったレコードであり、削除される。そして、<パターン2−2>の(4)にて後続トランザクションの出荷処理がコミットすると、図9の(4)に示す「70」が「コミット済み最新」レコードになり、「100」が「コミット済古い」となる2つのレコードがデータベース27上に記憶される。
<パターン3−1>
以下では、<パターン3−1>の後続トランザクションがロールバック後に先行トランザクションがコミットする場合について、図10を参照して説明する。<パターン3−1>では以下の手順でトランザクションが処理される。
(1)先行トランザクションを実行し、50個を入荷
(2)後続トランザクションを実行し、30個を出荷
(3)後続トランザクションの出荷処理がロールバック
(4)先行トランザクションの入荷処理がコミット
<パターン3−1>の(1)(2)(4)の手順は、図5に示す<パターン1−1>の(1)(2)(4)の手順と同じである。<パターン3−1>の(3)の手順は、<パターン1−1>の出荷処理のコミットと異なり、出荷処理のロールバックである。このとき、図10の(3−1)及び(3−2)に示す「70」、「120」のレコードは、取り得る可能性がなくなったレコードであり、削除される。そして、<パターン3−1>の(4)にて先行トランザクションの入荷処理がコミットすると、図10の(4)に示す「150」が「コミット済み最新」、「100」のレコードの状態275が「コミット済古い」となる2つのレコードがデータベース27上に記憶される。
<パターン3−2>
次に、<パターン3−2>の先行トランザクションがコミット後に後続トランザクションがロールバックする場合について、図11を参照して説明する。<パターン3−2>では以下の手順でトランザクションが処理される。
(1)先行トランザクションを実行し、50個を入荷
(2)後続トランザクションを実行し、30個を出荷
(3)先行トランザクションの入荷処理がコミット
(4)後続トランザクションの出荷処理がロールバック
<パターン3−2>の(1)〜(3)の手順は、図7に示す<パターン1−2>の(1)〜(3)の手順と同じである。<パターン3−2>の(4)の手順は、<パターン1−2>の出荷処理のコミットと異なり、出荷処理のロールバックである。このとき、図11の(4)に示す「120」のレコードは、取り得る可能性がなくなったレコードであり、削除される。よって、「100」のレコードの状態275が「コミット済古い」、「150」のレコードの状態275が「コミット済最新」となる2つのレコードがデータベース27上に記憶される。
以上に説明したように、本実施形態にかかるデータベース制御方法及び更新方法によれば、先行の更新処理が発生したレコードに対してその更新処理がコミットされる前に、後続の新たな更新処理が発生する度に、新たな更新処理を行う。新たな更新処理は、更新された場合の数値を項目値とするレコードと更新されない場合の数値を項目値とするレコードとのそれぞれに対して行われる。これにより、先行トランザクションがコミットされる前に後続トランザクションの更新処理を実行できる。つまり、データベース27に記憶したデータの整合性を担保しながら、先行トランザクションと後続トランザクションとの更新処理を同時に実行することができる。
なお、以上の各パターンの説明では、先行と後続の関係にある2つのトランザクションの更新処理を例に挙げて説明した。しかしながら、本実施形態にかかる更新処理は、先行と後続の関係にある2つのトランザクションの更新処理に限らず、他のトランザクションについても適用可能である。
例えば、先行の更新処理が発生したレコードに対して該更新処理がコミットされる前に、後続の新たな更新処理が発生する度に、更新された場合の数値をもつレコードと更新されなかった場合の数値を持つレコードとのそれぞれに対して、前記新たな更新処理を行う。これにより、先行と後続の関係にある3つ以上のトランザクションの更新処理を同時に実行することができる。
(ハードウェア構成例)
最後に、本実施形態に係るデータベースサーバ20のハードウェア構成について、図12を参照して説明する。は、入力装置101、表示装置102、外部I/F103、RAM(Random Access Memory)104、ROM(Read Only Memory)105、CPU(Central Processing Unit)106、通信I/F107、及びHDD(Hard Disk Drive)108などを備え、それぞれがバスBで相互に接続されている。
入力装置101は、キーボードやマウスなどを含み、データベースサーバ20に各操作信号を入力するために用いられる。表示装置102は、ディスプレイなどを含み、各種の処理結果を表示する。通信I/F107は、データベースサーバ20をネットワークに接続するインタフェースである。これにより、データベースサーバ20は、通信I/F107を介して、利用者端末10とデータ通信を行うことができる。
HDD108は、プログラムやデータを格納している不揮発性の記憶装置である。格納されるプログラムやデータには、データベースサーバ20の全体を制御する基本ソフトウェア及びアプリケーションソフトウェアがある。例えば、HDD108には、各種のデータベースやプログラム等が格納されてもよい。
外部I/F103は、外部装置とのインタフェースである。外部装置には、記録媒体103aなどがある。これにより、データベースサーバ20は、外部I/F103を介して記録媒体103aの読み取り及び/又は書き込みを行うことができる。記録媒体103aには、CD(Compact Disk)、及びDVD(Digital Versatile Disk)、ならびに、SDメモリカード(SD Memory card)やUSBメモリ(Universal Serial Bus memory)等がある。
ROM105は、電源を切っても内部データを保持することができる不揮発性の半導体メモリ(記憶装置)である。ROM105には、ネットワーク設定等のプログラム及びデータが格納されている。RAM104は、プログラムやデータを一時保持する揮発性の半導体メモリ(記憶装置)である。CPU106は、上記記憶装置(例えば「HDD108」や「ROM105」など)から、プログラムやデータをRAM104上に読み出し、処理を実行することで、装置全体の制御や搭載機能を実現する演算装置である。
かかる構成により、本実施形態に係るデータベースサーバ20では、CPU106が、ROM105やHDD108内に格納されたデータベース27内のデータ及び更新処理プログラム28を用いて更新処理を実行する。更新処理プログラム28は、データベース制御プログラムの一例である。なお、データベース27に記憶された情報は、RAM104、HDD108、又はネットワークを介してデータベースサーバ20に接続されるクラウド上のサーバ等に格納され得る。
以上、データベース制御プログラム、データベース制御方法及びデータベース制御装置を上記実施形態により説明したが、本発明にかかるデータベース制御プログラム、データベース制御方法及びデータベース制御装置は上記実施形態に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能である。また、上記実施形態及び変形例が複数存在する場合、矛盾しない範囲で組み合わせることができる。
なお、データベース27に記憶し、本発明の更新対象となるデータは、数値のみなず、文字データ、所定のステータスを示すフラグ、バイナリデータ等であってもよい。また、トランザクションのコミットにより不要となったレコードは、定期的に削除されるようになっている。
また、本発明は、入荷処理のトランザクションの実行後に入荷処理後の値を参照するトランザクションを実行する場合前後のトランザクションを並行して処理することは困難である。また、出荷処理のトランザクションの実行後に出荷処理後の値を参照するトランザクションを実行する場合、前後のトランザクションを並行して処理することは困難である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
コンピュータに、
データベースに記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合に、前記項目値が前記更新処理により更新された場合の数値を項目値とするレコードと、前記項目値が前記更新処理により更新されない場合の数値を項目値とするレコードと、を生成し、
前記更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、
ことを実行させるデータベース制御プログラム。
(付記2)
前記更新処理及び新たな更新処理の少なくともいずれかがコミット又はロールバックした時点で、取り得る可能性がなくなったデータ項目の項目値を含むレコードを削除する、
付記1に記載のデータベース制御プログラム。
(付記3)
先行の前記更新処理が発生したレコードに対して該更新処理がコミットされる前に、後続の前記新たな更新処理が発生する度に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、
付記1又は2に記載のデータベース制御プログラム。
(付記4)
コンピュータが、
データベースに記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合に、前記項目値が前記更新処理により更新された場合の数値を項目値とするレコードと、前記項目値が前記更新処理により更新されない場合の数値を項目値とするレコードと、を生成し、
前記更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、
ことを実行するデータベース制御方法。
(付記5)
前記更新処理及び新たな更新処理の少なくともいずれかがコミット又はロールバックした時点で、取り得る可能性がなくなったデータ項目の項目値を含むレコードを削除する、
付記4に記載のデータベース制御方法。
(付記6)
先行の前記更新処理が発生したレコードに対して該更新処理がコミットされる前に、後続の前記新たな更新処理が発生する度に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、
付記4又は5に記載のデータベース制御方法。
(付記7)
データベースに記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合に、前記項目値が前記更新処理により更新された場合の数値を項目値とするレコードと、前記項目値が前記更新処理により更新されない場合の数値を項目値とするレコードと、を生成するレコード生成部と、
前記更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う更新処理部と、
を有するデータベース制御装置。
(付記8)
前記更新処理及び新たな更新処理の少なくともいずれかがコミット又はロールバックした時点で、取り得る可能性がなくなったデータ項目の項目値を含むレコードを削除するレコード削除部を有する、
付記7に記載のデータベース制御装置。
(付記9)
前記更新処理部は、先行の前記更新処理が発生したレコードに対して該更新処理がコミットされる前に、後続の前記新たな更新処理が発生する度に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、
付記7又は8に記載のデータベース制御装置。
10:利用者端末
20:データベースサーバ
21:トランザクション実行部
22:更新処理部
23:レコード生成部
24:レコード削除部
25:記憶部
27:データベース

Claims (5)

  1. コンピュータに、
    データベースに記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合に、前記項目値が前記更新処理により更新された場合の数値を項目値とするレコードと、前記項目値が前記更新処理により更新されない場合の数値を項目値とするレコードと、を生成し、
    前記更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、
    ことを実行させるデータベース制御プログラム。
  2. 前記更新処理及び新たな更新処理の少なくともいずれかがコミット又はロールバックした時点で、取り得る可能性がなくなったデータ項目の項目値を含むレコードを削除する、
    請求項1に記載のデータベース制御プログラム。
  3. 先行の前記更新処理が発生したレコードに対して該更新処理がコミットされる前に、後続の前記新たな更新処理が発生する度に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、
    請求項1又は2に記載のデータベース制御プログラム。
  4. コンピュータが、
    データベースに記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合に、前記項目値が前記更新処理により更新された場合の数値を項目値とするレコードと、前記項目値が前記更新処理により更新されない場合の数値を項目値とするレコードと、を生成し、
    前記更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う、
    ことを実行するデータベース制御方法。
  5. データベースに記憶されたレコードに含まれる、データ項目の項目値に対する更新処理が発生した場合に、前記項目値が前記更新処理により更新された場合の数値を項目値とするレコードと、前記項目値が前記更新処理により更新されない場合の数値を項目値とするレコードと、を生成するレコード生成部と、
    前記更新処理が発生したレコードに対して新たな更新処理が発生した場合に、前記更新された場合の数値を項目値とするレコードと前記更新されない場合の数値を項目値とするレコードとのそれぞれに対して、前記新たな更新処理を行う更新処理部と、
    を有するデータベース制御装置。
JP2015176111A 2015-09-07 2015-09-07 データベース制御プログラム、データベース制御方法及びデータベース制御装置 Active JP6515753B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015176111A JP6515753B2 (ja) 2015-09-07 2015-09-07 データベース制御プログラム、データベース制御方法及びデータベース制御装置
US15/246,886 US10417214B2 (en) 2015-09-07 2016-08-25 Non-transitory computer-readable storage medium, database control method and database control device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015176111A JP6515753B2 (ja) 2015-09-07 2015-09-07 データベース制御プログラム、データベース制御方法及びデータベース制御装置

Publications (2)

Publication Number Publication Date
JP2017054207A true JP2017054207A (ja) 2017-03-16
JP6515753B2 JP6515753B2 (ja) 2019-05-22

Family

ID=58191003

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015176111A Active JP6515753B2 (ja) 2015-09-07 2015-09-07 データベース制御プログラム、データベース制御方法及びデータベース制御装置

Country Status (2)

Country Link
US (1) US10417214B2 (ja)
JP (1) JP6515753B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019102059A (ja) * 2017-12-04 2019-06-24 エスアーペー エスエー 不揮発性メモリにおけるマルチバージョン同時実行制御(mvcc)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1185544A (ja) * 1997-09-04 1999-03-30 Nec Corp トランザクションプログラム並列実行方法およびトラン ザクションプログラム並列実行方式
US20090292706A1 (en) * 2008-05-22 2009-11-26 Fujitsu Limited Apparatus and method for data management

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2837288B2 (ja) 1990-09-17 1998-12-14 インターナショナル・ビジネス・マシーンズ・コーポレイション 連鎖分散データトランザクションシステムにおけるワーク単位識別子の管理方法
US5950212A (en) * 1997-04-11 1999-09-07 Oracle Corporation Method and system for workload based group committing for improved performance
GB2397401A (en) * 2003-01-15 2004-07-21 Luke Leonard Martin Porter Time in databases and applications of databases
JP4261609B1 (ja) 2008-05-02 2009-04-30 透 降矢 トランザクションの同時実行制御を備えたマルチオペレーション・プロセッシングを用いたデータベースのトランザクション処理システム
JP5652228B2 (ja) 2011-01-25 2015-01-14 富士通株式会社 データベースサーバ装置、データベース更新方法及びデータベース更新プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1185544A (ja) * 1997-09-04 1999-03-30 Nec Corp トランザクションプログラム並列実行方法およびトラン ザクションプログラム並列実行方式
US20090292706A1 (en) * 2008-05-22 2009-11-26 Fujitsu Limited Apparatus and method for data management
JP2009282746A (ja) * 2008-05-22 2009-12-03 Fujitsu Ltd データ管理プログラム、データ管理方法、及びデータ管理装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019102059A (ja) * 2017-12-04 2019-06-24 エスアーペー エスエー 不揮発性メモリにおけるマルチバージョン同時実行制御(mvcc)
JP7101566B2 (ja) 2017-12-04 2022-07-15 エスアーペー エスエー 不揮発性メモリにおけるマルチバージョン同時実行制御(mvcc)

Also Published As

Publication number Publication date
US10417214B2 (en) 2019-09-17
US20170068701A1 (en) 2017-03-09
JP6515753B2 (ja) 2019-05-22

Similar Documents

Publication Publication Date Title
US8868514B2 (en) Transaction support for distributed data
EP3117348B1 (en) Systems and methods to optimize multi-version support in indexes
EP3079078B1 (en) Multi-version concurrency control method in database, and database system
US8832159B2 (en) Systems and methods for asynchronous schema changes
US9020916B2 (en) Database server apparatus, method for updating database, and recording medium for database update program
US9652492B2 (en) Out-of-order execution of strictly-ordered transactional workloads
US11914569B2 (en) Light weight redundancy tool for performing transactions
CN107710203B (zh) 分布式键/值存储库之上的事务数据库层
US11023457B1 (en) Targeted sweep method for key-value data storage
US11099960B2 (en) Dynamically adjusting statistics collection time in a database management system
JP6079876B2 (ja) 分散処理システム
US10127270B1 (en) Transaction processing using a key-value store
EP3377970B1 (en) Multi-version removal manager
JP6515753B2 (ja) データベース制御プログラム、データベース制御方法及びデータベース制御装置
US9009718B2 (en) Processing singleton task(s) across arbitrary autonomous server instances
CN108475211B (zh) 无状态系统和用于获得资源的系统
CN110377614B (zh) 一种分布式环境下的订单处理锁系统
US20180150498A1 (en) Database management device, information processing system, and database management method
JP5967628B2 (ja) クエリを処理する装置及び方法
JP6402537B2 (ja) 更新処理プログラム、装置、及び方法
US10452424B2 (en) Unique transaction identifier based transaction processing
JP6398786B2 (ja) データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム
EP2875451A1 (en) Method and system for replicating data in a cloud storage system
US11157307B2 (en) Count and transaction identifier based transaction processing
CN114722125A (zh) 数据库事务处理的方法、装置、设备和计算机可读介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180514

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190116

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190219

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190313

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: 20190319

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190401

R150 Certificate of patent or registration of utility model

Ref document number: 6515753

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150