JP2012234509A - トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム - Google Patents

トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム Download PDF

Info

Publication number
JP2012234509A
JP2012234509A JP2011198730A JP2011198730A JP2012234509A JP 2012234509 A JP2012234509 A JP 2012234509A JP 2011198730 A JP2011198730 A JP 2011198730A JP 2011198730 A JP2011198730 A JP 2011198730A JP 2012234509 A JP2012234509 A JP 2012234509A
Authority
JP
Japan
Prior art keywords
log
group
transaction
transaction processing
records
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
JP2011198730A
Other languages
English (en)
Other versions
JP5807777B2 (ja
Inventor
Junpei Kamimura
純平 上村
Junichi Tatemura
ジュンイチ タテムラ
Atsushi Kitazawa
敦 北澤
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
Publication of JP2012234509A publication Critical patent/JP2012234509A/ja
Application granted granted Critical
Publication of JP5807777B2 publication Critical patent/JP5807777B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】キーと値とのペアで構成されるレコードを管理する環境下でトランザクション処理を実行しても、複数のレコードに対するトランザクション処理を行う。
【解決手段】トランザクションで使用されるレコードを、レコードに共通するユニークキーの属性値別に論理的にまとめて生成したグループに関する情報と、トランザクションに関する情報とを対応付けて記憶するグループ情報記憶部19と、アプリケーションから受信した処理要求に対応するトランザクションに基づいて、上記記憶情報を参照し、トランザクションに対応するグループを特定するグループ特定部121と、上記特定グループに属するレコードのログを、その内容の全てをまとめて物理的に同一の記憶領域内に格納して管理するログ管理部122と、上記管理ログの内容を、ログに対応するレコードに反映して実データを更新するデータ更新部13と、を備える。
【選択図】図1

Description

本発明は、トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラムに関する。
近年、スケーラブルなWebアプリケーションの実行基盤として、データセンター内の多数のコンピュータを用いる、いわゆるクラウドが注目されている。このクラウドのインフラストラクチャの一つとして、Key−Value Store(以下、「KVS」と記載する)が知られている。KVSは、キーと値とのペアで構成されるレコードを管理するデータベースである。特許文献1には、KVSを有するコンピュータシステムが開示されている。このコンピュータシステムでは、KVSを、サーバにあるデータベースのデータをキャッシュするためのキャッシュ装置として用いている。特許文献2には、KVSを有するデータベースシステムが開示されている。このデータベースシステムでは、KVSのデータ間に属性関係を持たせてデータを結合する仕組みが開示されている。
特開2011−8451号公報 特開2011−13923号公報
ところで、KVSでは、単一のレコードに対するデータ操作についてはアトミック性がサポートされている。したがって、KVSを用いてトランザクション処理を実行する場合に、アトミック性を担保しようとすると、単一のレコードごとにトランザクション処理を実行することになるため、処理効率が低下してしまう。
本発明は、上述した課題を解決するためになされたものであり、キーと値とのペアで構成されるレコードを管理する環境下でトランザクション処理を実行する場合であっても、複数のレコードに対するトランザクション処理を行うことができるトランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラムを提供することを目的の一例とする。
本発明の一側面であるトランザクション処理装置は、アプリケーションにより実行される一または複数のトランザクションで使用されるレコードを、当該レコードに共通するユニークキーの属性値別に論理的にまとめて生成したグループに関する情報と、前記トランザクションに関する情報とを対応付けて記憶するグループ情報記憶部と、前記アプリケーションから処理要求を受信した場合に、当該処理要求に対応する前記トランザクションに基づいて、前記グループ情報記憶部により記憶されている情報を参照し、当該トランザクションに対応する前記グループを特定するグループ特定部と、前記グループ特定部により特定された前記グループに含まれる前記レコードのログを、当該ログの内容の全てをまとめて物理的に同一の記憶領域内に格納して管理するログ管理部と、前記ログ管理部により管理される前記ログの内容を、前記ログに対応する前記レコードに反映させて、実データを更新するデータ更新部と、を備える。
本発明の一側面であるトランザクション処理方法は、アプリケーションにより実行される一または複数のトランザクションで使用されるレコードを、当該レコードに共通するユニークキーの属性値別に論理的にまとめて生成したグループに関する情報と、前記トランザクションに関する情報とを対応付けて記憶させるグループ情報記憶ステップと、前記アプリケーションから処理要求を受信した場合に、当該処理要求に対応する前記トランザクションに基づいて、前記グループ情報記憶ステップにおいて記憶された情報を参照し、当該トランザクションに対応する前記グループを特定するグループ特定ステップと、前記グループ特定ステップにおいて特定された前記グループに含まれる前記レコードのログを、当該ログの内容の全てをまとめて物理的に同一の記憶領域内に格納して管理するログ管理ステップと、前記ログ管理ステップにおいて管理される前記ログの内容を、前記ログに対応する前記レコードに反映させて、実データを更新するデータ更新ステップと、を含む。
本発明の一側面であるトランザクション処理プログラムは、上記トランザクション処理方法に含まれる各ステップをコンピュータに実行させる。
本発明によれば、キーと値とのペアで構成されるレコードを管理する環境下でトランザクション処理を実行する場合であっても、複数のレコードに対するトランザクション処理を行うことができる。
実施形態におけるトランザクション処理装置の構成を例示する図である。 商品テーブルのデータ構成を例示する図である。 入札テーブルのデータ構成を例示する図である。 商品情報テーブルのデータ構成を例示する図である。 (A)、(B)、(C)は、グループ構成の一例を説明するための図である。 (A)、(B)、(C)は、グループ構成の一例を説明するための図である。 (A)、(B)、(C)は、グループ構成の一例を説明するための図である。 トランザクション処理装置の動作を説明するためのフローチャートである。 グループ情報を登録する際の動作を説明するためのシーケンスチャートである。 トランザクションがKVSのデータを更新する際の動作の一例を説明するためのシーケンスチャートである。 トランザクションがKVSのデータを更新する際の動作の一例を説明するためのシーケンスチャートである。 トランザクションがKVSのデータを更新する際の動作の一例を説明するためのシーケンスチャートである。 トランザクションがKVSのデータを更新する際の動作の一例を説明するためのシーケンスチャートである。 トランザクションがKVSのデータを更新する際の動作の一例を説明するためのシーケンスチャートである。 変形例におけるトランザクション処理装置の構成を例示する図である。
以下、添付図面を参照して、本発明に係るトランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラムの好適な実施形態について説明する。
実施形態を説明する前に、WAL(Write Ahead Logging)について説明する。WALは、一般的なリレーショナルデータベースシステムにおけるトランザクション処理手法の一つであり、データベースに対してデータを変更する前に、変更内容をログ(トランザクションログ)に書き出す手法である。WALは、アトミック性を確保して実行され、ログを永続的な記憶装置に書き込むという特徴を有する。このようなWALをトランザクション処理に採用することで、トランザクションのACID(Atomicity Consistency Isolation Durability)特性のうち、“A(Atomicity)”と“D(Durability)”とを実現できる。WALを採用するトランザクション処理では、2種類のデータを更新することになる。一つはログの更新であり、もう一つは実データの更新である。これら2種類のデータは、永続的な記憶装置に書き込まれるタイミングが異なる。ログは、トランザクションのコミット時に書き込まれ、実データは、チェックポイント時に書き込まれる。実データをチェックポイント時に書き込むことで、永続的な記憶装置として一般的に用いられる低速なハードディスクへのアクセス回数を減らすことができる。
本願発明は、このようなWALを、KVSを用いてトランザクション処理を行う環境に採用し、以下に記載する各種の仕組みを加えることで、複数のレコードに対するトランザクション処理を可能とした。以下に、このような特徴を有する本願発明の実施形態について説明する。
まず、図1を参照して、実施形態におけるトランザクション処理装置の機能構成について説明する。トランザクション処理装置10は、機能的には、例えば、グループ生成部11と、トランザクション処理部12と、データ更新部13とを有する。
ここで、トランザクション処理装置10は、物理的には、例えば、CPU(Central Processing Unit)と、記憶装置と、入出力インターフェースとを含んで構成される。記憶装置には、例えば、CPUで処理されるプログラムおよびデータを記憶するROM(Read Only Memory)やHDD(Hard Disk Drive)、主として制御処理のための各種作業領域として使用されるRAM(Random Access Memory)等が含まれる。これらの要素は、互いにバスを介して接続されている。CPUが、ROMに記憶されたプログラムを実行し、入出力インターフェースを介して受信される命令や、RAMに展開されるデータを処理することで、トランザクション処理装置10における各部の機能を実現することができる。
図1に示すグループ生成部11は、アプリケーションにより実行される一または複数のトランザクションごとに、トランザクションで使用されるレコードを論理的にまとめることで、グループを生成する。より詳細には、以下のようにしてグループを生成する。
最初に、グループ生成部11は、アプリケーションからトランザクションに関する情報を受信する。続いて、グループ生成部11は、トランザクションに関する情報およびシステムカタログ18に記憶されている情報を参照し、対象トランザクションで使用される全てのレコードに共通するユニークキーを選定する。続いて、グループ生成部11は、選定したユニークキーの属性値別にレコードを論理的にまとめることで、グループを生成する。システムカタログ18には、KVS20に格納されているデータのメタ情報が記憶されている。KVS20は、単一レコードに対する操作のアトミック性と、単一レコードに対するCAS(Compare and Swap)命令とを備えるデータベースである。KVS20は、複数のサーバ装置に分散して構築される。
グループ生成部11は、生成したグループに関する情報と、受信したトランザクションに関する情報とを含むグループ情報を、グループ情報記憶部19に登録する。グループ情報記憶部19は、トランザクションに関する情報とグループに関する情報とを対応付けて記憶する。
グループに関する情報は、必ずしもグループに属する各レコードの値を含む必要はなく、例えば、ユニークキーの属性値と、グループを構成するテーブルのメタ情報とが含まれていればよい。ユニークキーの属性値とテーブルのメタ情報とが得られれば、KVS20から対象となるレコードを抽出することができるためである。
図2〜図7を参照して、グループ生成部11が生成するグループについて具体的に説明する。
ここでは、トランザクションとして、以下のトランザクション1とトランザクション2とを用いて説明する。トランザクション1は、「ユーザが新たに入札を行ったときに、商品テーブルおよび入札テーブルのデータを更新する」処理を実行する。トランザクション2は、「商品が売却されたときに、在庫数を更新する」処理を実行する。また、トランザクションで使用されるデータを格納するテーブルとして、図2に示す商品テーブルT1と、図3に示す入札テーブルT2と、図4に示す商品情報テーブルT3とを用いて説明する。
グループ生成部11は、トランザクション1に対応するグループを以下のように生成する。最初に、グループ生成部11は、トランザクション1で使用されるデータが、商品テーブルT1および入札テーブルT2に格納されているデータであることを特定する。続いて、グループ生成部11は、各データを含むレコードに共通するユニークキーとして、商品IDを選定する。続いて、グループ生成部11は、各レコードを商品IDの属性値別に論理的にまとめる。この結果、グループ生成部11は、図5(A)〜(C)に示す三つのグループG1〜G3を生成する。なお、トランザクション1は、三つのグループG1〜G3のいずれか一つのグループのみにアクセスし、同時に複数のグループにアクセスすることはない。
グループ生成部11は、トランザクション2に対応するグループを以下のように生成する。最初に、グループ生成部11は、トランザクション2で使用されるデータが、商品テーブルT1および商品情報テーブルT3に格納されているデータであることを特定する。続いて、グループ生成部11は、各データを含むレコードに共通するユニークキーとして、商品IDを選定する。続いて、グループ生成部11は、各レコードを商品IDの属性値別に論理的にまとめる。この結果、グループ生成部11は、図6(A)〜(C)に示す三つのグループG4〜G6を生成する。なお、トランザクション2は、三つのグループG4〜G6のいずれか一つのグループのみにアクセスし、同時に複数のグループにアクセスすることはない。
ここで、グループG1とグループG4、グループG2とグループG5、グループG3とグループG6には、それぞれ同一のレコードが含まれている。このような場合に、トランザクション1とトランザクション2とが同時に実行されると、データ更新時にデータの不整合が生じ得る。この不整合を回避するためには、トランザクション1とトランザクション2との双方で使用されるデータを同じグループにまとめる必要がある。
具体的に、グループ生成部11は、トランザクション1およびトランザクション2の双方に対応するグループとして、図7(A)〜(C)に示す三つのグループG7〜G9を生成する。つまり、グループ生成部11は、各グループ間でレコードが重複することがないように、商品IDの属性値別にグループを生成する。なお、トランザクション1およびトランザクション2は、三つのグループG7〜G9のいずれか一つのグループのみにアクセスし、同時に複数のグループにアクセスすることはない。
ここで、本実施形態におけるログは、同一グループに属する各レコードの最新の内容を保持し、実際のレコードとは別にKVS20に格納される。KVS20は、複数のサーバ装置に分散して構築されるが、一つのログは、その内容が複数のサーバ装置に分散して格納されるのではなく、いずれか一つのサーバ装置にまとめて格納される。つまり、グループ単位に生成されるログは、その内容の全てをまとめて物理的に同一の記憶領域内に格納される。
ログは、実際のレコードと同様に、キーと値とのペアで構成される。例えば、図5に示すグループG1に対応するログは、以下のように生成される。
WAL1 = (key, value) = (WAL_i1, [{i1,AAA,10,5,10000},{b1,i1,u3,9000},{b2,i1,u1,10000},version])
ここで、“WAL1”は、ログを一意に特定する識別コードである。“WAL1”の“key”を構成する“WAL_i1”は、WALのログであることを示す識別子に、ユニークキー(商品ID)の属性値である“i1”を付加して表したものである。“WAL1”の“value”を構成する“{i1,AAA,10,5,10000},{b1,i1,u3,9000},{b2,i1,u1,10000}”は、グループG1に含まれる各レコードの値である。“WAL1”の“value”を構成する“version”には、現在の“WAL1”のバージョンを示す値が格納される。ログを新たに生成したときに、“version”に“1”が格納される。ログを更新したときに、“version”に格納されている値がインクリメントされる。
同様にして、図5に示すグループG2およびG3に対応するログは、それぞれ以下のように生成される。
WAL2 = (key, value) = (WAL_i2, [{i2,BBB,3,7,8000},{b4,i2,u1,8000},version])
WAL3 = (key, value) = (WAL_i3, [{i3,CCC,5,3,3000},{b3,i3,u2,3000},{b5,i3,u3,2500},version])
図1に示すトランザクション処理部12は、アプリケーションから受信する処理要求にしたがって処理を実行する。処理要求には、例えば、クエリが含まれる。トランザクション処理部12は、グループ特定部121と、ログ管理部122とを含む。
グループ特定部121は、アプリケーションからクエリを受信した場合に、クエリに対応するトランザクションに基づいてグループ情報記憶部19を参照し、そのトランザクションに対応するグループを特定する。上記クエリに対応するトランザクションは、クエリによる一連の処理がどのトランザクションに属しているのかを特定することで得られる。
ログ管理部122は、グループ特定部121により特定されたグループのログを、get命令やCAS命令等のKVSコマンドを実行して管理する。以下に、具体的に説明する。
ログ管理部122は、トランザクション処理を開始するためのbegin命令をアプリケーションから受信した場合には、トランザクションで使用されるレコードのログを取得するためのget命令をKVS20に送信し、ログを取得する。ログ管理部122は、取得したログに含まれる“version”の値を一時的に記憶する。ここで、トランザクションで使用されるレコードのログがKVS20に存在しない場合に、ログ管理部122は、以下の処理を実行する。
最初に、ログ管理部122は、トランザクションで使用されるレコードを取得するためのget命令をKVS20に送信し、レコードを取得する。続いて、ログ管理部122は、取得したレコードに対応するログを生成するためのcreate命令をKVS20に送信し、KVS20にログを生成する。続いて、ログ管理部122は、トランザクションで使用されるレコードのログを取得するためのget命令をKVS20に送信し、ログを取得する。続いて、ログ管理部122は、取得したログに含まれる“version”の値を一時的に記憶する。
なお、KVS20にログを生成する際に、他のトランザクションによって既にログが生成されている場合には、ログの生成を失敗とし、他のトランザクションによって生成されたログを取得し直せばよい。
ログ管理部122は、クエリをアプリケーションから受信した場合には、KVS20から取得したログに含まれる各レコードの値を、クエリの内容に応じて更新する。ログ管理部122は、各レコードの更新が終了した後に、ログに含まれる“version”の値をインクリメントする。ログ管理部122は、更新処理の結果をアプリケーションに応答する。
ログ管理部122は、更新を確定するためのcommit命令をアプリケーションから受信した場合には、CAS命令を用いてKVS20のログを更新する。CAS命令による更新は、以下の手順で実行される。
最初に、ログ管理部122は、KVS20に記憶されているログの“version”の値と、上記一時的に記憶した“version”の値とを比較する。続いて、ログ管理部122は、比較した“version”の値が同じである場合に、KVS20のログを更新し、ログの書き込みを成功とする。一方、ログ管理部122は、比較した“version”の値が異なる場合には、KVS20のログを更新せずに、ログの書き込みを失敗とする。ログ管理部122は、CAS命令の結果をアプリケーションに応答する。
ログを更新する際にCAS命令を用いることで、以下の理由により、ログデータの一貫性を保持することができる。まず、比較した“version”の値が同じである場合には、他のトランザクションがそのログを更新していないことを意味する。したがって、この場合には、ログを更新してもデータの一貫性が保持されることになる。一方、比較した“version”の値が異なる場合には、そのトランザクションがレコードを更新している間に他のトランザクションがログを更新したことを意味する。したがって、この場合には、ログの更新を中止することでデータの一貫性が保持されることになる。
ログ管理部122は、トランザクション処理を終了するためのend命令をアプリケーションから受信した場合には、ログの内容をレコードに反映させるためのreflect命令をデータ更新部13に送信する。このreflect命令には、ログの“key”の値と、ログ管理部122がそのログを更新したときの“version”の値とが含まれる。
データ更新部13は、reflect命令を受信した場合に、CAS命令を用いてKVS20のレコードをKVS20のログの内容で更新するとともに、そのログをKVS20から削除する。より詳細には、以下のように更新する。
最初に、データ更新部13は、reflect命令に含まれる“key”の値に対応するログをKVS20から取得する。続いて、データ更新部13は、取得したログに含まれる“version”の値と、reflect命令に含まれる“version”の値とを比較する。続いて、データ更新部13は、比較した“version”の値が同じである場合には、ログに含まれる各レコードの値を、対応するKVS20の各レコードに反映して更新する。そして、データ更新部13は、そのログをKVS20から削除する。一方、データ更新部13は、比較した“version”の値が異なる場合には、ログの反映を実行しない。
レコードを更新する際にCAS命令を用いることで、以下の理由により、データの一貫性を保持することができる。まず、比較した“version”の値が同じである場合には、他のトランザクションがそのログを更新していないことを意味する。したがって、この場合には、そのログでレコードを更新してもデータの一貫性が保持されることになる。一方、比較した“version”の値が異なる場合には、そのトランザクションが終了してからレコードを更新するまでの間に、他のトランザクションがログを更新したことを意味する。したがって、この場合には、ログの反映を中止することでデータの一貫性が保持されることになる。この場合には、他のトランザクションの動作シーケンスでログの反映および削除を実行すればよい。
次に、図8を参照して、トランザクション処理装置10の動作について説明する。
システムが稼動する前に、アプリケーションからトランザクションに関する情報が入力されると、グループ生成部11は、各トランザクションで使用されるレコードをユニークキーの属性値別に論理的にまとめてグループを生成する(ステップS101)。
続いて、グループ生成部11は、グループに関する情報とトランザクションに関する情報とを含むグループ情報をグループ情報記憶部19に登録する(ステップS102)。
その後、システムが稼動した後に、トランザクション処理部12は、アプリケーションからクエリを受信する(ステップS103)。
続いて、グループ特定部121は、受信したクエリに対応するトランザクションに基づいて、グループ情報記憶部19を参照し、処理対象となるグループを特定する(ステップS104)。
続いて、ログ管理部122は、特定したグループに対応するログがKVS20に存在するか否かを判定する(ステップS105)。この判定がNOである場合(ステップS105;NO)に、ログ管理部122は、グループに対応するレコードをKVS20から取得し、取得したレコードでログを生成し、KVS20に書き込む(ステップS106)。そして、処理を後述するステップS107に移行する。
一方、上記ステップS105の判定でグループに対応するログがKVS20に存在すると判定された場合(ステップS105;YES)に、ログ管理部122は、そのログをKVS20から取得する(ステップS107)。
続いて、ログ管理部122は、取得したログの“version”の値を一時的に記憶し、ログに含まれる各レコードの値をクエリに応じて更新し、“version”の値をインクリメントしてからログをKVS20に書き込む(ステップS108)。
続いて、ログ管理部122は、ログの書き込みが成功したか否かを判定する(ステップS109)。この判定がNOである場合(ステップS109;NO)には、本動作を終了する。
一方、上記ステップS109の判定でログの書き込みが成功したと判定された場合(ステップS109;YES)に、データ更新部13は、ログの内容を実データであるKVS20のレコードに反映し(ステップS110)、そのログをKVS20から削除する。そして、本動作を終了する。
なお、この動作例では、説明の便宜上、グループ情報を生成して登録する処理(ステップS101〜ステップS102)を一連の動作に組み込んで説明している。しかしながら、グループ情報を生成して登録するのは、システムの稼働前に一回実行すれば足りる。したがって、実際の運用上は、システム稼働後に、上記ステップS103〜ステップS110までの各処理を一連の動作として繰り返し実行することとなる。
次に、図9を参照して、グループ情報を登録する際の動作について説明する。
最初に、アプリケーションがトランザクションに関する情報をグループ生成部11に送信する(ステップS201)。
続いて、グループ生成部11は、トランザクションに関する情報と、システムカタログ18に記憶されているデータのメタ情報とに基づいて、グループを生成する(ステップS202)。
続いて、グループ生成部11は、生成したグループに関する情報とトランザクションに関する情報とを含むグループ情報を、グループ情報記憶部19に登録する(ステップS203)。
続いて、グループ生成部11は、処理が成功したことを示す応答をアプリケーションに送信する(ステップS204)。
次に、図10〜図14を参照して、トランザクションがKVS20のデータを更新する際の各種動作例について説明する。これらの動作例では、実行されるトランザクションが、KVS20に格納されているRecord1とRecord2とを更新するトランザクションである場合について説明する。
まず、図10および図11を参照して、Record1およびRecord2のログが、既にKVS20に生成されている場合の動作例について説明する。
最初に、アプリケーションは、トランザクション処理を開始するために、begin命令をトランザクション処理部12に送信する(ステップS301)。
続いて、トランザクション処理部12は、get命令をKVS20に送信し(ステップS302)、KVS20からログを取得する(ステップS303)。
続いて、トランザクション処理部12は、取得したログに含まれる各レコードの値をクエリに応じてupdateする(ステップS304)。そして、トランザクション処理部12は、updateが成功したことを示す応答をアプリケーションに送信する(ステップS305)。
続いて、アプリケーションは、更新を確定するために、commit命令をトランザクション処理部12に送信する(ステップS306)。
続いて、トランザクション処理部12は、CAS命令を用いてログを更新する(ステップS307)。CAS命令が成功する(ステップS308)と、トランザクション処理部12は、更新が成功したことを示す応答をアプリケーションに送信する(ステップS309)。
続いて、アプリケーションは、トランザクション処理を終了するために、end命令をトランザクション処理部12に送信する(ステップS401)。
続いて、トランザクション処理部12は、ログの内容をレコードに反映させるために、reflect命令をデータ更新部13に送信する(ステップS402)。
続いて、データ更新部13は、get命令をKVS20に送信し(ステップS403)、KVS20からログを取得する(ステップS404)。
続いて、データ更新部13は、トランザクション処理部12から受信したreflect命令に含まれる“version”の値と、KVS20から取得したログに含まれる“version”の値とを比較する(ステップS405)。
続いて、比較した“version”の値が同じである場合に、データ更新部13は、Record1を更新するために、set命令をKVS20に送信し(ステップS406)、KVS20から成功したことを示す応答を受信する(ステップS407)。
続いて、データ更新部13は、Record2を更新するために、set命令をKVS20に送信し(ステップS408)、KVS20から成功したことを示す応答を受信する(ステップS409)。
続いて、データ更新部13は、ログを削除するために、delete命令をKVS20に送信し(ステップS410)、KVS20から成功したことを示す応答を受信する(ステップS411)。
続いて、データ更新部13は、レコードへの反映が成功したことを示す応答をトランザクション処理部12に送信する(ステップS412)。そして、トランザクション処理部12は、処理が成功したことを示す応答をアプリケーションに送信する(ステップS413)。
次に、図12および図11を参照して、Record1およびRecord2のログが、KVS20に生成されていない場合の動作例について説明する。
本動作例が、上述したRecord1およびRecord2のログが既にKVS20に生成されている場合の動作例(図10および図11)と異なるのは、図10に示すステップS301の処理とステップS302の処理との間に、図12に示すステップS502〜ステップS506までの処理が追加される点である。以下においては、主に追加した処理について説明する。
最初に、アプリケーションは、トランザクション処理を開始するために、begin命令をトランザクション処理部12に送信する(ステップS501)。
続いて、トランザクション処理部12は、get命令をKVS20に送信し(ステップS502)、KVS20からRecord1を取得する(ステップS503)。
続いて、トランザクション処理部12は、get命令をKVS20に送信し(ステップS504)、KVS20からRecord2を取得する(ステップS505)。
続いて、トランザクション処理部12は、Record1およびRecord2のログを生成するために、create命令をKVS20に送信する(ステップS506)。
続いて、トランザクション処理部12は、get命令をKVS20に送信し(ステップS507)、KVS20からログを取得する(ステップS508)。
続いて、トランザクション処理部12は、取得したログに含まれる各レコードの値をクエリに応じてupdateする(ステップS509)。そして、ログ管理部122は、updateが成功したことを示す応答をアプリケーションに送信する(ステップS510)。
これ以降のステップS511〜ステップS514までの各処理は、上述した図10のステップS306〜ステップS309までの各処理と同様であるため、説明を省略する。また、ステップS514に続いて行われる、図11のステップS401〜ステップS413までの各処理については、既に上記で説明した通りであるため、説明を省略する。
次に、図13を参照して、commit命令が失敗した場合の動作例について説明する。なお、ステップS601〜ステップS605までの各処理については、上述した図10に示すステップS301〜ステップS305までの各処理と同様であるため、説明を省略する。
ステップS605でupdateが成功すると、アプリケーションは、更新を確定するために、commit命令をトランザクション処理部12に送信する(ステップS606)。
続いて、トランザクション処理部12は、CAS命令を用いてログを更新する(ステップS607)。CAS命令が失敗する(ステップS608)と、トランザクション処理部12は、更新が失敗したことを示す応答をアプリケーションに送信する(ステップS609)。
次に、図14を参照して、ログの実データへの反映が失敗した場合の動作例について説明する。なお、ステップS701〜ステップS709までの各処理については、上述した図10に示すステップS301〜ステップS309までの各処理と同様であるため、説明を省略する。
ステップS709でcommitが成功すると、アプリケーションは、トランザクション処理を終了するために、end命令をトランザクション処理部12に送信する(ステップS710)。
続いて、トランザクション処理部12は、ログの内容をレコードに反映させるために、reflect命令をデータ更新部13に送信する(ステップS711)。
続いて、データ更新部13は、get命令をKVS20に送信し(ステップS712)、KVS20からログを取得する(ステップS713)。
続いて、データ更新部13は、トランザクション処理部12から受信したreflect命令に含まれる“version”の値と、KVS20から取得したログに含まれる“version”の値とを比較する(ステップS714)。
続いて、比較した“version”の値が異なる場合に、データ更新部13は、レコードへの反映が失敗したことを示す応答をトランザクション処理部12に送信する(ステップS715)。そして、トランザクション処理部12は、処理が失敗したことを示す応答をアプリケーションに送信する(ステップS716)。
上述したように、実施形態におけるトランザクション処理装置10によれば、トランザクションで使用されるレコードを、当該レコードに共通するユニークキーの属性値ごとに論理的にまとめてグループを生成することができる。また、実行されたトランザクションに対応する同一グループに属するレコードのログを、重複することなく物理的に同一の記憶領域内にまとめて格納して管理することができる。さらに、管理されているログの内容を、物理的に分散する記憶領域内に格納されているレコードに反映して実データを更新することができる。
それゆえに、KVSを用いてトランザクション処理を実行する場合であっても、複数のレコードに対するトランザクション処理を行うことができる。
なお、上述した実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
例えば、上述した実施形態におけるトランザクション処理装置10(図1参照)は、グループ生成部11およびシステムカタログ18を備えているが、これに限定されない。図15に示すように、トランザクション処理装置10は、トランザクション処理部12、データ更新部13およびグループ情報記憶部19を備えることとしてもよい。この場合には、外部装置で生成されたグループ情報が、グループ情報記憶部19に格納されていればよい。
また、上述した実施形態の一部または全部は、以下の付記のようにも記載され得るが、本発明は以下に限定されない。
(付記1) アプリケーションにより実行される一または複数のトランザクションで使用されるレコードを、当該レコードに共通するユニークキーの属性値別に論理的にまとめて生成したグループに関する情報と、前記トランザクションに関する情報とを対応付けて記憶するグループ情報記憶部と、前記アプリケーションから処理要求を受信した場合に、当該処理要求に対応する前記トランザクションに基づいて、前記グループ情報記憶部により記憶されている情報を参照し、当該トランザクションに対応する前記グループを特定するグループ特定部と、前記グループ特定部により特定された前記グループに含まれる前記レコードのログを、当該ログの内容の全てをまとめて物理的に同一の記憶領域内に格納して管理するログ管理部と、前記ログ管理部により管理される前記ログの内容を、前記ログに対応する前記レコードに反映させて、実データを更新するデータ更新部と、を備えることを特徴とするトランザクション処理装置。
(付記2) 前記ログおよび前記レコードは、物理的に複数の記憶領域から構成されるKVS(Key-Value Store)に格納される、ことを特徴とする請求項1記載のトランザクション処理装置。
(付記3) 前記ログ管理部は、前記ログを更新する際に、CAS(Compare and Swap)命令を用いて更新する、ことを特徴とする請求項2記載のトランザクション処理装置。
(付記4) 前記データ更新部は、前記レコードを更新する際に、CAS命令を用いて更新する、ことを特徴とする請求項3記載のトランザクション処理装置。
(付記5) アプリケーションにより実行される一または複数のトランザクションで使用されるレコードを、当該レコードに共通するユニークキーの属性値別に論理的にまとめて生成したグループに関する情報と、前記トランザクションに関する情報とを対応付けて記憶させるグループ情報記憶ステップと、前記アプリケーションから処理要求を受信した場合に、当該処理要求に対応する前記トランザクションに基づいて、前記グループ情報記憶ステップにおいて記憶された情報を参照し、当該トランザクションに対応する前記グループを特定するグループ特定ステップと、前記グループ特定ステップにおいて特定された前記グループに含まれる前記レコードのログを、当該ログの内容の全てをまとめて物理的に同一の記憶領域内に格納して管理するログ管理ステップと、前記ログ管理ステップにおいて管理される前記ログの内容を、前記ログに対応する前記レコードに反映させて、実データを更新するデータ更新ステップと、を含むことを特徴とするトランザクション処理方法。
(付記6) 請求項5に記載の各ステップをコンピュータに実行させるためのトランザクション処理プログラム。
10…トランザクション処理装置、11…グループ生成部、12…トランザクション処理部、13…データ更新部、18…システムカタログ、19…グループ情報記憶部、121…グループ特定部、122…ログ管理部。

Claims (6)

  1. アプリケーションにより実行される一または複数のトランザクションで使用されるレコードを、当該レコードに共通するユニークキーの属性値別に論理的にまとめて生成したグループに関する情報と、前記トランザクションに関する情報とを対応付けて記憶するグループ情報記憶部と、
    前記アプリケーションから処理要求を受信した場合に、当該処理要求に対応する前記トランザクションに基づいて、前記グループ情報記憶部により記憶されている情報を参照し、当該トランザクションに対応する前記グループを特定するグループ特定部と、
    前記グループ特定部により特定された前記グループに含まれる前記レコードのログを、当該ログの内容の全てをまとめて物理的に同一の記憶領域内に格納して管理するログ管理部と、
    前記ログ管理部により管理される前記ログの内容を、前記ログに対応する前記レコードに反映させて、実データを更新するデータ更新部と、
    を備えることを特徴とするトランザクション処理装置。
  2. 前記ログおよび前記レコードは、物理的に複数の記憶領域から構成されるKVS(Key-Value Store)に格納される、ことを特徴とする請求項1記載のトランザクション処理装置。
  3. 前記ログ管理部は、前記ログを更新する際に、CAS(Compare and Swap)命令を用いて更新する、ことを特徴とする請求項2記載のトランザクション処理装置。
  4. 前記データ更新部は、前記レコードを更新する際に、CAS命令を用いて更新する、ことを特徴とする請求項3記載のトランザクション処理装置。
  5. アプリケーションにより実行される一または複数のトランザクションで使用されるレコードを、当該レコードに共通するユニークキーの属性値別に論理的にまとめて生成したグループに関する情報と、前記トランザクションに関する情報とを対応付けて記憶させるグループ情報記憶ステップと、
    前記アプリケーションから処理要求を受信した場合に、当該処理要求に対応する前記トランザクションに基づいて、前記グループ情報記憶ステップにおいて記憶された情報を参照し、当該トランザクションに対応する前記グループを特定するグループ特定ステップと、
    前記グループ特定ステップにおいて特定された前記グループに含まれる前記レコードのログを、当該ログの内容の全てをまとめて物理的に同一の記憶領域内に格納して管理するログ管理ステップと、
    前記ログ管理ステップにおいて管理される前記ログの内容を、前記ログに対応する前記レコードに反映させて、実データを更新するデータ更新ステップと、
    を含むことを特徴とするトランザクション処理方法。
  6. 請求項5に記載の各ステップをコンピュータに実行させるためのトランザクション処理プログラム。
JP2011198730A 2011-05-06 2011-09-12 トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム Active JP5807777B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/102,532 2011-05-06
US13/102,532 US8832022B2 (en) 2011-05-06 2011-05-06 Transaction processing device, transaction processing method and transaction processing program

Publications (2)

Publication Number Publication Date
JP2012234509A true JP2012234509A (ja) 2012-11-29
JP5807777B2 JP5807777B2 (ja) 2015-11-10

Family

ID=47090946

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011198730A Active JP5807777B2 (ja) 2011-05-06 2011-09-12 トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム

Country Status (2)

Country Link
US (1) US8832022B2 (ja)
JP (1) JP5807777B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015191307A (ja) * 2014-03-27 2015-11-02 日本電気株式会社 トランザクションシステム
JP2017021576A (ja) * 2015-07-10 2017-01-26 日本電気株式会社 制御情報設定装置、制御情報設定方法、及び、制御情報設定プログラム
US9836361B2 (en) 2013-03-13 2017-12-05 Nec Corporation Data replicating system, data replicating method, node device, management device and computer readable medium

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150286671A1 (en) * 2012-10-29 2015-10-08 Nec Corporation Transaction system
US20150234884A1 (en) * 2012-11-08 2015-08-20 Sparkledb As System and Method Involving Resource Description Framework Distributed Database Management System and/or Related Aspects
WO2014117298A1 (en) 2013-01-31 2014-08-07 Hewlett-Packard Development Company, L.P. Event log system
JP6211949B2 (ja) * 2014-02-12 2017-10-11 株式会社東芝 データベース装置
CN105095306B (zh) * 2014-05-20 2019-04-09 阿里巴巴集团控股有限公司 基于关联对象进行操作的方法及装置
JP6662124B2 (ja) * 2016-03-14 2020-03-11 株式会社リコー 通信装置、履歴情報管理方法及び履歴情報管理プログラム
CN106250113A (zh) * 2016-07-18 2016-12-21 百富计算机技术(深圳)有限公司 一种应用开发平台
US11122120B2 (en) * 2019-05-28 2021-09-14 International Business Machines Corporation Object notification wherein compare and swap is performed

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010231323A (ja) * 2009-03-26 2010-10-14 Hitachi Ltd データ処理方法およびデータ処理システム
JP2010257182A (ja) * 2009-04-24 2010-11-11 Hitachi Ltd データ処理方法およびデータ処理システム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4507751A (en) * 1982-06-21 1985-03-26 International Business Machines Corporation Method and apparatus for logging journal data using a log write ahead data set
US8060879B2 (en) * 2006-05-30 2011-11-15 Oracle America, Inc. Predictive log synchronization
JP4385387B1 (ja) 2009-07-02 2009-12-16 修平 西山 属性付きキー・バリュー・ストアによるデータベース・システム
JP4392676B1 (ja) 2009-06-25 2010-01-06 修平 西山 キー・バリュー・ストアによるデータベース・キャッシュ装置
US8396932B2 (en) * 2010-04-07 2013-03-12 Apple Inc. Apparatus and method for efficiently managing data in a social networking service

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010231323A (ja) * 2009-03-26 2010-10-14 Hitachi Ltd データ処理方法およびデータ処理システム
JP2010257182A (ja) * 2009-04-24 2010-11-11 Hitachi Ltd データ処理方法およびデータ処理システム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9836361B2 (en) 2013-03-13 2017-12-05 Nec Corporation Data replicating system, data replicating method, node device, management device and computer readable medium
JP2015191307A (ja) * 2014-03-27 2015-11-02 日本電気株式会社 トランザクションシステム
US10007548B2 (en) 2014-03-27 2018-06-26 Nec Corporation Transaction system
JP2017021576A (ja) * 2015-07-10 2017-01-26 日本電気株式会社 制御情報設定装置、制御情報設定方法、及び、制御情報設定プログラム

Also Published As

Publication number Publication date
JP5807777B2 (ja) 2015-11-10
US8832022B2 (en) 2014-09-09
US20120284244A1 (en) 2012-11-08

Similar Documents

Publication Publication Date Title
JP5807777B2 (ja) トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム
KR102579190B1 (ko) 일관된 데이터베이스 스냅샷들을 이용한 분산 데이터베이스에서의 백업 및 복원
JP6553822B2 (ja) 分散システムにおける範囲の分割および移動
JP5387757B2 (ja) 並列データ処理システム、並列データ処理方法及びプログラム
JP5890071B2 (ja) 分散キーバリューストア
US10031935B1 (en) Customer-requested partitioning of journal-based storage systems
JP5411250B2 (ja) 冗長データ記憶システムへの指示に従ってのデータ配置
CN109952564A (zh) 数据库系统中测试数据的形成与操纵
KR100961739B1 (ko) 가상화를 이용한 원격 복제의 일관성 유지방법
JP6361223B2 (ja) トランザクションシステム
JP5721056B2 (ja) トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム
JP4988370B2 (ja) 結合セッション環境におけるセッションのクラスタのためのセッション情報の統合方法、システム、およびプログラム
JP2014191672A (ja) プログラムおよびバージョン管理方法
JP2015146201A (ja) マルチテナントストアで横断的ストア結合を行う方法及びシステム
WO2015070674A1 (zh) 一种操作数据的方法和系统
WO2016143095A1 (ja) 計算機システム及びトランザクション処理の管理方法
JP2016146101A (ja) 情報処理装置、情報処理システム及び制御プログラム
JP6293709B2 (ja) ストレージシステムおよびストレージシステム用プログラム
US20170270149A1 (en) Database systems with re-ordered replicas and methods of accessing and backing up databases
WO2007099636A1 (ja) ファイルシステム移行方法、ファイルシステム移行プログラム及びファイルシステム移行装置
US8825603B2 (en) Ordering volumes and tracks for data transfer based on usage characteristics
WO2012056734A1 (ja) データベースの管理方法
CN110109866A (zh) 一种文件系统目录的管理方法及设备
JP2018180688A (ja) 更新処理プログラム、装置、及び方法
JP2006031608A (ja) 計算機、ストレージシステム、計算機が行うファイル管理方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140806

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150601

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150729

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150826

R150 Certificate of patent or registration of utility model

Ref document number: 5807777

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150