JP5652228B2 - データベースサーバ装置、データベース更新方法及びデータベース更新プログラム - Google Patents

データベースサーバ装置、データベース更新方法及びデータベース更新プログラム Download PDF

Info

Publication number
JP5652228B2
JP5652228B2 JP2011013476A JP2011013476A JP5652228B2 JP 5652228 B2 JP5652228 B2 JP 5652228B2 JP 2011013476 A JP2011013476 A JP 2011013476A JP 2011013476 A JP2011013476 A JP 2011013476A JP 5652228 B2 JP5652228 B2 JP 5652228B2
Authority
JP
Japan
Prior art keywords
data
transaction
record
update
confirmed
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
JP2011013476A
Other languages
English (en)
Other versions
JP2012155498A (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.)
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 JP2011013476A priority Critical patent/JP5652228B2/ja
Priority to US13/298,859 priority patent/US9020916B2/en
Publication of JP2012155498A publication Critical patent/JP2012155498A/ja
Application granted granted Critical
Publication of JP5652228B2 publication Critical patent/JP5652228B2/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/2379Updates performed during online database operations; commit processing

Description

本発明は、データベースサーバ装置、データベース更新方法及びデータベース更新プログラムに関する。
従来、データベースサーバは、トランザクションを利用者端末から受付ける。データベースサーバは、トランザクションを受付けると、データの格納、データの読み出し、データの更新及び削除などの各種処理を実行する。このようなデータベースサーバは、同一のデータを更新するトランザクションを複数の利用者から同時に受付けた場合には、データの整合性を保証するためにロック等の手法で各種処理を排他する。
すなわち、データベースサーバは、同一のデータを更新するトランザクション、言い換えると、競合するトランザクションを排他的に制御することでデータの整合性を保証する。例えば、データベースサーバは、悲観的ロックや楽観的ロックなどの排他制御を用いてトランザクションを制御する。
悲観的ロックは、「データベース内のあるデータを更新するトランザクションを同時に複数の利用者から受付ける可能性が高い」ことを前提にした方法であり、トランザクションが更新対象のデータを読み出した時点で他の更新トランザクションを排他する。
また、楽観的ロックは、「データベース内のあるデータを更新するトランザクションを同時に複数の利用者から受付ける可能性が少ない」ことを前提にした方法であり、トランザクションが更新対象のデータを読み出してから更新するまでの間に、他のトランザクションがそのデータを更新してコミットしていた場合に、当該トランザクションをエラーにする。
このように、悲観的ロックや楽観的ロックなどの排他制御を利用したデータベースサーバは、他のトランザクションを排他することで、競合するトランザクションを逐次化してデータの整合性を保証している。
また、データベースサーバが複数のトランザクションをまとめて処理する技術も開示されている。例えば、データベースサーバは、ある一定期間に入力されたトランザクションをまとめて、それぞれのトランザクションで読み出し及び更新するデータ毎に再合成することで実行順序を決定し、トランザクションを実行する。
特開2009−271665号公報
しかしながら、上述した従来の技術では、競合するトランザクションを同時に実行することができないという課題があった。例えば、排他制御を用いたデータベースサーバでは、競合するトランザクションを逐次化することでデータの整合性を保証するので、競合するトランザクションを同時に実行することができない。
また、複数のトランザクションをまとめて処理する方法では、データベースサーバは、例えば、分岐する命令を判定するトランザクションを実行する場合、トランザクション内でデータを検索した結果によって条件を判定して次の処理を実行するので、トランザクション内で実行する処理の全てをデータベースに事前に送付することができない。アプリケーションの設計段階で、同時に実行中の他のトランザクションからの更新を考慮して、各トランザクションを実行するように設計することは困難であり、現実的ではない。
本発明は、競合するトランザクションを同時に実行することができるデータベースサーバ装置、データベース更新方法及びデータベース更新プログラムを提供することを目的とする。
データを更新する複数のトランザクションの間で、更新が競合した場合に、各トランザクションを確定させる確定手順情報を記憶する手段を設ける。データベースサーバは、データを更新するトランザクションを受付けた場合に、トランザクションを実行して、更新元データから確定前の更新データを生成する。そして、データベースサーバは、トランザクションを確定させる場合に、更新元データから確定済みデータを生成した他の確定済みトランザクションが存在するか否かを判定する。そして、データベースサーバは、他の確定済みトランザクションが存在する場合に、更新元データと確定済みデータと確定手順情報とに従って確定前の更新データを再び更新して、トランザクションを確定させる。
競合するトランザクションを同時に実行することができる。
図1は、実施例1にかかるデータベースサーバの構成を示すブロック図である。 図2は、実施例2にかかるデータベースサーバの構成を示すブロック図である。 図3は、確定手順情報DBが記憶する情報の一例を示す図である。 図4は、確定手順情報DBバッファが記憶する情報の一例を示す図である。 図5は、データベースがテーブル「TBL1」として記憶する情報の一例を示す図である。 図6は、データベースバッファが記憶するトランザクションのレコードセットの一例を示す図である。 図7Aは、データ操作部がアクセス手順として生成したSQL文の一例を示す図である。 図7Bは、データ操作部がアクセス手順として生成したSQL文の別例を示す図である。 図7Cは、データ操作部がアクセス手順として生成したSQL文の別例を示す図である。 図8は、更新確定部によるデータの確定を示す図である。 図9は、更新確定部がトランザクションをコミットした後のデータベースの状態の一例を示す図である。 図10は、更新確定部による処理の処理手順を示すフローチャートである。 図11は、マージ処理の処理手順を示すフローチャートである。 図12は、レコード操作部によって読み取り可能と判定されたレコードIDをトランザクション毎に示す図である。 図13は、データベース更新プログラムを実行するコンピュータシステムを示す図である。
以下に、本願の開示するデータベースサーバ装置、データベース更新方法及びデータベース更新プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1は、実施例1にかかるデータベースサーバ10の構成を示すブロック図である。図1に示すように、データベースサーバ10は、データ記憶部11と確定手順情報記憶部12とデータ生成部13と判定部14と確定部15とを有する。このデータベースサーバ10は、利用者端末200とネットワークを介して接続されており、データの検索、更新、削除などの各種処理を実行するトランザクションを受付ける。
データ記憶部11は、データを記憶する。確定手順情報記憶部12は、データ記憶部11に記憶されるデータを更新する複数のトランザクションの間で各トランザクションを確定させる確定手順情報を記憶する。
データ生成部13は、データを更新するトランザクションを受付けた場合に、当該トランザクションを実行して、データから確定前の更新データを生成する。判定部14は、データ生成部13によって実行されたトランザクションを確定させる場合に、データを更新元データとする確定済みデータを生成した確定済みトランザクションが存在するか否かを判定する。確定部15は、判定部14によって確定済みトランザクションが存在すると判定された場合に、確定済みデータと確定手順情報とに従って確定前の更新データを再び更新して、トランザクションを確定させる。
データ生成部13は、トランザクション毎に新たなデータを更新し、同一のデータから別の新たなデータを生成したトランザクションが存在する場合に、確定部15は、確定手順情報に従って、トランザクションと他トランザクションを確定させる。したがって、実施例1にかかるデータベースサーバ10は、競合するトランザクションを同時に実行し、データの整合性を高めることができる。
[実施例2にかかるデータベースサーバの構成]
次に、実施例2にかかるデータベースサーバの構成を説明する。図2は、実施例2にかかるデータベースサーバ100の構成を示すブロック図である。図2に示すように、実施例2にかかるデータベースサーバ100は、通信制御I/F部110と確定手順情報DB121と確定手順情報DBバッファ122とデータベース123とデータベースバッファ124とログDB125と制御部130とを有する。このデータベースサーバ100は、利用者端末200とネットワークを介して接続されており、データの検索、更新、削除などのトランザクションを受付ける。なお、確定手順情報DB121と確定手順情報DBバッファ122とデータベース123とデータベースバッファ124とログDB125とは、例えば、半導体メモリ素子、又はハードディスクなどの記憶装置である。
通信制御I/F部110は、少なくとも1つの通信ポートを有するインターフェースであり、他の装置と間でやり取りされる情報を制御する。例えば、通信制御I/F部110は、データベース123に記憶されるデータを参照するトランザクションを利用者端末200から受付け、データベース123の情報を出力する。また、通信制御I/F部110は、図示しない管理装置からの要求に応じて、確定手順情報DB121やログDB125等に記憶される各種情報を管理装置に出力する。
確定手順情報DB121は、データベースのデータを更新する複数のトランザクションの間で各トランザクションを確定させる確定手順情報をデータベースのテーブルのデータ項目ごとに記憶する。図3は、確定手順情報DB121が記憶する情報の一例を示す図である。例えば、図3に示すように、確定手順情報DB121は、「列名、列のデータ型、デフォルト値、列の制約情報、更新競合時の属性」として「カラム1、Integer、0、NOT NULL、Conflicting Operation Max」を記憶する。同様に、確定手順情報DB121は、「カラム2、Char(1)、-、-、Conflicting Operation OverWrite」、「カラム3、Char(5)、-、-、Conflicting Operation OverWrite」、「カラム4、Integer、-、-、Conflicting Operation Merge」を記憶する。
ここで、「列名」は、データ項目の列名を示し、例えば、「カラム1」、「カラム2」、「カラム3」、「カラム4」などが格納される。「列のデータ型」は、格納される値の形式を指定する情報を示す。例えば、「列のデータ型」には、整数を定義する「Integer」や指定した文字数以下の文字列を定義する「Char」などが格納される。
「デフォルト値」は、後述する列の制約情報として「NOT NULL」が定義されている場合に、列のデータ型に対応して設定される初期値の値を示す。例えば、列のデータ型が「Integer」の場合には、「デフォルト値」は、「0」が格納される。「列の制約情報」は、データベースに無効なデータが入力されないように定義された制約についての情報を示す。例えば、「列の制約情報」には、NULL値の入力を禁止する「NOT NULL」が格納される。
「更新競合時の属性」は、トランザクションが競合した場合に、各トランザクションを確定させる確定手順情報を示す。例えば、「更新競合時の属性」には、更新結果の差分を計算する「Merge」、コミット時刻が後の結果で上書きする「OverWrite」、より大きい値を設定する「Max」、より小さい値を設定する「Min」などが格納される。また、「更新競合時の属性」には、他トランザクションによって更新されていれば、トランザクションをエラーに設定する「Error」、利用者が定義した関数を呼び出して利用者論理でマージする「Function」などが格納される。なお、更新競合時の属性についての詳細は後述する。
図3の例では、確定手順情報DB121は、「カラム1」には、小数点を持たない精度の整数値が格納され、「Not NULL」制約によって初期値は「0」に設定されることを示す。また、「カラム1」のデータ更新が競合した場合には、より大きい値が設定されることを示す。同様に、「カラム2」には、1文字以下の文字列が格納され、データ更新が競合した場合には、コミット時刻が後の結果で上書きされることを示す。「カラム3」には、5文字以下の文字列が格納され、データ更新が競合した場合には、コミット時刻が後の結果で上書きされることを示す。「カラム4」には、小数点を持たない精度の整数値が格納され、データ更新が競合した場合には、差分を計算した値が設定されることを示す。
確定手順情報DBバッファ122は、確定手順情報DB121が記憶する情報の一部もしくは全てを一時的に記憶する。図4は、確定手順情報DBバッファ122が記憶する情報の一例を示す図である。例えば、図4に示すように、確定手順情報DBバッファ122は、「列数」と列数毎に「列名」と「列のデータ型」と「デフォルト値」と「列の制約情報」と「更新競合時の属性」とを記憶する。ここで、「列数」は、カラムの数を示す。なお、「列名」と「列のデータ型」と「デフォルト値」と「列の制約情報」と「更新競合時の属性」とは、確定手順情報DB121が記憶する情報と同様であるので詳細な説明を省略する。
データベース123は、各種情報を複数のデータ項目を有するレコードとして記憶する。図5は、データベース123がテーブル「TBL1」として記憶する情報の一例を示す図である。例えば、図5に示すように、データベース123は、「レコードID、生成者ID、更新者ID、コミット時刻、世代ポインタ、更新フラグ1、カラム1、更新フラグ2、カラム2、更新フラグ3、カラム3、更新フラグ4、カラム4」を対応付けて記憶する。
ここで、「レコードID」は、レコードを一意に識別する識別子であり、例えば「R2」が格納される。「生成者ID」は、レコードを生成した生成者やトランザクションを一意に識別する識別子であり、例えば、「10」が格納される。「更新者ID」には、レコードを追加、レコードを更新、レコードを削除するトランザクションのいずれかが実行された場合、レコードを追加、レコードを更新、レコードを削除するトランザクションを識別する識別子が格納される。したがって、「更新者ID」が入っているレコードは、そのIDが示すトランザクションで更新後のレコードに置き換えられたり、削除されたりして無効になったことを意味する。なお、レコードを削除するトランザクションが実行された場合、「更新者ID」には、「生成者ID」と同じトランザクションを識別する識別子の値が格納される。「コミット時刻」は、トランザクション終了時刻を示す時刻情報であり、例えば、「10:00」が格納される。「世代ポインタ」には、レコードを更新して新たなレコードを生成したレコードを識別するレコードIDが格納される。
「カラム1、カラム2、カラム3、カラム4」は、確定手順情報DB121に記憶される確定手順情報の列のデータ型に従って設定されたデータ値を示し、例えば、「100、A、Init、5000」が格納される。
「更新フラグ1」は、カラム1に格納される情報が更新されて生成されたものであることを示す。例えば、「更新フラグ1」には、カラム1に格納される値が更新された場合に「y」が格納される。また、「更新フラグ1」には、カラム1に格納される値が更新されていない場合に「n」が格納される。「n」が格納されていると言うことは、そのレコードが更新された時に当該のカラムは更新されず更新元の値を引き継いだことを意味する。なお、「更新フラグ2」、「更新フラグ3」及び「更新フラグ4」については「更新フラグ1」と同様であるので、詳細な説明は省略する。
図5の例では、データベース123は、「レコードID=R2」で識別されるレコードは、生成者ID「10」で識別されるトランザクションによって「10:00」に作成されたデータ値が「100、A、Init、5000」であり、データ値の全てが新たに作成されてコミットされたことを示す。同様に、データベース123は、「レコードID=R4」で識別されるレコードは、生成者ID「10」で識別されるトランザクションによって「10:00」に作成されたデータ値が「30、F、Init、3200」であり、データ値の全てが新たに作成されてコミットされたことを示す。
また、データベース123は、「レコードID=R6」で識別されるレコードは、生成者ID「40」で識別されるトランザクションによってカラム2とカラム4の値が更新されたデータ値が「100、B、Init、4000」であることを示す。また、データベース123は、「レコードID=R7」で識別されるレコードは、生成者ID「50」で識別されるトランザクションによってカラム1〜カラム4の値が更新されたデータ値が「20、C、Init、450」であることを示す。
また、データベース123は、「レコードID=R8」で識別されるレコードは、生成者ID「50」で識別されるトランザクションによってカラム3とカラム4の値が更新されたデータ値が「100、A、Upd、4000」であることを示す。また、データベース123は、「レコードID=R9」で識別されるレコードは、生成者IDと更新者IDとがともに「50」であるので、「50」で識別されるトランザクションによって作成され、何れかのレコードが削除されたことを示す。
データベースバッファ124は、データベース123に記憶される情報の更新対象であるレコードのコピーやレコードのコピーから生成した更新レコードを一時的に記憶する。なお、データベースバッファ124が記憶する情報は、図5に一例を示した、データベース123が記憶する情報と同じであるので、説明を省略する。
また、データベースバッファ124は、更新や削除する元になったレコードと、更新や削除追加により生成したレコードとのアドレスをレコードセットとして記憶する。図6は、データベースバッファが記憶するトランザクションのレコードセットの一例を示す図である。例えば、図6に示すように、データベースバッファ124は、「トランザクションID、更新元レコードID、生成レコードID、処理」を対応付けて記憶する。
ここで、「トランザクションID」は、トランザクションを識別する識別子であり、例えば「40」が格納される。「更新元レコードID」は、更新する元や削除する元になったレコードを一意に識別する識別子であり、例えば「R2」が格納される。「生成レコードID」は、更新、削除及び追加によって生成したレコードを一意に識別する識別子であり、例えば「R6」が格納される。「処理」は、トランザクションの種類がレコードを追加するトランザクションであるか、レコードを更新するトランザクションであるか、レコードを削除するトランザクションであるかを示し、例えば「更新」が格納される。
図6に示す例では、データベースバッファ124は、「トランザクションID=40」で識別されるトランザクションは、更新元レコードID「R2」で識別される更新元レコードを更新して、生成レコードID「R6」で識別される生成レコードが作成されたことを示す。また、「トランザクションID=50」で識別されるトランザクションは、生成レコードID「R7」で識別される生成レコードを追加したことを示す。「トランザクションID=50」で識別されるトランザクションは、更新元レコードID「R2」で識別される更新元レコードを更新して、生成レコードID「R8」で識別される生成レコードが作成されたことを示す。同様に、「トランザクションID=50」で識別されるトランザクションは、更新元レコードID「R4」で識別される更新元レコードを削除して、生成レコードID「R9」で識別される生成レコードが作成されたことを示す。
ログDB125は、トランザクションの更新履歴情報を記憶する。この情報は、トランザクションのロールバック時に更新データを無効化する場合や、システムがダウンした場合にデータベースを最新状態にリカバリするために使用される。
制御部130は、制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有する。制御部130は、定義受付け部131と定義情報管理部132と受付け部133とデータ操作部134とレコード操作部135とバッファ管理部136とトランザクション管理部137と更新確定部138とログ管理部139とを有する。例えば、制御部130は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、又は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
定義受付け部131は、データベース資源の定義を利用者から受付ける。また、定義受付け部131は、データベース資源の定義として、データ毎の更新競合時の属性をカラムごとに指定した確定手順情報を受付ける。例えば、定義受付け部131は、更新競合時の属性として、「Merge」、「OverWrite」、「Max」、「Min」、「Error」、「Function」を利用者から受付ける。
定義情報管理部132は、定義受付け部131によって利用者から受付けたデータベースの定義情報を確定手順情報DB121に格納させる。また、定義情報管理部132は、確定手順情報DB121から確定手順情報を読み出し、読み出した確定手順情報を確定手順情報DBバッファ122へ展開する。例えば、定義情報管理部132は、確定手順情報DB121が記憶する図3に示した情報を読み出し、図4に示すように確定手順情報DBバッファ122へ展開する。
受付け部133は、利用者端末200からデータベース操作を受付ける。例えば、受付け部133は、データベースの参照、更新、トランザクションの開始及び終了を受付け、受付けた内容をデータ操作部134へ転送する。また、受付け部133は、利用者端末200からトランザクションのコミット処理を受付けた場合、データ操作部134へ通知する。
データ操作部134は、受付け部133を介して利用者端末200から受付けたデータベース操作をデータ操作命令として解釈する。例えば、データ操作部134は、受付け部133からトランザクションの開始及び終了を受付けた場合、受付けた開始及び終了を解釈してトランザクション管理部137へ通知する。
また、データ操作部134は、利用者端末200から受付けたトランザクションのアクセス手順を生成する。例えば、データ操作部134は、受付け部133が受付けたデータ操作命令(SQL)と定義情報を参照し、データベース123へのアクセス手順を生成する。図7A〜図7Cを用いて、データ操作部134によるデータベースへのアクセス決定を説明する。
例えば、図7Aに示すSQL文は、利用者端末から入力されたもので、データ操作部134がデータベース123に記憶されるテーブル「TBL1」のレコードとして「100、A、Init、5000、・・・」を追加するようにデータベースをアクセスする手順を作成する。
また、図7Bに示すSQL文は、データ操作部134がデータベース123に記憶されるレコード「100、A、Init、5000、・・・」のカラム2の値を「B」、カラム4の値を「カラム4の値-1000」に更新するようにデータベースにアクセスする手順を作成する。
また、図7Cに示すSQL文は、データ操作部134がデータベース123に記憶されるレコード「100、A、Init、5000、・・・」のカラム3の値を「Upd」、カラム4の値を「カラム4の値-1000」に更新するようデータベースをアクセスする手順を作成する。
また、データ操作部134は、生成したアクセス手順をレコード操作部135へ転送し、データの検索や更新を実行させる。ここで、データ操作部134は、トランザクションが実行される独立性水準を記憶し、データ検索時にはトランザクションの開始時刻又はデータ操作命令の実行時刻のどちらのコミット済みデータを検索するのかをレコード操作部135へ通知する。
レコード操作部135は、データベースの検索や更新、トランザクションの終了、ログの記録を実行する。なお、レコード操作部135は、実施例1にかかるデータ生成部13の一例である。すなわち、レコード操作部135は、データを更新するトランザクションを受付けた場合に、トランザクションを実行して、データから確定前の更新データを生成する。
レコード操作部135は、データ操作部134からデータベースの検索を受付けた場合、バッファ管理部136を呼び出して、データベース123のレコードをデータベースバッファ124に展開する。また、レコード操作部135は、データ操作部134によって指示された手順に従い、データベース123を検索してレコードを返却する。
また、レコード操作部135は、データ操作部134からSQL文を受付けた場合、データの更新を実行する。ここで、レコード操作部135は、更新の度に新たなレコードを作成し、レコード参照時には資源を排他しないので、たとえ同一のレコードを更新する場合でも、参照処理を排他待ちさせずに処理する。また、レコード操作部135は、バッファ管理部136に通知し、データベースバッファ124を取得する。
例えば、レコード操作部135は、データを追加する場合、追加するレコードをデータベースバッファ124上に追加する。また、レコード操作部135は、更新フラグに「y」を格納することでレコード中のデータを更新したカラムを識別させる。上述した図5及び図7Aを例にして説明する。レコード操作部135は、データ操作部134から図7Aに示したSQL文を受付けた場合、図5の「レコードID=R2」で識別されるレコードを生成する。
また、例えば、レコード操作部135は、データを更新する場合、データベースバッファ124上に展開された更新元のレコードをコピーし、コピーしたレコードを更新する。
ここで、レコード操作部135は、レコード内の更新フラグに「y」を格納することでレコード中のデータを更新したカラムを識別させる。
上述した図5、図7B及び図7Cを例にして説明する。レコード操作部135は、データ操作部134から図7Bに示したSQL文のアクセス手順を受付けた場合、図5の「レコードID=R6」で識別されるレコードを生成する。同様に、レコード操作部135は、データ操作部134から図7Cに示したSQL文を受付けた場合、図5の「レコードID=R8」で識別されるレコードを生成する。
また、レコード操作部135は、データを削除する場合、直接データを削除せずに、データベースバッファ124上に削除用のレコードを生成する。上述した図5を例にして説明する。レコード操作部135は、「レコードID=R4」で識別されるレコードを削除する場合、削除用のレコードとして図5に示した「レコードID=R9」で識別されるレコードを生成する。
また、レコード操作部135は、トランザクションで更新したレコードセットとして、更新、削除する元になった更新元レコードと、更新や削除、追加によって生成した生成レコードとをデータベースバッファ124上に記憶させる。上述した図6を例にして説明する。レコード操作部135は、更新や削除する元になったレコードと、更新や削除追加により生成したレコードとのアドレスを図6に示したレコードセットとしてデータベースバッファ124上に記憶させる。
また、レコード操作部135は、更新前のレコードイメージと更新後のレコードイメージをログ管理部139に通知して、ログDB125にログを記録する。
図2に戻り、バッファ管理部136は、データベースバッファ124上にデータが展開されていない場合、データベース123に格納されたデータを読み出し、データベースバッファ124へ展開する。例えば、バッファ管理部136は、「レコードID=R2」で識別されるレコードを変更して「レコードID=R6」で識別されるレコードを生成する場合、データベース123から「レコードID=R2」を読み出し、読み出したレコードをデータベースバッファ124に展開する。
トランザクション管理部137は、トランザクションを統合的に管理する。例えば、トランザクション管理部137は、トランザクションをコミットする場合には、更新確定部138を呼び出し、他に同時走行していたトランザクションの最新の更新結果と、コミット対象のトランザクションの更新結果を、定義しておいた更新競合時の属性に従ってマージさせる。また、トランザクション管理部137は、トランザクションがロールバックする場合には、トランザクションで更新した結果を更新前のデータに復元する。
更新確定部138は、トランザクション管理部137から通知を受付けた場合、レコード操作部135が生成した追加レコードの確定や更新レコードの確定を実行して、トランザクションをコミットする。ここでは、更新確定部138が追加レコードの確定を実行する場合と更新レコードの確定を実行する場合についてそれぞれ詳細に説明する。
また、更新確定部138は、実施例1にかかる判定部14及び確定部15の一例である。すなわち、更新確定部138は、レコード操作部135によって実行されたトランザクションをコミットさせる場合に、データを更新元データとする確定済みデータを生成したコミット済みのトランザクションが存在するか否かを判定する。また、更新確定部138は、コミット済みのトランザクションが存在すると判定した場合に、確定済みデータと確定手順情報とに従って確定前の更新データを再び更新して、トランザクションをコミットさせる。
[追加レコードの確定を実行する場合]
更新確定部138が追加レコードの確定を実行する場合について説明する。更新確定部138は、レコード操作部135によって生成されたレコードに更新元レコードが存在しなければ、生成されたレコードを追加レコードであると判定する。続いて、更新確定部138は、生成レコードが追加レコードであると判定した場合、生成レコードにコミット時刻を格納して生成レコードを確定させる。
上述した図5及び図6を例にして説明する。更新確定部138は、図6に示すレコードセットの「トランザクションID=50」で識別されるトランザクションにおいて、「レコードID=R7」で識別されるレコードには、更新元レコードIDが格納されておらず、更新元レコードが存在しないと判定する。すなわち、更新確定部138は、「レコードID=R7」で識別されるレコードが追加レコードであると判定する。続いて、更新確定部138は、図5に示した「レコードID=R7」で識別されるレコードのコミット時刻に「13:02」を格納する。この結果、更新確定部138は、「レコードID=R7」で識別される追加レコードを確定させる。
[更新レコードの確定を実行する場合]
また、更新確定部138は、生成されたレコードに更新元レコードが存在すれば、生成されたレコードを更新レコードであると判定し、更新レコードの確定を実行する。更新確定部138は、更新レコードの確定を実行する場合、同一の更新元レコードを更新するトランザクションが存在するか否かを判定する。
(同一の更新元レコードを更新するトランザクションが存在しない場合)
更新確定部138が同一の更新元レコードを更新するトランザクションが存在しないと判定した場合について説明する。更新確定部138は、更新元レコードを読み出し、世代ポインタが格納されているか否かを判定することで同一の更新元レコードを更新するコミット済みのトランザクションが存在するか否かを判定する。ここで、更新確定部138は、世代ポインタが格納されていないと判定した場合、同一の更新元レコードを更新するトランザクションが存在しないと判定する。
続いて、更新確定部138は、読み出した更新元レコードを参照世代のレコードとして選択する。また、更新確定部138は、選択した参照世代のレコードのコミット処理を排他する。そして、更新確定部138は、参照世代のレコードに生成したレコードIDと更新者IDとを格納する。また、更新確定部138は、生成したレコードにコミット時刻を格納し、更新を確定する。
上述した図5を用いて説明する。ここで、「トランザクションID=40」で識別されるトランザクションと「トランザクションID=50」で識別されるトランザクションとが同時に処理を開始し、「トランザクションID=40」がコミットした後に「トランザクションID=50」がコミットするものとして説明する。図6のレコードセットにおいて、更新確定部138は、「トランザクションID=40」で識別されるトランザクションが「レコードID=R2」で識別されるレコードを更新元にして「レコードID=R6」で識別されるレコードを生成したと判定する。
更新確定部138は、「トランザクションID=40」を確定させる場合、図5に示した「レコードID=R2」の世代ポインタには値が格納されていないと判定する。したがって、更新確定部138は、「レコードID=R6」と同一の更新元レコードを更新するコミット済みのトランザクションが存在しないと判定する。続いて、更新確定部138は、図8に示すように、「レコードID=R2」の世代ポインタに「R6」、更新者IDに「40」を格納する。そして、更新確定部138は、「レコードID=R6」のコミット時刻に「13:00」を格納し、更新を確定する。なお、図8は、更新確定部によるデータの確定を示す図である。
(同一の更新元レコードを更新するトランザクションが存在する場合)
更新確定部138が同一の更新元レコードを更新するトランザクションが存在すると判定した場合について説明する。更新確定部138は、読み出した更新元レコードに世代ポインタが格納されていると判定した場合、同一の更新元レコードを更新するトランザクションが存在すると判定する。かかる場合、更新確定部138は、参照世代を選択し、選択した参照世代と、確定手順情報DBバッファ122に記憶された確定手順情報とに従って生成したレコードに格納された値を確定させる。
(参照世代の選択)
まず、更新確定部138による参照世代の選択について説明する。更新確定部138は、読み出した更新元レコードの「世代ポインタ」に格納されているレコードIDを抽出し、抽出したレコードIDに該当するレコードを読み出す。ここで、抽出されたレコードIDを「次の世代のレコード」と定義する。
そして、更新確定部138は、次の世代のレコードの「世代ポインタ」が格納されているか否かを判定する。更新確定部138は、「世代ポインタ」が格納されていないと判定した場合、次の世代のレコードを参照世代のレコードとして選択する。一方、更新確定部138は、世代ポインタが格納されていると判定した場合、「世代ポインタ」が格納されていないレコードを読み出すまで上述した次の世代のレコードを抽出する処理を繰り返す。更新確定部138は、参照世代を選択した場合、選択した参照世代のコミット処理を排他する。
上述した図8を用いて説明する。例えば、「トランザクションID=40」がコミットした後に、「トランザクションID=50」がコミットする場合を説明する。更新確定部138は、「トランザクションID=50」が「レコードID=R2」を更新元にして「レコードID=R8」を生成したと判定する。そして、更新確定部138は、「レコードID=R2」の世代ポインタを読み出し、図8に示すように、「R6」が格納されていると判定する。この結果、更新確定部138は、同一の更新元レコードを更新するトランザクションが存在すると判定する。
続いて、更新確定部138は、「次の世代のレコード」として「レコードID=R6」を読み出し、「世代ポインタ」が格納されているか否かを判定する。ここで、更新確定部138は、「レコードID=R6」の「世代ポインタ」には値が格納されていないので、「レコードID=R6」を「レコードID=R8」の参照世代のレコードとして選択する。
(更新レコードの確定)
更新確定部138は、選択した参照世代のレコードと確定手順情報DBバッファ122に記憶された確定手順情報とに従って生成したレコードに格納された値を確定させる。例えば、更新確定部138は、更新フラグに格納された値が「y」であるか「n」であるかを判定し、カラムの値が更新されているか否かを判定する。
ここで、更新確定部138は、更新フラグに格納された値が「n」である場合、カラムに格納された値が更新されていないと判定し、参照世代のカラムに格納された値を設定する。一方、更新確定部138は、更新フラグに格納された値が「y」である場合、カラムの値が更新されていると判定し、確定手順情報DBバッファ122に記憶された確定手順を読み出し、競合時の属性を判定する。
図8に示す例では、更新確定部138は、「レコードID=R8」の更新フラグ1及び更新フラグ2に格納された値が「n」であるので、カラム1の値に「100」、カラム2の値に「B」を設定する。一方、更新確定部138は、「レコードID=R8」の更新フラグ3及び更新フラグ4に格納された値が「y」であるので、図4に示す確定手順情報DBバッファ122に記憶される確定手順情報からカラム毎に設定された競合時の属性を判定する。そして、更新確定部138は、判定した競合時の属性に従って、カラム3及びカラム4の値を設定する。
(競合時の属性)
更新確定部138は、競合時の属性として、「Merge」、「Max」、「Min」、「OverWrite」、「Error」、「Function」を判定し、カラムの値を設定する。ここで、更新確定部138が判定する競合時の属性について説明する。
例えば、更新確定部138は、カラムに設定された競合時の属性が「Merge」であると判定し、更新した差分値を参照世代のレコードの値に計算した結果を設定する。例えば、更新確定部138は、図8に示すような「レコードID=R8」の更新フラグ4の値が「y」であるので、カラムの値が更新されていると判定し、確定手順情報DBバッファ122に記憶された確定手順を読み出す。ここで、カラム4の競合時の属性は「Merge」に設定されているので、更新確定部138は、参照世代である「レコードID=R6」のカラム4の値から差分値を計算した値、「3000」を格納する。
更新確定部138は、カラムに設定された競合時の属性が「Max」であると判定した場合、更新した値と参照世代のレコード中の値との大小比較を行い、最大値を設定する。また、更新確定部138は、カラムに設定された属性が「Min」であると判定した場合、更新した値と参照世代のレコード中の値との大小比較を行い、最小値を設定する。
更新確定部138は、カラムに設定された競合時の属性が「OverWrite」であると判定した場合、参照世代のレコードと更新したレコードのコミット時刻を比較する。ここで、更新確定部138は、更新したレコードのコミット時刻の方が古ければ、参照世代のレコードに格納された値を設定する。一方、更新確定部138は、参照世代のレコードのコミット時刻の方が古ければ、更新したレコードに格納された値を設定する。なお、かかる場合、更新確定部138は、レコード毎に格納されたコミット時刻を判定する。
例えば、更新確定部138は、図8に示すような「レコードID=R8」の更新フラグ3の値が「y」であるので、カラムの値が更新されていると判定し、確定手順情報DBバッファ122に記憶された確定手順を読み出す。ここで、カラム3の競合時の属性は「OverWrite」に設定されているので、更新確定部138は、参照世代である「レコードID=R6」と更新したレコード「レコードID=R8」のコミット時刻を比較する。この場合、更新したレコード「レコードID=R8」のコミット時刻の方が古いので、更新確定部138は、カラム3の値に「Upd」格納する。
更新確定部138は、カラムに設定された競合時の属性が「Error」であると判定した場合、参照世代のレコードで更新されているか否かを判定する。ここで、更新確定部138は、参照世代で更新されていると判定した場合、トランザクションをキャンセルする。
更新確定部138は、カラムに設定された競合時の属性が「Function」であると判定した場合、更新元、参照世代、追加レコードを引数に利用者が登録したファンクションを呼び出して、更新結果をマージする。ここで、「Function」は、複数の利用者によって文章データの添削をするように単純にマージすることができない場合に用いられる校正機能である。具体的には、更新確定部138は、添削した文章データを追記する場合に、既に他の利用者によってデータが追記されているならば、元のデータの後ろに添削した文章データを追記する。
続いて、更新確定部138は、レコードの更新を確定させた場合、生成したレコードIDと更新者IDとを参照世代のレコードに格納する。また、更新確定部138は、コミット時刻を確定させたレコードに格納する。図8に示す例では、更新確定部138は、「レコードID=R8」の更新を確定させた場合、参照世代のレコードである「レコードID=R6」の世代ポインタに「R8」、更新者IDに「50」を格納する。また、更新確定部138は、「レコードID=R8」のコミット時刻に「13:07」を格納する。
また、更新確定部138は、一連のトランザクションとして実行されるレコードの全てを処理したか否かを判定する。更新確定部138は、全てのレコードを処理したと判定した場合、排他を開放し、トランザクションをコミットする。
更新確定部138は、トランザクションをコミットする時にデータベースに加えた変更、すなわち、コミット時刻の記録や世代ポインタの格納、トランザクションが競合した場合の各カラムの更新確定結果をログ管理部139へ転送する。
図9を用いてトランザクションをコミットした後のデータベースの状態の一例を説明する。図9は、更新確定部138がトランザクションをコミットした後のデータベースの状態の一例を示す図である。図5に示した例と比較し、図9に示すトランザクションをコミットした後のデータベースの「レコードID=R2」には、更新者IDに「40」、世代ポインタに「R6」が新たに格納される。「レコードID=R4」には、更新者IDに「50」、世代ポインタに「R9」が新たに格納される。「レコードID=R6」には、更新者IDに「50」、コミット時刻に「13:00」、世代ポインタに「R8」が新たに格納される。「レコードID=R7」には、コミット時刻に「13:02」が新たに格納される。「レコードID=R8」には、コミット時刻に「13:07」が新たに格納される。また、「レコードID=R8」のカラム2の値が「B」、カラム4の値が「3000」に更新される。「レコードID=R9」には、コミット時刻に「13:09」が新たに格納される。
ログ管理部139は、トランザクションの更新情報をログDB125に格納する。例えば、ログ管理部139は、レコード操作部135によって更新されたレコードイメージを受信し、受信したレコードイメージをログDB125に格納する。また、ログ管理部139は、更新確定部138からトランザクションをコミットした後のデータを受信し、受信したレコードイメージをログDB125に格納する。また、ログ管理部139は、トランザクション管理部137によってロールバックすると判定された場合には、トランザクションで更新した結果を更新前のデータに復元する。
[データベースサーバ100による処理の処理手順]
次に、図10及び図11を用いて、実施例2にかかるデータベースサーバ100における処理の処理手順を説明する。ここでは、図10を用いて、実施例2にかかるデータベースサーバ100の更新確定部138によるコミット処理の処理手順を説明し、図11を用いて、更新確定部138によるマージ処理の処理手順を説明する。
(更新確定部138によるコミット処理の処理手順)
図10は、更新確定部138による処理の処理手順を示すフローチャートである。図10を用いて更新確定部138によるコミット処理の処理手順を説明する。更新確定部138は、受付け部133がコミットを受付けた場合(ステップS101、Yes)、更新レコードセットを一つ読み出す(ステップS102)。そして、更新確定部138は、読み出したレコードの更新元レコードIDが存在するか否かを判定する(ステップS103)。
更新確定部138は、更新元レコードIDが存在すると判定した場合には(ステップS103、Yes)、更新元レコードを読み出し、読み出したレコードのコミット処理を排他する(ステップS104)。続いて、更新確定部138は、更新元レコードの世代ポインタが格納されているか否かを判定する(ステップS105)。
ここで、更新確定部138は、世代ポインタが格納されていないと判定した場合(ステップS105、No)、世代ポインタと更新者IDとを直前の確定済みレコードに格納し(ステップS109)、ステップS110の処理を実行する。
一方、更新確定部138は、世代ポインタが格納されていると判定した場合(ステップS105、Yes)、世代ポインタが示すレコードを読み出して、読み出したレコードのコミット処理を排他する(ステップS106)。続いて、更新確定部138は、読み出したレコードに世代ポインタが格納されているか否かを判定する(ステップS107)。ここで、更新確定部138は、世代ポインタが格納されていると判定した場合(ステップS107、Yes)、ステップS106の処理に戻り、以降の処理を実行する。
一方、更新確定部138は、世代ポインタが格納されていないと判定した場合(ステップS107、No)、読み出したレコードを排他して更新のマージ処理を実行する(ステップS108)。続いて、更新確定部138は、世代ポインタと更新者IDとを直前の確定済みレコードに格納し(ステップS109)、ステップS110の処理を実行する。
更新確定部138は、更新元レコードIDが存在しないと判定した場合には(ステップS103、No)、生成したレコードにコミット時刻を格納する(ステップS110)。続いて、更新確定部138は、更新レコードセットに格納された全てのレコードの処理を実行したか否かを判定する(ステップS111)。
ここで、更新確定部138は、更新レコードセットに格納された全てのレコードの処理を実行していないと判定した場合(ステップS111、No)、ステップS102の処理に戻り、以降の処理を実行する。一方、更新確定部138は、更新レコードセットに格納された全てのレコードの処理を実行したと判定した場合(ステップS111、Yes)、排他を開放し(ステップS112)、処理を終了する。
(更新確定部138によるマージ処理の処理手順)
次に、図11を用いて更新確定部138によるマージ処理の処理手順を説明する。なお、この処理は、図10のステップS108に対応する。
更新確定部138は、カラムを一つ選択し(ステップS201)、選択したカラムに格納された情報を更新したか否かを判定する(ステップS202)。ここで、更新確定部138は、選択したカラムに格納された情報を更新していないと判定した場合(ステップS202、No)、参照世代のレコードに格納された値を選択したカラムに格納し(ステップS203)する。続いて、更新確定部138は、全てのカラムについて処理を実行したか否かを判定する(ステップS219)。
更新確定部138は、選択したカラムに格納された情報を更新したと判定した場合(ステップS202、Yes)、確定手順情報DBバッファ122に記憶された確定手順情報から選択したカラムの更新競合時の属性を判定する(ステップS204)。
そして、更新確定部138は、属性が「Merge」であるか否かを判定する(ステップS205)。ここで、更新確定部138は、属性が「Merge」であると判定した場合(ステップS205、Yes)、更新した差分値を参照世代のレコードが格納する値に計算した結果を設定する(ステップS206)。続いて、更新確定部138は、全てのカラムについてマージ処理を実行したか否かを判定する(ステップS219)。
一方、更新確定部138は、属性が「Merge」ではないと判定した場合(ステップS205、No)、属性が「Max」又は「Min」であるか否かを判定する(ステップS207)。ここで、更新確定部138は、属性が「Max」又は「Min」であると判定した場合(ステップS207、Yes)、更新した値と参照世代のレコード値とを比較し、最大値又は最小値を設定する(ステップS208)。続いて、更新確定部138は、全てのカラムについてマージ処理を実行したか否かを判定する(ステップS219)。
一方、更新確定部138は、属性が「Max」又は「Min」ではないと判定した場合(ステップS207、No)、属性が「OverWrite」であるか否かを判定する(ステップS209)。ここで、更新確定部138は、属性が「OverWrite」であると判定した場合(ステップS209、Yes)、参照世代のコミット時刻よりも読み出したレコードのコミット時刻が古いか否かを判定する(ステップS210)。
ここで、更新確定部138は、読み出したレコードのコミット時刻よりも参照世代のコミット時刻が古いと判定した場合(ステップS210、No)、読み出したレコードの値を設定する(ステップS211)。続いて、更新確定部138は、全てのカラムについてマージ処理を実行したか否かを判定する(ステップS219)。一方、更新確定部138は、参照世代のコミット時刻よりも読み出したレコードのコミット時刻が古いと判定した場合(ステップS210、Yes)、参照世代のレコードの値を設定する(ステップS212)。続いて、更新確定部138は、全てのカラムについてマージ処理を実行したか否かを判定する(ステップS219)。
一方、更新確定部138は、属性が「OverWrite」ではないと判定した場合(ステップS209、No)、属性が「Error」であるか否かを判定する(ステップS213)。ここで、更新確定部138は、属性が「Error」であると判定した場合(ステップS213、Yes)、参照世代のレコードが更新されているか否かを判定する(ステップS214)。
ここで、更新確定部138は、参照世代のレコードが更新されていると判定した場合(ステップS214、Yes)、トランザクションをキャンセルする(ステップS215)。続いて、更新確定部138は、全てのカラムについてマージ処理を実行したか否かを判定する(ステップS219)。一方、更新確定部138は、参照世代のレコードが更新されてないと判定した場合(ステップS214、No)、読み出したレコードで更新した値を設定する(ステップS216)。続いて、更新確定部138は、全てのカラムについてマージ処理を実行したか否かを判定する(ステップS219)。
一方、更新確定部138は、属性が「Error」ではないと判定した場合(ステップS213、No)、属性が「Function」であると判定する(ステップS217)。そして、更新確定部138は、利用者によって登録されたファンクションを読み出し、更新結果をマージする(ステップS218)。続いて、更新確定部138は、全てのカラムについてマージ処理を実行したか否かを判定する(ステップS219)。
更新確定部138は、全てのカラムについて処理を実行していないと判定した場合(ステップS219、No)、ステップS201に戻り、以降の処理を実行する。一方、更新確定部138は、全てのカラムについて処理を実行したと判定した場合(ステップS219、Yes)、処理を終了する。
[実施例2の効果]
上述してきたように、本実施例では、レコード操作部135がデータベース123から読み出したレコードからデータベースバッファ124上に新たなデータを生成する。また、更新確定部138は、レコード操作部135が生成したレコードを確定する場合、同一の更新元レコードから生成したレコードが存在するか否かを判定する。そして、更新確定部138は、更新元が同一のレコードが存在する場合に、確定手順DBバッファ122に格納された確定手順情報に基づいて、データを確定させることで、競合するトランザクションを同時に実行することができる。
また、本実施例にかかるデータベースサーバは、データとして複数のデータ項目を有するレコードを記憶し、データ項目ごとにレコードを確定させる確定手順情報を記憶する。したがって、データベースサーバは、データを更新する場合、データ項目ごとにデータを確定させることができるので、レコードの更新処理を効率的に実行できる。
また、本実施例にかかるデータベースサーバは、レコードを更新した場合、レコードの更新したデータ項目ごとに更新フラグを付与するので、データを確定させる項目を判定することができるので、レコードの更新処理を効率的に実行できる。
また、本実施例にかかるデータベースサーバは、更新元データからのデータを更新した場合、更新元データに世代ポインタを格納する。したがって、データベースサーバは、世代ポインタを読み出すことで同一の更新元データを更新するトランザクションが存在するか否かを判定することができる。
また、本実施例にかかるデータベースサーバは、トランザクションのコミット処理を排他するが、更新処理を排他しないので、同一のデータを更新するトランザクションが存在した場合でも、トランザクションの排他待ちをしなくてもよい。したがって、データベースサーバは、更新競合時のレスポンスやスループットを向上させることができる。
また、本実施例にかかるデータベースサーバは、アプリケーションとの対話処理にも適用できるので、アプリケーション設計者がトランザクションの排他を考慮してアプリケーションを設計しなくてもよい。したがって、データベースサーバは、アプリケーション設計者の負担を軽減することができる。
また、本実施例にかかるデータベースサーバは、データベースのレプリケーションによって、主系DBと従系DBを用いる場合においても、更新ログをお互いに送付して反映することで、両系での更新を実現することが出来る。
また、本願の開示するデータベースサーバは、排他制御やデータキャッシュを最新化させる同期処理を削減することができる。このため、従来クラウド環境を構築する場合に問題となった、頻繁な通信による同期処理を省略することができるので、スケールアウトの限界を克服できる。したがって、本願の開示するデータベースサーバは、クラウド環境下に適した大規模にスケールできるデータベースを提供する技術の一部として活用することができる。
ところで、本願の開示するデータベースサーバは、上述した実施例以外にも、種々の異なる形態にて実施されてよい。そこで、実施例3では、本願の開示するデータベースサーバの他の実施例について説明する。
(システム構成等)
本実施例において説明した各処理のうち自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、制御手順、具体的名称については、特記する場合を除いて任意に変更することができる。
データベースサーバは、利用者端末からデータの検索、更新を受付けるものとして説明したが、これに限定されるものではない。例えば、データベースサーバは、利用アプリケーションサーバであってもよい。また、データベースサーバと利用者端末とが1対1で接続されるものとして説明したが、これに限定されるものではない。例えば、データベースサーバは、複数の利用者端末と接続されてもよい。
ログ管理部139がログの採取を実行し、ログDB125へ記憶させるものとして説明したがこれに限定されるものではない。例えば、ログを記録するかわりに、トランザクション終了時にデータベースバッファの内容をデータベースに同期して永続化することで、ログを記録せずにデータベースの永続性を保証するようにしても良い。
データ操作部134は、データの検索時にトランザクションの開始時刻又はデータ操作命令の実行時刻のどちらのコミット済みデータを検索するのかをレコード操作部135へ通知するものとして説明したが、これに限定されない。例えば、データ操作部134は、検索する時刻についての情報をアクセス手順と共にSQL文に格納し、レコード操作部135に転送してもよい。
また、データの検索時に、レコード操作部135は、コミット時刻として、トランザクションの終了時の時刻を設定するように説明したがこれに限定されるものではない。例えば、レコード操作部135は、トランザクションの開始時刻でデータを検索してもよい。
また、レコード操作部135は、従来のMVCC(MultiVersion Concurrency Control)のトランザクションにとって有効な世代か無効な世代かを判定する読み取り世代の判定条件を変更することで、同一レコードを更新するトランザクションを同時に走行させる。レコード操作部135は、従来の判定条件の一つ「レコードの更新者IDが未設定である」を「レコードの更新者IDが未設定でかつ、更新元のレコードではない」に変更する。
図12は、レコード操作部135によって読み取り可能と判定されたレコードIDをトランザクション毎に示す図である。ここで、説明の便宜上、スナップショット取得時において、次のトランザクションに割り当てられるトランザクションIDは100と仮定する。図12に示すように、例えば、上述した図6のレコードセットがスナップショット中であった場合、レコード操作部135は、「トランザクションID=40」で識別されるトランザクションについて、「レコードID=R1、R4、R5、R6」を読み取り可能と判定する。また、レコード操作部135は、「トランザクションID=50」で識別されるトランザクションについて、「レコードID=R1、R5、R7、R8、R9」を読み取り可能と判定する。
更新確定部138は、カラムを一つ選択し選択した順序でマージ処理を実行するものとして説明したが、これに限定されない。例えば、更新確定部138は、複数のカラムのマージ処理を並列して実行しても良い。さらに、更新確定部138は、カラムを任意の選択順序で選択することが可能である。また、図11に示したステップS205、ステップS207、ステップS209、ステップS213の処理は、どちらを先に実行してもよい。
また、図示した記憶部が格納する情報は一例に過ぎず、必ずしも図示のごとく情報が格納される必要はない。例えば、データベース123は、トランザクションの開始時刻を記憶するようにしてもよい。
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。例えば、データベースサーバ100は、データ操作部134とレコード操作部135とは統合されてもよい。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
(プログラム)
ところで、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。
図13は、データベース更新プログラムを実行するコンピュータシステムを示す図である。図13に示すように、コンピュータシステム300は、バス310とネットワークインターフェース320とHDD330とRAM340とCPU350とROM360とを有する。ここで、ネットワークインターフェース320は、図2に示した通信制御I/F部110に対応する。
また、ROM360には、上記実施例と同様の機能を発揮するプログラムが予め記憶されている。つまり、図13に示すように、ROM360は、データ生成プログラム361とデータ判定プログラム362とデータ確定プログラム363とが予め記憶されている。
そして、CPU350は、データ生成プログラム361とデータ判定プログラム362とデータ確定プログラム363とを読み出してRAM340に展開する。そして、CPU350は、データ生成プログラム361をデータ生成プロセス351として実行する。またCPU350は、データ判定プログラム362をデータ判定プロセス352として実行する。またCPU350は、データ確定プログラム363をデータ確定プロセス353として実行する。なお、データ生成プロセス351は、図2に示したレコード操作部135に対応する。また、データ判定プロセス352及びデータ確定プロセス353は、更新確定部138に対応する。また、HDD330には、図2に示した確定手順情報DB121に対応する確定手順情報テーブル331が設けられる。
ところで、上記したプログラム361〜363は、必ずしもROM360に記憶させておく必要はない。例えば、コンピュータシステム300に挿入されるフレキシブルディスク(FD)、CD−ROM、MOディスク、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に記憶させておくようにしてもよい。また、コンピュータシステム300の内外に備えられるハードディスクドライブ(HDD)などの「固定用の物理媒体」に記憶させておいてもよい。さらに、公衆回線、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)などを介してコンピュータシステム300に接続される「他のコンピュータシステム」に記憶させておいてもよい。そして、コンピュータシステム300がこれらからプログラムを読み出して実行するようにしてもよい。
すなわち、このプログラムは、上記した「可搬用の物理媒体」、「固定用の物理媒体」、「通信媒体」などの記録媒体に、コンピュータ読み取り可能に記憶されるものである。そして、コンピュータシステム300は、このような記録媒体からプログラムを読み出して実行することで上記した実施例と同様の機能を実現する。なお、この他の実施例でいうプログラムは、コンピュータシステム300によって実行されることに限定されるものではない。例えば、他のコンピュータシステムまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
10 データベースサーバ
11 データ記憶部
12 確定手順情報記憶部
13 データ生成部
14 判定部
15 確定部
100 データベースサーバ
110 通信制御I/F部
121 確定手順DB
122 確定手順DBバッファ
123 データベース
124 データベースバッファ
125 ログDB
130 制御部
131 定義受付け部
132 定義情報管理部
133 受付け部
134 データ操作部
135 レコード操作部
136 バッファ管理部
137 トランザクション管理部
138 更新確定部
139 ログ管理部
200 利用者端末
300 コンピュータシステム
310 バス
320 ネットワークインターフェース
330 HDD
331 確定手順情報テーブル
340 RAM
350 CPU
351 データ生成プロセス
352 データ判定プロセス
353 データ確定プロセス
360 ROM
361 データ生成プログラム
362 データ判定プログラム
363 データ確定プログラム

