(57)【特許請求の範囲】
【請求項１】
トランザクション処理の開始が要求されるたびに、前記トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーのうち、いずれか一つを代表キーに決定する代表キー決定部と、
前記整合性を保持する対象であることを識別するための整合対象情報を、前記レコード群の各レコードに対応するログのうち、前記代表キーに対応する代表ログ以外のログである従属ログに付加して更新するログ編集部と、
前記レコード群の各レコードに対する更新情報を、前記代表ログに書き込んで更新するログ更新部と、
前記代表ログに書き込まれた前記更新情報を、前記レコード群の各レコードに反映させて更新するレコード更新部と、
を備えることを特徴とするトランザクション処理装置。
【請求項２】
前記整合対象情報は、トランザクション処理中であることを識別するための処理中識別情報であり、
前記ログ編集部は、前記処理中識別情報を前記代表ログに付加して更新する、
ことを特徴とする請求項１記載のトランザクション処理装置。
【請求項３】
前記整合対象情報は、前記代表キーを特定するための代表キー識別情報であり、
前記ログ更新部は、前記代表キー決定部により前記代表キーが決定された場合に、前記代表ログに前記従属ログの内容を書き加えて更新する、
ことを特徴とする請求項１記載のトランザクション処理装置。
【請求項４】
前記代表キー決定部は、決定した前記代表ログに対して既に前記代表キー識別情報が付加されている場合には、既に付加されている前記代表キー識別情報で特定されるキーを、前記代表キーに決定し直す、
ことを特徴とする請求項３記載のトランザクション処理装置。
【請求項５】
前記ログ更新部は、前記従属ログに対して既に前記代表キー識別情報が付加されている場合には、既に付加されている前記代表キー識別情報に対応するログの内容を前記従属ログの内容として、前記代表ログに書き加えて更新する、
ことを特徴とする請求項３または４記載のトランザクション処理装置。
【請求項６】
前記ログおよび前記レコードは、物理的に複数の記憶領域から構成されるＫＶＳ（Key-Value Store）に格納される、ことを特徴とする請求項１〜５のいずれか１項に記載のトランザクション処理装置。
【請求項７】
前記ログ編集部、前記ログ更新部および前記レコード更新部は、ＣＡＳ（Compare and Swap）命令を用いて前記ＫＶＳの前記ログを更新する、ことを特徴とする請求項６記載のトランザクション処理装置。
【請求項８】
トランザクション処理の開始が要求されるたびに、前記トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーのうち、いずれか一つを代表キーに決定する代表キー決定ステップと、
前記整合性を保持する対象であることを識別するための整合対象情報を、前記レコード群の各レコードに対応するログのうち、前記代表キーに対応する代表ログ以外のログである従属ログに付加して更新するログ編集ステップと、
前記レコード群の各レコードに対する更新情報を、前記代表ログに書き込んで更新するログ更新ステップと、
前記代表ログに書き込まれた前記更新情報を、前記レコード群の各レコードに反映させて更新するレコード更新ステップと、
を含むことを特徴とするトランザクション処理方法。
【請求項９】
請求項８に記載の各ステップをコンピュータに実行させるためのトランザクション処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラムに関する。
【背景技術】
【０００２】
近年、スケーラブルなＷｅｂアプリケーションの実行基盤として、データセンター内の多数のコンピュータを用いる、いわゆるクラウドが注目されている。このクラウドのインフラストラクチャの一つとして、Ｋｅｙ−Ｖａｌｕｅ Ｓｔｏｒｅ(以下、「ＫＶＳ」と記載する)が知られている。ＫＶＳは、キーと値とのペアで構成されるレコードを管理するデータベースである。下記特許文献１には、ＫＶＳを有するコンピュータシステムが開示されている。このコンピュータシステムでは、ＫＶＳを、サーバにあるデータベースのデータをキャッシュするためのキャッシュ装置として用いている。下記特許文献２には、ＫＶＳを有するデータベースシステムが開示されている。このデータベースシステムでは、ＫＶＳのデータ間に属性関係を持たせてデータを結合する仕組みが開示されている。下記非特許文献１には、ＫＶＳへのアクセス権を管理する管理ノードを設けるトランザクション処理システムが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−８４５１号公報
【特許文献２】特開２０１１−１３９２３号公報
【非特許文献】
【０００４】
【非特許文献１】Sudipto Das，Divyakant Agrawal and Amr El Abbadi.  G-Store A Scalable Data Store for Transactional Multi Key Access in the Cloud.  In Socc'10, 2010
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ＫＶＳでは、単一のレコードに対するデータ操作についてはアトミック性がサポートされている。したがって、ＫＶＳを用いてトランザクション処理を実行する場合に、アトミック性を担保しようとすると、単一のレコードごとにトランザクション処理を実行することになるため、処理効率が低下してしまう。また、上記非特許文献１には、複数のレコード群に対するアクセス権を管理する方法が開示されているが、この方法では、管理ノードをさらに設けなければならない上、トランザクション処理を行う前段階の処理として、アクセス権を管理ノードに集約するための処理を管理ノードと他のノードとの間で行う必要があり、構成が複雑になる。
【０００６】
本発明は、上述した課題を解決するためになされたものであり、キーと値とのペアで構成されるレコードを管理する環境下でトランザクション処理を実行する場合であっても、簡易な構成で、複数のレコードに対するトランザクション処理を行うことができるトランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラムを提供することを目的の一例とする。
【課題を解決するための手段】
【０００７】
本発明の一側面であるトランザクション処理装置は、トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーのうち、いずれか一つを代表キーに決定する代表キー決定部と、前記整合性を保持する対象であることを識別するための整合対象情報を、前記レコード群の各レコードに対応するログのうち、前記代表キーに対応する代表ログ以外のログである従属ログに付加して更新するログ編集部と、前記レコード群の各レコードに対する更新情報を、前記代表ログに書き込んで更新するログ更新部と、前記代表ログに書き込まれた前記更新情報を、前記レコード群の各レコードに反映させて更新するレコード更新部と、を備える。
【０００８】
本発明の一側面であるトランザクション処理方法は、トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーのうち、いずれか一つを代表キーに決定する代表キー決定ステップと、前記整合性を保持する対象であることを識別するための整合対象情報を、前記レコード群の各レコードに対応するログのうち、前記代表キーに対応する代表ログ以外のログである従属ログに付加して更新するログ編集ステップと、前記レコード群の各レコードに対する更新情報を、前記代表ログに書き込んで更新するログ更新ステップと、前記代表ログに書き込まれた前記更新情報を、前記レコード群の各レコードに反映させて更新するレコード更新ステップと、を含む。
【０００９】
本発明の一側面であるトランザクション処理プログラムは、上記トランザクション処理方法に含まれる各ステップをコンピュータに実行させる。
【発明の効果】
【００１０】
本発明によれば、キーと値とのペアで構成されるレコードを管理する環境下でトランザクション処理を実行する場合であっても、簡易な構成で、複数のレコードに対するトランザクション処理を行うことができる。
【図面の簡単な説明】
【００１１】
【図１】第１実施形態におけるトランザクション処理装置の構成を例示する図である。
【図２】第１実施形態におけるトランザクション処理装置の動作を説明するためのフローチャートである。
【図３】第１実施形態におけるトランザクション処理装置の動作を説明するためのシーケンスチャートである。
【図４】第１実施形態におけるトランザクション開始処理の手順を説明するためのフローチャートである。
【図５】変形例におけるトランザクション処理装置の動作を説明するためのシーケンスチャートである。
【図６】変形例におけるトランザクション開始処理の手順を説明するためのフローチャートである。
【図７】第２実施形態におけるトランザクション処理装置の動作を説明するためのシーケンスチャートである。
【図８】第２実施形態におけるトランザクション開始処理の手順を説明するためのフローチャートである。
【図９】第２実施形態におけるトランザクション開始処理の手順を説明するためのフローチャートである。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して、本発明に係るトランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラムの好適な実施形態について説明する。
【００１３】
実施形態を説明する前に、ＷＡＬ（Write Ahead Logging）について説明する。ＷＡＬは、一般的なリレーショナルデータベースシステムにおけるトランザクション処理手法の一つであり、データベースに対してデータを変更する前に、変更内容をログ（トランザクションログ）に書き出す手法である。ＷＡＬは、アトミック性を確保して実行され、ログを永続的な記憶装置に書き込むという特徴を有する。このようなＷＡＬをトランザクション処理に採用することで、トランザクションのＡＣＩＤ（Atomicity Consistency Isolation Durability）特性のうち、“Ａ（Atomicity）”と“Ｄ（Durability）”とを実現できる。
【００１４】
ＷＡＬを採用するトランザクション処理では、２種類のデータを更新することになる。一つはログの更新であり、もう一つは実データの更新である。これら２種類のデータは、永続的な記憶装置に書き込まれるタイミングが異なる。ログは、トランザクションのコミット時に書き込まれ、実データは、チェックポイント時に書き込まれる。実データをチェックポイント時に書き込むことで、永続的な記憶装置として一般的に用いられる低速なハードディスクへのアクセス回数を減らすことができる。
【００１５】
本願発明は、このようなＷＡＬを、ＫＶＳを用いてトランザクション処理を行う環境に採用し、以下に記載する各種の仕組みを加えることで、複数のレコードに対するトランザクション処理を可能とした。以下に、このような特徴を有する本願発明の実施形態について説明する。
【００１６】
[第１実施形態]
まず、図１を参照して、第１実施形態におけるトランザクション処理装置の機能構成について説明する。トランザクション処理装置１０は、機能的には、例えば、トランザクション処理部１１と、レコード更新部１２とを有する。ＫＶＳ２０は、単一レコードに対する操作のアトミック性と、単一レコードに対するＣＡＳ（Compare and Swap）命令とを備えるデータベースである。ＫＶＳ２０は、キーと値とのペアで構成されるレコードを管理し、複数のサーバ装置に分散して構築される。
【００１７】
本実施形態におけるログは、実際のレコードと同様に、キーと値とのペアで構成される。ログは、各レコードの最新の内容を保持し、実際のレコードとは別にＫＶＳ２０に格納される。例えば、ＫＶＳ２０に、レコードとして、（ｋｅｙ， ｖａｌｕｅ） ＝ （ｋｅｙ１， １０）が格納されており、このレコードに対応するログとして、（ｋｅｙ， ｖａｌｕｅ） ＝ （ＷＡＬ#ｋｅｙ１， ２０）が格納されている場合には、“ｋｅｙ１”の最新の内容は、“２０”となる。
【００１８】
ログのキー（ｋｅｙ）には、例えば、ＷＡＬのログであることを示す識別子“ＷＡＬ#”に、そのログに対応するレコードのキー“ｋｅｙ１”の属性値を付加したデータが格納される。ログの値（ｖａｌｕｅ）には、例えば、そのログに対応するレコードの値と、“ｖｅｒｓｉｏｎ”とが格納される。“ｖｅｒｓｉｏｎ”には、現在のログのバージョンを示す値が格納される。ログを新たに生成したときには、“ｖｅｒｓｉｏｎ”に“１”が格納され、ログを更新したときには、“ｖｅｒｓｉｏｎ”に格納されている値がインクリメントされる。
【００１９】
また、ログが後述する従属ログである場合には、ログの値（ｖａｌｕｅ）に、後述する処理中識別情報がさらに格納される。
【００２０】
ＫＶＳ２０は、複数のサーバ装置に分散して構築されるが、一つのログは、その内容が複数のサーバ装置に分散して格納されるのではなく、いずれか一つのサーバ装置にまとめて格納される。つまり、一つのログは、その内容の全てが物理的に同一の記憶領域内にまとめて格納される。
【００２１】
ここで、トランザクション処理装置１０は、物理的には、例えば、ＣＰＵ（Central Processing Unit）と、記憶装置と、入出力インターフェースとを含んで構成される。記憶装置には、例えば、ＣＰＵで処理されるプログラムおよびデータを記憶するＲＯＭ（Read Only Memory）やＨＤＤ（Hard Disk Drive）、主として制御処理のための各種作業領域として使用されるＲＡＭ（Random Access Memory）等が含まれる。これらの要素は、互いにバスを介して接続されている。ＣＰＵが、ＲＯＭに記憶されたプログラムを実行し、入出力インターフェースを介して受信される命令や、ＲＡＭに展開されるデータを処理することで、トランザクション処理装置１０における各部の機能を実現することができる。
【００２２】
図１に示すトランザクション処理部１１は、アプリケーションから受信する処理要求にしたがって処理を実行する。処理要求には、例えば、クエリが含まれる。トランザクション処理部１１は、代表キー決定部１１１と、ログ編集部１１２と、ログ更新部１１３とを含む。
【００２３】
代表キー決定部１１１は、トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーのうち、いずれか一つを代表キーに決定する。代表キーを決定する方法として、例えば、最初に指定したキーを代表キーに決定する方法や、辞書的に最も若いキーを代表キーに決定する方法、ランダムに選択したキーを代表キーに決定する方法等を採用することができる。
【００２４】
代表キー決定部１１１は、代表キーのレコードに対応するログを代表ログとする。代表キー決定部１１１は、上記レコード群の各レコードに対応するログのうち、代表ログ以外のログを従属ログとする。
【００２５】
ログ編集部１１２は、代表ログおよび従属ログをＫＶＳ２０から取得する。ログ編集部１１２は、トランザクション処理中であることを識別するための処理中識別情報を、ＫＶＳ２０から取得した従属ログに付加し、ＣＡＳ命令を用いてＫＶＳ２０の従属ログを更新する。なお、従属ログに付加する情報は、処理中識別情報には限定されず、整合性を保持する対象であることを識別するための情報（整合対象情報）であればよい。
【００２６】
ここで、ＣＡＳ命令によるログの更新は、例えば以下の手順で実行することができる。
【００２７】
最初に、ＫＶＳ２０からログを取得した時に、ログの“ｖｅｒｓｉｏｎ”の値を一時的に記憶する。続いて、ＫＶＳ２０のログを更新する時に、ＫＶＳ２０に記憶されているログの“ｖｅｒｓｉｏｎ”の値と、上記一時的に記憶した“ｖｅｒｓｉｏｎ”の値とを比較する。続いて、比較した“ｖｅｒｓｉｏｎ”の値が同じである場合に、ＫＶＳ２０のログを更新し、ログの更新を成功とする。一方、比較した“ｖｅｒｓｉｏｎ”の値が異なる場合には、ＫＶＳ２０のログを更新せずに、ログの更新を失敗とする。
【００２８】
ログを更新する際にＣＡＳ命令を用いることで、以下の理由により、ログデータの一貫性を保持することができる。まず、比較した“ｖｅｒｓｉｏｎ”の値が同じである場合には、他のトランザクションがＫＶＳ２０のログを更新していないことを意味する。したがって、この場合には、ＫＶＳ２０のログを更新してもデータの一貫性が保持されることになる。一方、比較した“ｖｅｒｓｉｏｎ”の値が異なる場合には、そのトランザクションが処理をしている間に他のトランザクションがＫＶＳ２０のログを更新したことを意味する。したがって、この場合には、ＫＶＳ２０のログの更新を中止することでデータの一貫性が保持されることになる。
【００２９】
ログ編集部１１２は、ＫＶＳ２０からログを取得する際に、ログが存在しない場合には、以下のように処理する。
【００３０】
最初に、トランザクションの対象となるレコードを、ｇｅｔ命令を用いてＫＶＳ２０から取得する。続いて、ｃｒｅａｔｅ命令を用いてＫＶＳ２０にログを生成する。続いて、上記取得したレコードの複製を、上記生成したログに、ｓｅｔ命令またはＣＡＳ命令を用いて格納する。なお、ログをＫＶＳ２０に生成するタイミングは、任意に設定することができる。例えば、ＫＶＳ２０にレコードを生成する際に、そのレコードのログをＫＶＳ２０に生成することとしてもよい。ログをＫＶＳ２０に生成する際には、ｓｅｔ命令またはＣＡＳ命令を用いることができる。
【００３１】
ログ更新部１１３は、ＫＶＳ２０から取得した代表ログおよび従属ログに含まれるデータ（各レコードの値）をクエリに応じて更新（ｕｐｄａｔｅ）し、その更新後の内容を代表ログに書き込む。ログ更新部１１３は、代表ログに書き込んだ更新後の内容で、ＫＶＳ２０の代表ログを更新する。ＫＶＳ２０の代表ログを更新する際には、ＣＡＳ命令を用いる。
【００３２】
レコード更新部１２は、トランザクション処理が終了した後に、ＫＶＳ２０から代表ログを取得し、代表ログに書き込まれた更新情報に基づいて、レコード群に含まれるＫＶＳ２０の各レコードを更新する。レコード更新部１２は、ＫＶＳ２０の各ログの内容を、更新後の最新の各レコードの内容で書き換え更新する。ＫＶＳ２０の各ログを書き換え更新する際には、ＣＡＳ命令を用いる。各ログを書き換え更新することで、各ログから処理中識別情報を削除することができる。
【００３３】
なお、各ログから処理中識別情報を削除する方法は、ＣＡＳ命令を用いてＫＶＳ２０のログを更新することには限定されず、例えば、ｄｅｌｅｔｅ命令を用いてログをＫＶＳ２０から削除することとしてもよい。また、レコード更新部１２による更新処理は、トランザクションが終了した後の任意のタイミングで実行することができる。
【００３４】
次に、図２および図３を参照して、第１実施形態におけるトランザクション処理装置１０の動作について説明する。本動作例では、アプリケーションがＲｅｃｏｒｄ１およびＲｅｃｏｒｄ２に整合性を要求する場合について説明する。また、Ｒｅｃｏｒｄ１およびＲｅｃｏｒｄ２に対応するログを、それぞれログ１およびログ２とする。また、Ｒｅｃｏｒｄ１およびＲｅｃｏｒｄ２のキーをそれぞれ、ｋｅｙ１およびｋｅｙ２とする。
【００３５】
最初に、アプリケーションが、トランザクション処理部１１に、ｂｅｇｉｎ命令を送信する（図３ステップＳ２０１）と、トランザクション処理部１１は、トランザクション開始処理を実行する（図２ステップＳ１０１）。
【００３６】
ここで、図４（図３も適宜参照）を参照して、上記ステップＳ１０１で実行されるトランザクション開始処理の内容を詳細に説明する。
【００３７】
最初に、トランザクション処理部１１の代表キー決定部１１１は、トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーの中から、代表キーを決定する（図４ステップＳ３０１）。ここでは、ｋｅｙ１が代表キーに決定されたこととする。
【００３８】
続いて、トランザクション処理部１１のログ編集部１１２は、代表ログを取得するためのｇｅｔ命令をＫＶＳ２０に送信し（図３ステップＳ２０２）、代表ログであるログ１をＫＶＳ２０から取得する（図４ステップＳ３０２）。
【００３９】
続いて、トランザクション処理部１１のログ編集部１１２は、取得した代表ログがロック中であるか否かを判定する（図４ステップＳ３０３）。ログがロック中であるか否かは、ログに処理中識別情報が書き込まれているか否かで判定する。つまり、ログに処理中識別情報が書き込まれている場合には、ロック中であり、ログに処理中識別情報が書き込まれていない場合には、ロック中ではないと判定する。代表ログに処理中識別情報が書き込まれている場合としては、その代表ログが既に他のレコード群の従属ログになっている場合等が該当する。
【００４０】
上記ステップＳ３０３の判定で代表ログがロック中であると判定された場合（ステップＳ３０３；ＹＥＳ）に、トランザクション処理部１１は、トランザクション開始処理の失敗を通知し（図４ステップＳ３１０）、トランザクション開始処理を終了する。なお、この場合、トランザクション開始処理を終了させずに、所定時間待機した後に、上記ステップＳ３０２に処理を移行し、ＫＶＳ２０から代表ログを取得するステップから再開してもよい。
【００４１】
一方、上記ステップＳ３０３の判定で代表ログがロック中ではないと判定された場合（ステップＳ３０３；ＮＯ）に、トランザクション処理部１１のログ編集部１１２は、未取得の従属ログが存在するか否かを判定する（図４ステップＳ３０４）。この判定がＮＯである場合（ステップＳ３０４；ＮＯ）に、トランザクション処理部１１は、トランザクション開始処理の成功を通知し（図４ステップＳ３１１）、トランザクション開始処理を終了する。
【００４２】
一方、上記ステップＳ３０４の判定で未取得の従属ログが存在すると判定された場合（ステップＳ３０４；ＹＥＳ）に、トランザクション処理部１１のログ編集部１１２は、従属ログを取得するためのｇｅｔ命令をＫＶＳ２０に送信し（図３ステップＳ２０３）、従属ログであるログ２をＫＶＳ２０から取得する（図４ステップＳ３０５）。
【００４３】
続いて、トランザクション処理部１１のログ編集部１１２は、取得した従属ログがロック中であるか否かを判定する（図４ステップＳ３０６）。この判定がＹＥＳである場合（ステップＳ３０６；ＹＥＳ）には、処理を後述するステップＳ３０９に移行する。
【００４４】
一方、上記ステップＳ３０６の判定で従属ログがロック中ではないと判定された場合（ステップＳ３０６；ＮＯ）に、トランザクション処理部１１のログ編集部１１２は、取得した従属ログに処理中識別情報を付加し、ＣＡＳ命令を用いてＫＶＳ２０の従属ログを更新する（図４ステップＳ３０７、図３ステップＳ２０４）。
【００４５】
続いて、トランザクション処理部１１のログ編集部１１２は、上記ステップＳ３０７の更新が成功したか否かを判定する（図４ステップＳ３０８）。この判定がＹＥＳである場合（ステップＳ３０８；ＹＥＳ）には、処理を上述したステップＳ３０４に移行する。
【００４６】
一方、上記ステップＳ３０８の判定で更新が失敗したと判定された場合（ステップＳ３０８；ＮＯ）に、トランザクション処理部１１のログ編集部１１２は、上記ステップＳ３０７で既に更新した従属ログがあれば、その従属ログを元の状態に戻し（図４ステップＳ３０９）、トランザクション開始処理の失敗を通知する（図４ステップＳ３１０）。そして、トランザクション開始処理を終了する。
【００４７】
図４の説明から図２および図３の説明に戻る。図２のステップＳ１０１でのトランザクション開始処理が終了すると、アプリケーションは、トランザクション開始処理が成功したか否かを判定する（図２ステップＳ１０２）。この判定がＮＯである場合（ステップＳ１０２；ＮＯ）には、本動作を終了する。
【００４８】
一方、上記ステップＳ１０２の判定でトランザクション開始処理が成功したと判定された場合（ステップＳ１０２；ＹＥＳ）に、トランザクション処理部１１のログ更新部１１３は、ＫＶＳ２０から取得した各ログに含まれるデータをクエリに応じて更新し、その更新後の内容を代表ログに書き込む（図２ステップＳ１０３）。
【００４９】
続いて、アプリケーションおよびトランザクション処理部１１は、コミット処理を実行する（図２ステップＳ１０４）。コミット処理は、例えば以下の手順で行う（図３参照）。
【００５０】
最初に、アプリケーションは、更新を確定するために、ｃｏｍｍｉｔ命令をトランザクション処理部１１に送信する（図３ステップＳ２０６）。続いて、トランザクション処理部１１のログ更新部１１３は、ＣＡＳ命令を用いて代表ログであるＫＶＳ２０のログ１を更新する（図３ステップＳ２０７）。ＣＡＳ命令が成功すると、トランザクション処理部１１のログ更新部１１３は、更新が成功したことを示す応答をアプリケーションに送信する（図３ステップＳ２０８）。
【００５１】
なお、ＣＡＳ命令が失敗した場合には、ログ１が他のトランザクションによって書き換えられていたことを意味するため、トランザクション処理部１１のログ更新部１１３は、更新が失敗したことを示す応答をアプリケーションに送信する。
【００５２】
図２の説明に戻る。上記ステップＳ１０４のコミット処理に続いて、アプリケーションおよびトランザクション処理部１１は、トランザクション終了処理を実行し（図２ステップＳ１０５）、本動作を終了する。トランザクション終了処理は、例えば以下の手順で行う（図３参照）。
【００５３】
最初に、アプリケーションは、トランザクション処理を終了するために、ｅｎｄ命令をトランザクション処理部１１に送信する（図３ステップＳ２０９）。続いて、トランザクション処理部１１は、代表ログの内容を各レコードに反映させるために、ｒｅｆｌｅｃｔ命令をレコード更新部１２に送信する（図３ステップＳ２１０）。続いて、レコード更新部１２は、ｇｅｔ命令をＫＶＳ２０に送信し（図３ステップＳ２１１）、ＫＶＳ２０からログ１を取得する。
【００５４】
続いて、レコード更新部１２は、Ｒｅｃｏｒｄ１を更新するために、ｓｅｔ命令をＫＶＳ２０に送信し（図３ステップＳ２１２）、Ｒｅｃｏｒｄ２を更新するために、ｓｅｔ命令をＫＶＳ２０に送信する（図３ステップＳ２１３）。続いて、レコード更新部１２は、更新後のＲｅｃｏｒｄ１の内容でログ１を書き換えるために、ＣＡＳ命令を用いてＫＶＳ２０のログ１を更新する（図３ステップＳ２１４）。続いて、レコード更新部１２は、更新後のＲｅｃｏｒｄ２の内容でログ２を書き換えるために、ＣＡＳ命令を用いてＫＶＳ２０のログ２を更新する（図３ステップＳ２１５）。
【００５５】
上述したように、第１実施形態におけるトランザクション処理装置１０によれば、トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーから代表キーを決定することができ、代表キーに対応する代表ログ以外の従属ログに対して、ＣＡＳ命令を用いて処理中識別情報を付加することができる。これにより、他のトランザクションによる従属ログへのアクセスを制限することが可能となる。
【００５６】
また、第１実施形態におけるトランザクション処理装置１０によれば、レコード群の各レコードに対する更新情報を、ＫＶＳ２０の代表ログにＣＡＳ命令を用いて書き込むことができ、代表ログに書き込んだ更新情報を、ＫＶＳ２０にあるレコード群の各レコードにＣＡＳ命令を用いて書き込むことができる。これにより、レコード群の各レコードに対する更新情報を、単一の代表ログで管理して各レコードに反映することができるため、複数のレコードに対して整合性を保持したままデータ更新することが可能となる。
【００５７】
それゆえに、第１実施形態におけるトランザクション処理装置１０によれば、ＫＶＳを用いてトランザクション処理を実行する場合であっても、簡易な構成で、複数のレコードに対するトランザクション処理を行うことができる。
【００５８】
[第１実施形態の変形例]
なお、上述した第１実施形態におけるトランザクション処理装置１０では、従属ログに処理中識別情報を付加して他のトランザクション処理を排他している（悲観的並行性制御）が、代表ログには処理中識別情報を付加せず、他のトランザクション処理を排他していない（楽観的並行性制御）。したがって、例えば、図３のステップＳ２０７のＣＡＳ命令が失敗する可能性がある。そこで、代表ログにも処理中識別情報を付加して他のトランザクション処理を排他することとしてもよい。
【００５９】
この変形例におけるトランザクション処理装置１０の動作について、図５および図６を参照して説明する。図５は、上述した図３に対応するシーケンスチャートである。図５が図３と異なるのは、図３のステップＳ２０２とステップＳ２０３との間に、ステップＳ４０１が追加されている点である。図６は、上述した図４に対応するフローチャートである。図６が図４と異なるのは、図４のステップＳ３０３とステップＳ３０４との間に、ステップＳ５０１およびステップＳ５０２が追加されている点である。以下においては、上述した第１実施形態と相違する点について説明する。
【００６０】
図６に示すトランザクション開始処理におけるステップＳ３０３の判定で代表ログがロック中ではないと判定された場合（ステップＳ３０３；ＮＯ）に、トランザクション処理部１１のログ編集部１１２は、取得した代表ログに処理中識別情報を付加し、ＣＡＳ命令を用いてＫＶＳ２０の代表ログを更新する（図６ステップＳ５０１、図５ステップＳ４０１）。
【００６１】
続いて、トランザクション処理部１１のログ編集部１１２は、上記ステップＳ５０１の更新が成功したか否かを判定する（図６ステップＳ５０２）。この判定がＹＥＳである場合（ステップＳ５０２；ＹＥＳ）には、処理を上述したステップＳ３０４に移行する。
【００６２】
一方、上記ステップＳ５０２の判定で更新が失敗したと判定された場合（ステップＳ５０２；ＮＯ）に、トランザクション処理部１１のログ編集部１１２は、トランザクション開始処理の失敗を通知する（図６ステップＳ３１０）。そして、トランザクション開始処理を終了する。
【００６３】
この変形例によれば、代表ログに対してもトランザクション処理中であることを識別するための処理中識別情報を、ＣＡＳ命令を用いて付加することができる。これにより、他のトランザクションによる代表ログおよび従属ログへのアクセスを制限することが可能となる。
【００６４】
[第２実施形態]
本発明の第２実施形態について説明する。第２実施形態におけるトランザクション処理装置１０の構成は、図１に示す第１実施形態におけるトランザクション処理装置１０の構成と同様である。上述した第１実施形態におけるトランザクション処理装置１０は、トランザクション処理中の従属ログに処理中識別情報を付加して、他のトランザクション処理を排他する悲観的並行性制御を採用している。これに対して、第２実施形態におけるトランザクション処理装置１０は、楽観的並行性制御を採用する点で、第１実施形態におけるトランザクション処理装置１０と相違する。
【００６５】
具体的に、第２実施形態では、トランザクション処理中の従属ログに代表キーを特定するための代表キー識別情報を付加して、他のトランザクションがログをたどって処理を継続できるようにし、先にコミット処理を完了させたトランザクションの結果がＫＶＳ２０に反映され、後からコミット処理を行ったトランザクションが失敗するという楽観的並行性制御を採用している。これに伴い、トランザクション処理部１１に含まれる代表キー決定部１１１、ログ編集部１１２、およびログ更新部１１３の機能の一部が相違する。以下においては、第１実施形態との相違点に主眼を置いて説明する。
【００６６】
図２および図７を参照して、第２実施形態におけるトランザクション処理装置１０の動作について説明する。本動作例では、上述した第１実施形態の動作例と同様に、アプリケーションがＲｅｃｏｒｄ１およびＲｅｃｏｒｄ２に整合性を要求する場合について説明する。また、Ｒｅｃｏｒｄ１およびＲｅｃｏｒｄ２に対応するログを、それぞれログ１およびログ２とする。また、Ｒｅｃｏｒｄ１およびＲｅｃｏｒｄ２のキーをそれぞれ、ｋｅｙ１およびｋｅｙ２とする。
【００６７】
図７は、上述した第１実施形態における図３に対応するシーケンスチャートである。図７が図３と異なるのは、図３のステップＳ２０４に替えて、ステップＳ６０１およびステップＳ６０２が追加されている点である。第２実施形態のトランザクション処理装置１０では、図２に示す各処理のうち、ステップＳ１０１におけるトランザクション開始処理の内容が、上述した第１実施形態のトランザクション処理装置１０と相違する。したがって、以下においては、第２実施形態のトランザクション開始処理について、図８および図９を参照して説明する。
【００６８】
最初に、トランザクション処理部１１の代表キー決定部１１１は、トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーの中から、代表キーを決定する（図８ステップＳ７０１）。ここでは、ｋｅｙ１が代表キーに決定されたこととする。
【００６９】
続いて、トランザクション処理部１１のログ編集部１１２は、代表ログを取得するためのｇｅｔ命令をＫＶＳ２０に送信し（図７ステップＳ２０２）、代表ログであるログ１をＫＶＳ２０から取得する（図８テップＳ７０２）。
【００７０】
続いて、トランザクション処理部１１のログ編集部１１２は、取得した代表ログに、既に代表キー識別情報が書き込まれているか否かを判定する（図８ステップＳ７０３）。代表ログに代表キー識別情報が書き込まれている場合としては、その代表ログが既に他のレコード群の従属ログになっている場合等が該当する。
【００７１】
上記ステップＳ７０３の判定で代表ログに代表キー識別情報が書き込まれていると判定された場合（ステップＳ７０３；ＹＥＳ）には、処理を上記ステップＳ７０１に移行する。そして、トランザクション処理部１１の代表キー決定部１１１は、書き込まれている代表キー識別情報に対応する代表キーを、新たな代表キーとして決定し直す。この代表キーをたどる処理は、取得した代表ログに代表キー識別情報が書き込まれている間、繰り返される。これにより、最上位の代表キーを代表キーとして選定することができる。
【００７２】
一方、上記ステップＳ７０３の判定で代表ログに代表キー識別情報が書き込まれていないと判定された場合（ステップＳ７０３；ＮＯ）に、トランザクション処理部１１のログ編集部１１２は、未取得の従属ログが存在するか否かを判定する（図８ステップＳ７０４）。この判定がＹＥＳである場合（ステップＳ７０４；ＹＥＳ）に、トランザクション処理部１１のログ編集部１１２は、従属ログを取得するためのｇｅｔ命令をＫＶＳ２０に送信し（図７ステップＳ２０３）、従属ログであるログ２をＫＶＳ２０から取得する（図８ステップＳ７０５）。
【００７３】
続いて、トランザクション処理部１１のログ編集部１１２は、取得した従属ログに、既に代表キー識別情報が書き込まれているか否かを判定する（図８ステップＳ７０６）。従属ログに代表キー識別情報が書き込まれている場合としては、その従属ログが既に他のレコード群の従属ログになっている場合等が該当する。
【００７４】
上記ステップＳ７０６の判定で従属ログに代表キー識別情報が書き込まれていると判定された場合（ステップＳ７０６；ＹＥＳ）に、トランザクション処理部１１のログ編集部１１２は、書き込まれている代表キー識別情報に対応する代表ログを、上記ステップＳ７０５（または前回のステップＳ７０８）で取得した従属ログに代替させる従属ログとしてＫＶＳ２０から取得する（図８ステップＳ７０８）。そして、処理を上述したステップＳ７０６に移行する。
【００７５】
一方、上記ステップＳ７０６の判定で従属ログに代表キー識別情報が書き込まれていないと判定された場合（ステップＳ７０６；ＮＯ）に、トランザクション処理部１１のログ編集部１１２は、上記ステップＳ７０５またはステップＳ７０８で取得した従属ログの内容を、上記ステップＳ７０２で取得した代表ログに付加して書き込む（ステップＳ７０７）。そして、処理を上述したステップＳ７０４に移行する。
【００７６】
一方、上記ステップＳ７０４の判定で未取得の従属ログが存在しないと判定された場合（ステップＳ７０４；ＹＥＳ）に、トランザクション処理部１１のログ編集部１１２は、ＣＡＳ命令を用いてＫＶＳ２０の代表ログを更新する（図９ステップＳ７０９、図７ステップＳ６０１）。
【００７７】
続いて、トランザクション処理部１１のログ編集部１１２は、上記ステップＳ７０９の更新が成功したか否かを判定する（図９ステップＳ７１０）。この判定がＮＯである場合（ステップＳ７１０；ＮＯ）に、トランザクション処理部１１は、トランザクション開始処理の失敗を通知し（図９ステップＳ７１５）、トランザクション開始処理を終了する。
【００７８】
一方、上記ステップＳ７１０の判定で更新が成功したと判定された場合（ステップＳ７１０；ＹＥＳ）に、トランザクション処理部１１のログ編集部１１２は、未更新の従属ログが存在するか否かを判定する（図９ステップＳ７１１）。この判定がＮＯである場合（ステップＳ７１１；ＮＯ）に、トランザクション処理部１１は、トランザクション開始処理の成功を通知し（図９ステップＳ７１６）、トランザクション開始処理を終了する。
【００７９】
一方、上記ステップＳ７１１の判定で未更新の従属ログが存在すると判定された場合（ステップＳ７１１；ＹＥＳ）に、トランザクション処理部１１のログ編集部１１２は、上記ステップＳ７０５またはステップＳ７０８で取得した従属ログに、上記ステップＳ７０１で決定した代表キーの代表キー識別情報を付加し、ＣＡＳ命令を用いてＫＶＳ２０の従属ログを更新する（図９ステップＳ７１２、図７ステップＳ６０２）。
【００８０】
続いて、トランザクション処理部１１のログ編集部１１２は、上記ステップＳ７１２の更新が成功したか否かを判定する（図９ステップＳ７１３）。この判定がＹＥＳである場合（ステップＳ７１３；ＹＥＳ）には、処理を上述したステップＳ７１１に移行する。
【００８１】
一方、上記ステップＳ７１３の判定で更新が失敗したと判定された場合（ステップＳ７１３；ＮＯ）に、トランザクション処理部１１のログ編集部１１２は、既に更新したログがあれば、その更新したログを元の状態に戻し（図９ステップＳ７１４）、トランザクション開始処理の失敗を通知する（図９ステップＳ７１５）。そして、トランザクション開始処理を終了する。
【００８２】
上述したように、第２実施形態におけるトランザクション処理装置１０によれば、トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーから代表キーを決定することができ、代表キーに対応する代表ログ以外の従属ログに対して、ＣＡＳ命令を用いて代表キー識別情報を付加することができる。これにより、他のトランザクションによる従属ログへのアクセスを制限することが可能となる。
【００８３】
また、第２実施形態におけるトランザクション処理装置１０によれば、従属ログの内容をＫＶＳ２０の代表ログにＣＡＳ命令を用いて書き加えることができ、レコード群の各レコードに対する更新情報を、ＫＶＳ２０の代表ログにＣＡＳ命令を用いて書き込むことができ、さらに、代表ログに書き込んだ更新情報を、ＫＶＳ２０にあるレコード群の各レコードにＣＡＳ命令を用いて書き込むことができる。これにより、レコード群の各レコードに対する更新情報を、単一の代表ログで管理して各レコードに反映することができるため、複数のレコードに対して整合性を保持したままデータ更新することが可能となる。
【００８４】
また、第２実施形態におけるトランザクション処理装置１０によれば、代表キーに決定された代表ログが既に他のレコード群の従属ログとして設定されている場合には、既にログに書き込まれている代表キー識別情報をたどっていくことで、最上位のログを探索し、そのログに対応するキーを代表キーとして決定することが可能となる。
【００８５】
また、第２実施形態におけるトランザクション処理装置１０によれば、従属ログが既に他のレコード群の従属ログとして設定されている場合には、既にログに書き込まれている代表キー識別情報をたどっていくことで、従属ログの最上位にあたるログを探索し、そのログの内容を代表ログに書き加えることが可能となる。
【００８６】
それゆえに、第２実施形態におけるトランザクション処理装置１０によれば、ＫＶＳを用いてトランザクション処理を実行する場合であっても、簡易な構成で、複数のレコードに対するトランザクション処理を行うことができる。
【００８７】
なお、上述した各実施形態は、単なる例示に過ぎず、各実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
【００８８】
例えば、上述した各実施形態の一部または全部は、以下の付記のようにも記載され得るが、本発明は以下に限定されない。
【００８９】
（付記１）  トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーのうち、いずれか一つを代表キーに決定する代表キー決定部と、前記整合性を保持する対象であることを識別するための整合対象情報を、前記レコード群の各レコードに対応するログのうち、前記代表キーに対応する代表ログ以外のログである従属ログに付加して更新するログ編集部と、前記レコード群の各レコードに対する更新情報を、前記代表ログに書き込んで更新するログ更新部と、前記代表ログに書き込まれた前記更新情報を、前記レコード群の各レコードに反映させて更新するレコード更新部と、を備えることを特徴とするトランザクション処理装置。
【００９０】
（付記２）  前記整合対象情報は、トランザクション処理中であることを識別するための処理中識別情報であり、前記ログ編集部は、前記処理中識別情報を前記代表ログに付加して更新する、ことを特徴とする付記１記載のトランザクション処理装置。
【００９１】
（付記３）  前記整合対象情報は、前記代表キーを特定するための代表キー識別情報であり、前記ログ更新部は、前記代表キー決定部により前記代表キーが決定された場合に、前記代表ログに前記従属ログの内容を書き加えて更新する、ことを特徴とする付記１記載のトランザクション処理装置。
【００９２】
（付記４）  前記代表キー決定部は、決定した前記代表ログに対して既に前記代表キー識別情報が付加されている場合には、既に付加されている前記代表キー識別情報で特定されるキーを、前記代表キーに決定し直す、ことを特徴とする付記３記載のトランザクション処理装置。
【００９３】
（付記５）  前記ログ更新部は、前記従属ログに対して既に前記代表キー識別情報が付加されている場合には、既に付加されている前記代表キー識別情報に対応するログの内容を前記従属ログの内容として、前記代表ログに書き加えて更新する、ことを特徴とする付記３または４記載のトランザクション処理装置。
【００９４】
（付記６）  前記ログおよび前記レコードは、物理的に複数の記憶領域から構成されるＫＶＳ（Key-Value Store）に格納される、ことを特徴とする付記１〜５のいずれか１に記載のトランザクション処理装置。
【００９５】
（付記７）  前記ログ編集部、前記ログ更新部および前記レコード更新部は、ＣＡＳ（Compare and Swap）命令を用いて前記ＫＶＳの前記ログを更新する、ことを特徴とする付記６記載のトランザクション処理装置。
【００９６】
（付記８）  トランザクション処理で整合性を保持する対象となるレコード群の各レコードのキーのうち、いずれか一つを代表キーに決定する代表キー決定ステップと、前記整合性を保持する対象であることを識別するための整合対象情報を、前記レコード群の各レコードに対応するログのうち、前記代表キーに対応する代表ログ以外のログである従属ログに付加して更新するログ編集ステップと、前記レコード群の各レコードに対する更新情報を、前記代表ログに書き込んで更新するログ更新ステップと、前記代表ログに書き込まれた前記更新情報を、前記レコード群の各レコードに反映させて更新するレコード更新ステップと、を含むことを特徴とするトランザクション処理方法。
【００９７】
（付記９）  付記８に記載の各ステップをコンピュータに実行させるためのトランザクション処理プログラム。
【符号の説明】
【００９８】
１０…トランザクション処理装置、１１…トランザクション処理部、１２…レコード更新部、１１１…代表キー決定部、１１２…ログ編集部、１１３…ログ更新部。
【図１】
0005721056.tif 000002
【図２】
0005721056.tif 000003
【図３】
0005721056.tif 000004
【図４】
0005721056.tif 000005
【図５】
0005721056.tif 000006
【図６】
0005721056.tif 000007
【図７】
0005721056.tif 000008
【図８】
0005721056.tif 000009
【図９】
0005721056.tif 000010