Claims (16)

  1. データを記憶するデータ記憶部と、
    前記データ記憶部に記憶されるデータを更新する複数のトランザクションの間で各トランザクションを確定させる確定手順情報を記憶する確定手順情報記憶部と、
    前記データを更新するトランザクションを受付け、前記トランザクションを確定させる場合に、前記データを更新元データとする確定済みデータを生成した確定済みトランザクションが存在するか否かを判定する判定部と、
    前記判定部によって確定済みトランザクションが存在すると判定された場合に、前記確定済みデータと前記トランザクションが更新するデータのデータ項目に対応する確定手順情報とに従って、前記確定済みデータを前記トランザクションが更新するデータのデータ項目に対応する確定手順情報に基づき更新したデータを更新データとして、前記トランザクションを確定させる確定部と、
    を有することを特徴とするデータベースサーバ装置。
  2. 前記データを更新するトランザクションを受付けた場合に、当該トランザクションを実行して、前記データから確定前の更新データを生成するデータ生成部を更に有し、
    前記判定部は、前記データ生成部によって実行されたトランザクションを確定させる場合に、前記データを更新元データとする確定済みデータを生成した確定済みトランザクションが存在するか否かを判定する
    ことを特徴とする請求項1に記載のデータベースサーバ装置。
  3. 前記確定部は、前記判定部によって確定済みトランザクションが存在すると判定された場合に、当該確定済みトランザクションにより生成された、前記データを更新元データとする確定済みデータのうち最新の確定済みデータを特定し、特定した前記確定済みデータと前記確定手順情報とに従って前記確定前の更新データを再び更新して、前記トランザクションを確定させることを特徴とする請求項2に記載のデータベースサーバ装置。
  4. 前記データ記憶部は、複数のデータ項目を有するレコードを前記データとして記憶し、
    前記確定手順情報記憶部は、前記データ項目ごとに前記確定手順情報を記憶し、
    前記データ生成部は、前記レコードを更新するトランザクションを受付けた場合に、当該トランザクションを実行して、前記データ項目を更新した確定前の更新レコードを生成し、
    前記判定部は、前記データ生成部によって実行されたトランザクションを確定させる場合に、前記レコードを更新元のレコードとする確定済みレコードを生成した確定済みトランザクションが存在するか否かを判定し、
    前記確定部は、前記判定部によって確定済みトランザクションが存在すると判定された場合に、前記確定済みレコードと前記確定手順情報とに従って、前記確定前の更新レコードの各データ項目を再び更新して、前記トランザクションを確定させることを特徴とする請求項2に記載のデータベースサーバ装置。
  5. 前記データ記憶部が記憶するレコードは、当該レコードを更新元レコードとする前記確定済みレコードを特定する特定情報を有し、
    前記判定部は、前記データ生成部によって実行されたトランザクションを確定させる場合に、前記レコードが有する特定情報に基づいて、前記確定済みレコードを生成した確定済みトランザクションが存在するか否かを判定することを特徴とする請求項4に記載のデータベースサーバ装置。
  6. 前記データ記憶部が記憶するレコードは、前記データ項目ごとに、当該データ項目が更新された否かを示す更新フラグを有し、
    前記確定部は、前記判定部によって確定済みトランザクションが存在すると判定された場合に、前記更新フラグに基づいて更新されたデータ項目を特定し、前記確定済みレコードと前記確定手順情報とに従って、特定したデータ項目を再び更新して、前記トランザクションを確定させることを特徴とする請求項4に記載のデータベースサーバ装置。
  7. 前記確定部は、前記トランザクションを確定させる場合に、当該トランザクションを確定させる前記確定済みデータに対する他のトランザクションを排他し、当該トランザクションを確定した場合に、前記確定済みデータに対する他のトランザクションの排他を解除することを特徴とする請求項4に記載のデータベースサーバ装置。
  8. データベースサーバ装置は、
    データを記憶するデータ記憶部と、
    前記データ記憶部に記憶されるデータを更新する複数のトランザクションの間で各トランザクションを確定させる確定手順情報を記憶する確定手順情報記憶部と、を備え、
    前記データベースサーバ装置が、
    データを更新するトランザクションを受付け、前記トランザクションを確定させる場合に、前記データを更新元データとする確定済みデータを生成した確定済みトランザクションが存在するか否かを判定する判定ステップと、
    前記判定ステップによって確定済みトランザクションが存在すると判定された場合に、前記確定済みデータと前記トランザクションが更新するデータのデータ項目に対応する確定手順情報とに従って、前記確定済みデータを前記トランザクションが更新するデータのデータ項目に対応する確定手順情報に基づき更新したデータを更新データとして、前記トランザクションを確定させる確定ステップと、
    を実行することを特徴とするデータベース更新方法。
  9. コンピュータは、
    データを記憶するデータ記憶部と、
    前記データ記憶部に記憶されるデータを更新する複数のトランザクションの間で各トランザクションを確定させる確定手順情報を記憶する確定手順情報記憶部と、を備え、
    前記コンピュータに、
    データを更新するトランザクションを受付け、前記トランザクションを確定させる場合に、前記データを更新元データとする確定済みデータを生成した確定済みトランザクションが存在するか否かを判定する判定手順と、
    前記判定手順によって確定済みトランザクションが存在すると判定された場合に、前記確定済みデータと前記トランザクションが更新するデータのデータ項目に対応する確定手順情報とに従って、前記確定済みデータを前記トランザクションが更新するデータのデータ項目に対応する確定手順情報に基づき更新したデータを更新データとして、前記トランザクションを確定させる確定手順と、
    を実行させることを特徴とするデータベース更新プログラム。
  10. データを記憶するデータ記憶部と、
    前記データ記憶部に記憶されるデータを更新する複数のトランザクションの間で各トランザクションを確定させる確定手順情報を記憶する確定手順情報記憶部と、
    前記データを更新するトランザクションを受付けた場合に、前記データから当該トランザクション確定前の更新データを生成するデータ生成部と、
    前記トランザクションを確定させる場合に、前記データを更新元データとする確定済みデータを生成した確定済みトランザクションが存在するか否かを判定する判定部と、
    前記判定部によって確定済みトランザクションが存在すると判定された場合に、前記確定済みデータと前記トランザクションが更新するデータのデータ項目に対応する確定手順情報とに従って前記確定前の更新データを更新して、前記トランザクションを確定させる確定部と、
    を有することを特徴とするデータベースサーバ装置。
  11. 前記データ記憶部は、複数のデータ項目を有するレコードを前記データとして記憶し、
    前記確定手順情報記憶部は、前記データ項目ごとに前記確定手順情報を記憶し、
    前記データ生成部は、前記レコードを更新するトランザクションを受付けた場合に、当該トランザクションを実行して、前記データ項目を更新した確定前の更新レコードを生成し、
    前記判定部は、前記データ生成部によって実行されたトランザクションを確定させる場合に、前記レコードを更新元のレコードとする確定済みレコードを生成した確定済みトランザクションが存在するか否かを判定し、
    前記確定部は、前記判定部によって確定済みトランザクションが存在すると判定された場合に、前記確定済みレコードと前記確定手順情報とに従って、前記確定前の更新レコードの各データ項目を再び更新して、前記トランザクションを確定させることを特徴とする請求項10に記載のデータベースサーバ装置。
  12. 前記データ記憶部が記憶するレコードは、当該レコードを更新元レコードとする前記確定済みレコードを特定する特定情報を有し、
    前記判定部は、前記データ生成部によって実行されたトランザクションを確定させる場合に、前記レコードが有する特定情報に基づいて、前記確定済みレコードを生成した確定済みトランザクションが存在するか否かを判定することを特徴とする請求項11に記載のデータベースサーバ装置。
  13. 前記データ記憶部が記憶するレコードは、前記データ項目ごとに、当該データ項目が更新された否かを示す更新フラグを有し、
    前記確定部は、前記判定部によって確定済みトランザクションが存在すると判定された場合に、前記更新フラグに基づいて更新されたデータ項目を特定し、前記確定済みレコードと前記確定手順情報とに従って、特定したデータ項目を再び更新して、前記トランザクションを確定させることを特徴とする請求項11に記載のデータベースサーバ装置。
  14. 前記確定部は、前記トランザクションを確定させる場合に、当該トランザクションを確定させる前記確定済みデータに対する他のトランザクションを排他し、当該トランザクションを確定した場合に、前記確定済みデータに対する他のトランザクションの排他を解除することを特徴とする請求項11に記載のデータベースサーバ装置。
  15. データベースサーバ装置は、
    データを記憶するデータ記憶部と、
    前記データ記憶部に記憶されるデータを更新する複数のトランザクションの間で各トランザクションを確定させる確定手順情報を記憶する確定手順情報記憶部と、を備え、
    前記データベースサーバ装置が、
    前記データを更新するトランザクションを受付けた場合に、前記データから当該トランザクション確定前の更新データを生成するデータ生成ステップと、
    前記トランザクションを確定させる場合に、前記データを更新元データとする確定済みデータを生成した確定済みトランザクションが存在するか否かを判定する判定ステップと、
    前記判定ステップによって確定済みトランザクションが存在すると判定された場合に、前記確定済みデータと前記トランザクションが更新するデータのデータ項目に対応する確定手順情報とに従って前記確定前の更新データを更新して、前記トランザクションを確定させる確定ステップと、
    を実行することを特徴とするデータベース更新方法。
  16. コンピュータは、
    データを記憶するデータ記憶部と、
    前記データ記憶部に記憶されるデータを更新する複数のトランザクションの間で各トランザクションを確定させる確定手順情報を記憶する確定手順情報記憶部と、を備え、
    前記コンピュータに、
    前記データを更新するトランザクションを受付けた場合に、前記データから当該トランザクション確定前の更新データを生成するデータ生成手順と、
    前記トランザクションを確定させる場合に、前記データを更新元データとする確定済みデータを生成した確定済みトランザクションが存在するか否かを判定する判定手順と、
    前記判定手順によって確定済みトランザクションが存在すると判定された場合に、前記確定済みデータと前記トランザクションが更新するデータのデータ項目に対応する確定手順情報とに従って前記確定前の更新データを更新して、前記トランザクションを確定させる確定手順と、
    を実行させることを特徴とするデータベース更新プログラム。
JP2011013476A 2011-01-25 2011-01-25 データベースサーバ装置、データベース更新方法及びデータベース更新プログラム Active JP5652228B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011013476A JP5652228B2 (ja) 2011-01-25 2011-01-25 データベースサーバ装置、データベース更新方法及びデータベース更新プログラム
US13/298,859 US9020916B2 (en) 2011-01-25 2011-11-17 Database server apparatus, method for updating database, and recording medium for database update program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011013476A JP5652228B2 (ja) 2011-01-25 2011-01-25 データベースサーバ装置、データベース更新方法及びデータベース更新プログラム

Publications (2)

Publication Number Publication Date
JP2012155498A JP2012155498A (ja) 2012-08-16
JP5652228B2 true JP5652228B2 (ja) 2015-01-14

Family

ID=46544944

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011013476A Active JP5652228B2 (ja) 2011-01-25 2011-01-25 データベースサーバ装置、データベース更新方法及びデータベース更新プログラム

Country Status (2)

Country Link
US (1) US9020916B2 (ja)
JP (1) JP5652228B2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013006985A1 (en) * 2011-07-12 2013-01-17 General Electric Company Version control methodology for network model
WO2014192213A1 (ja) * 2013-05-31 2014-12-04 日本電気株式会社 分散処理システム
US10650021B2 (en) * 2013-12-03 2020-05-12 Red Hat, Inc. Managing data operations in an integrated database system
JP5832592B1 (ja) * 2014-06-02 2015-12-16 三菱電機株式会社 データ管理装置
JP6199808B2 (ja) * 2014-06-06 2017-09-20 株式会社東芝 データベース装置およびデータアクセス方法
KR102096249B1 (ko) * 2014-06-24 2020-04-02 구글 엘엘씨 원격 데이터베이스에 대한 변경사항들의 프로세싱
JP6477169B2 (ja) * 2015-03-31 2019-03-06 富士通株式会社 データベースの処理制御方法、処理制御プロラム及びデータベースサーバ
JP6515753B2 (ja) 2015-09-07 2019-05-22 富士通株式会社 データベース制御プログラム、データベース制御方法及びデータベース制御装置
JP2017078981A (ja) * 2015-10-21 2017-04-27 富士通株式会社 排他切り替えプログラム及び排他切り替え方法
JP6586174B2 (ja) * 2015-11-05 2019-10-02 株式会社Murakumo データベースシステム、トランザクション管理ノード、方法およびプログラム
WO2018203376A1 (ja) * 2017-05-01 2018-11-08 株式会社Murakumo データベースシステム、方法およびプログラム
JP7079573B2 (ja) 2017-07-18 2022-06-02 株式会社オービック 楽観的排他処理直列化装置、楽観的排他処理直列化方法、および、楽観的排他処理直列化プログラム
US11474991B2 (en) * 2018-03-13 2022-10-18 Google Llc Including transactional commit timestamps in the primary keys of relational databases
CN109614444B (zh) * 2018-11-12 2023-05-16 武汉达梦数据库股份有限公司 一种数据同步时的数据初始化方法
CN112231071B (zh) 2020-05-20 2021-06-18 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3367385B2 (ja) * 1997-06-27 2003-01-14 日本電気株式会社 分散トランザクション整合方法及びプログラムを記録した機械読み取り可能な記録媒体
JP3785004B2 (ja) * 1999-09-30 2006-06-14 株式会社東芝 トランザクション管理方法及びトランザクション管理装置
US7249281B2 (en) * 2003-07-28 2007-07-24 Microsoft Corporation Method and system for backing up and restoring data of a node in a distributed system
US8762331B2 (en) * 2004-06-29 2014-06-24 Microsoft Corporation Concurrent transactions and page synchronization
JP4489550B2 (ja) * 2004-09-30 2010-06-23 株式会社日立製作所 バックアップデータ作成管理方法
US7548919B2 (en) * 2006-09-22 2009-06-16 International Business Machines Corporation Computer program product for conducting a lock free read
US8589357B2 (en) * 2006-10-20 2013-11-19 Oracle International Corporation Techniques for automatically tracking and archiving transactional data changes
KR20100080822A (ko) * 2007-09-28 2010-07-12 엑세리온 악티에볼라그 네트워크 오퍼레이팅 시스템
JP5088734B2 (ja) * 2007-11-22 2012-12-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 耐障害性トランザクション処理システム及び処理方法
JP4261609B1 (ja) 2008-05-02 2009-04-30 透 降矢 トランザクションの同時実行制御を備えたマルチオペレーション・プロセッシングを用いたデータベースのトランザクション処理システム
US8473952B2 (en) * 2010-06-30 2013-06-25 Oracle International Corporation System and method for communication between concurrent transactions using transaction communicator objects

Also Published As

Publication number Publication date
US20120191679A1 (en) 2012-07-26
US9020916B2 (en) 2015-04-28
JP2012155498A (ja) 2012-08-16

Similar Documents

Publication Publication Date Title
JP5652228B2 (ja) データベースサーバ装置、データベース更新方法及びデータベース更新プログラム
JP7212040B2 (ja) コンテンツ管理クライアント同期サービス
CN107066467B (zh) 用于事务高速缓存无效的原子可见性切换
US9336262B2 (en) Accelerated transactions with precommit-time early lock release
US20170192863A1 (en) System and method of failover recovery
JP5343399B2 (ja) 管理プログラム、管理方法、及び管理装置
US8954407B2 (en) System and method for partially deferred index maintenance
US7099889B2 (en) System and method for decoupling object identification for the purpose of object switching in database systems
JP5772458B2 (ja) データ管理プログラム、ノード、および分散データベースシステム
US20220035652A1 (en) Using multiple blockchains for applying transactions to a set of persistent data objects in persistent storage systems
JP6008947B2 (ja) データベースの管理方法、データベースシステム、及び、プログラム
JP4951141B2 (ja) データベースの管理方法
JP5109676B2 (ja) データ整合性を確保するためのプログラム、方法及びコンピュータ・システム
CN116089359A (zh) 数据库快照的生成方法、装置、电子设备和介质
AU2016100156A4 (en) Data Structure, Model for Populating a Data Structure and Method of Programming a Processing Device Utilising a Data Structure
JP5960798B2 (ja) データベースの管理方法
JP6239697B2 (ja) データベースの管理方法
JP2009301352A (ja) テスト装置およびテスト方法
JP5543918B2 (ja) データベース並行編集の競合解消方式
JP6398786B2 (ja) データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム
CN112632294B (zh) 同步Neo4j中数据到搜索服务器的方法及系统
US20240143386A1 (en) Using multiple blockchains for applying transactions to a set of persistent data objects in persistent storage systems
CN112685431A (zh) 异步缓存方法、装置、系统、电子设备和存储介质
Medeiros HAcid: A lightweight transaction system for HBase
CN117609209A (zh) 数据回收方法、数据还原方法、装置、设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131007

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140319

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140430

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140630

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140729

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140929

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141103

R150 Certificate of patent or registration of utility model

Ref document number: 5652228

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150