(57)【要約】【課題】複数のキーバリューデータ（ＫＶデータ）に対してトランザクションを実行するシステムではトランザクションの同時実行性が低下すること。【解決手段】ＫＶデータ記憶部は、ＫＶデータの形式に変換した表形式データを記憶する。ＷＡＬ記憶部は、複数のＫＶデータを１つのＫＶデータに集約したデータグループ単位で、ＫＶデータのバリューに格納されたレコードを参照および更新するトランザクションにおけるデータ操作命令の情報と該データ操作命令による処理により変更されたレコードとを有する更新履歴を記憶する。トランザクション処理部は、トランザクションのコミット時、ＷＡＬ記憶部に記憶された更新履歴に基づいてレコード単位で排他違反の有無を判定し、排他違反がなければトランザクションを成功させ、その更新履歴をＷＡＬ記憶部に記録する。ＷＡＬ反映処理部は、ＷＡＬ記憶部に記憶されている更新履歴に基づいてＫＶデータ記憶部を更新する。【選択図】図１
2015191307.tif 000002
【特許請求の範囲】
【請求項１】
キーとバリューの組で表現され、複数のレコードから構成される表形式データにおける前記レコードを前記バリューに格納し、前記バリューに格納した前記レコードの一部の列の値を前記キーに格納したキーバリューデータを記憶するキーバリューデータ記憶部と、
複数の前記キーバリューデータを１つのキーバリューデータに集約したデータグループ単位で、前記データグループに属する前記キーバリューデータの前記バリューに格納された前記レコードを参照および更新するトランザクションにおけるデータ操作命令の情報と該データ操作命令による処理により変更された前記レコードとを有する更新履歴を記憶するＷＡＬ記憶部と、
前記トランザクションのコミット時、前記ＷＡＬ記憶部に記憶された前記更新履歴に基づいて前記レコード単位で排他違反の有無を判定し、排他違反がなければ前記トランザクションを成功させ、その更新履歴を前記ＷＡＬ記憶部に記録するトランザクション処理部と、
前記ＷＡＬ記憶部に記憶されている前記更新履歴に基づいて前記キーバリューデータ記憶部を更新するＷＡＬ反映処理部と
を有するトランザクションシステム。
【請求項２】
前記ＷＡＬ反映処理部は、
前記ＷＡＬ記憶部に記憶されている前記更新履歴に含まれるデータ操作命令の情報に基づいて、更新の対象となった前記レコードをバリューに格納する更新前のキーバリューデータを前記キーバリューデータ記憶部から取得する更新前ＫＶデータ取得手段と、
前記更新前のキーバリューデータに対して前記データ操作命令による処理を行って更新後のキーバリューデータを作成し、前記キーバリューデータ記憶部に記憶する更新後ＫＶデータ作成登録手段と
を有する
請求項１に記載のトランザクションシステム。
【請求項３】
前記ＷＡＬ記憶部は、キーとバリューの組で表現される更新ログを記憶し、前記キーは複数の前記ＫＶデータを集約したデータであるデータグループを一意に識別する値であり、前記バリューは前記データグループの更新履歴を表し、また、前記更新履歴は、１以上の部分更新履歴を有し、１つの前記部分更新履歴は、前記データグループを構成する前記ＫＶデータのバリューに格納されたレコードに対するデータ操作命令の情報と当該データ操作命令による処理により変更された前記レコードと更新の順番を表すタイムスタンプとを有し、
前記トランザクション処理部は、
アプリケーションプログラムから入力されたトランザクションで使用する前記データグループを構成する前記ＫＶデータの最新の値を前記ＷＡＬ記憶部および前記キーバリューデータ記憶部から取得し、また、当該データグループに対応する前記更新ログ中の最新の前記タイムスタンプをスタート時タイムスタンプとして前記ＷＡＬ記憶部から取得し、前記トランザクションを実行するＷＡＬ管理部と、
前記トランザクションのコミット時、前記トランザクションのスタート時に取得された前記スタート時タイムスタンプと、前記ＷＡＬ記憶部に現に記憶されている前記データグループの最新の前記タイムスタンプであるコミット時タイムスタンプとを比較し、前記スタート時タイムスタンプと前記コミット時タイムスタンプとが相違するときは、前記スタート時タイムスタンプより後のタイムスタンプを有する前記部分更新履歴中に、前記トランザクションが使用した前記レコードと一致するレコードに対するデータ操作命令の情報が存在するか否かを判定し、前記比較と前記判定の結果とに基づいて、前記トランザクションを成功させるか、失敗させるかを決定し、成功させると決定した場合、前記トランザクションで更新した前記レコードに対するデータ操作命令の情報と当該データ操作命令による処理により更新した前記レコードと前記コミット時タイムスタンプより後のタイムスタンプとを有する新たな部分更新履歴を、前記データグループに対応して前記ＷＡＬ記憶部に現に記憶されている前記更新ログに追加する排他チェック処理部と
を有する請求項１または２に記載のトランザクションシステム。
【請求項４】
前記排他チェック処理部は、前記判定では、前記スタート時タイムスタンプより後のタイムスタンプを有する前記部分更新履歴中に、前記トランザクションが参照または更新した前記レコードと一致するレコードに対するデータ操作命令の情報が存在するか否かを判定する
請求項３に記載のトランザクションシステム。
【請求項５】
前記排他チェック処理部は、前記判定では、前記スタート時タイムスタンプより後のタイムスタンプを有する前記部分更新履歴中に、前記トランザクションが更新した前記レコードと一致するレコードに対するデータ操作命令の情報が存在するか否かを判定する
請求項３に記載のトランザクションシステム。
【請求項６】
キーとバリューの組で表現され、複数のレコードから構成される表形式データにおける前記レコードを前記バリューに格納し、前記バリューに格納した前記レコードの一部の列の値を前記キーに格納したキーバリューデータを記憶するキーバリューデータ記憶部と、
複数の前記キーバリューデータを１つのキーバリューデータに集約したデータグループ単位で、前記データグループに属する前記キーバリューデータの前記バリューに格納された前記レコードを参照および更新するトランザクションにおけるデータ操作命令の情報と該データ操作命令による処理により変更された前記レコードとを有する更新履歴を記憶するＷＡＬ記憶部と、
トランザクション処理部と、
ＷＡＬ反映処理部と
を有するトランザクションシステムの制御方法であって、
前記トランザクション処理部が、前記トランザクションのコミット時、前記ＷＡＬ記憶部に記憶された前記更新履歴に基づいて前記レコード単位で排他違反の有無を判定し、排他違反がなければ前記トランザクションを成功させ、その更新履歴を前記ＷＡＬ記憶部に記録し、
前記ＷＡＬ反映処理部が、前記ＷＡＬ記憶部に記憶されている前記更新履歴に基づいて前記キーバリューデータ記憶部を更新する
トランザクションシステム制御方法。
【請求項７】
キーとバリューの組で表現され、複数のレコードから構成される表形式データにおける前記レコードを前記バリューに格納し、前記バリューに格納した前記レコードの一部の列の値を前記キーに格納したキーバリューデータを記憶するキーバリューデータ記憶部と、
複数の前記キーバリューデータを１つのキーバリューデータに集約したデータグループ単位で、前記データグループに属する前記キーバリューデータの前記バリューに格納された前記レコードを参照および更新するトランザクションにおけるデータ操作命令の情報と該データ操作命令による処理により変更された前記レコードとを有する更新履歴を記憶するＷＡＬ記憶部と
を有するコンピュータを、
前記トランザクションのコミット時、前記ＷＡＬ記憶部に記憶された前記更新履歴に基づいて前記レコード単位で排他違反の有無を判定し、排他違反がなければ前記トランザクションを成功させ、その更新履歴を前記ＷＡＬ記憶部に記録するトランザクション処理部と、
前記ＷＡＬ記憶部に記憶されている前記更新履歴に基づいて前記キーバリューデータ記憶部を更新するＷＡＬ反映処理部と
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランザクションシステム、トランザクションシステム制御方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、スケーラブルなアプリケーションの実行基盤として、多数のコンピュータを用いるいわゆるクラウドが注目されている。クラウドのインフラストラクチャにおいて、スケーラブルなデータ永続化手段として、キー（Ｋｅｙ）とバリュー（Ｖａｌｕｅ）の組で表現されるキーバリューデータ（ＫＶデータ）を記憶するキーバリューストア（Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ（ＫＶＳ））というものが広く知られている。しかしながら、通常のＫＶＳでは１つのＫＶデータに対するトランザクションしか提供できない。
【０００３】
そこで、複数のＫＶデータに対してトランザクションをサポートするシステムが本発明に関連する第１の関連技術として提案されている（例えば特許文献１、非特許文献１参照）。この第１の関連技術では、複数のＫＶデータに対するトランザクションを実現するために、トランザクションで扱われる複数のＫＶデータをグルーピングし、１つのＫＶデータとしてＫＶＳに書き込むことで、複数のＫＶデータに対するトランザクションを実現している。複数のＫＶデータを１つのＫＶデータに集約したデータを、本明細書では、データグループと呼ぶ。
【０００４】
また上記第１の関連技術では、ＫＶＳに対する排他制御の仕組みとして、楽観的排他を使用している。具体的には、ＫＶデータごとにタイムスタンプが採番されており、あるトランザクションがスタートしたときに当該タイムスタンプを取得し、ＫＶデータを更新してコミットする際にタイムスタンプがトランザクションのスタート時から変化していなければ、タイムスタンプを１つインクリメントしてＫＶＳに書き込む。コミット時にタイムスタンプが変化していれば、当該トランザクションがスタートしてからコミットするまでの間に他のトランザクションによって先にＫＶデータが更新されていることになるので、当該トランザクションを失敗させる。楽観的排他では、排他制御情報などの共有資源を使用しないため、スケールアウトが容易になる。
【０００５】
他方、悲観的排他と呼ばれる排他制御の仕組みを採用したトランザクションシステムが本発明に関連する第２の関連技術として提案されている（例えば特許文献２参照）。この第２の関連技術では、トランザクションからのレコード更新要求に従うデータファイルの更新処理に際しては、更新するレコードへの同時アクセスを排他制御機構にて排他制御する。また、そのレコードの更新をバッファ上で行わせると共に、バッファ上でのレコード更新の履歴を生成する。トランザクションの確定時には、生成しておいたトランザクションに対応するレコード単位の更新履歴をジャーナルファイルに記録する。そして、当該ジャーナルファイルに記録した更新履歴に基づき書き込みバッファを通してブロック単位でデータファイルを更新する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−２３４５０９号公報
【特許文献２】特開平９−６２５５０号公報
【非特許文献】
【０００７】
【非特許文献１】“ビッグデータの活用に最適なスケールアウト型  新データベース「ＩｎｆｏＦｒａｍｅ  Ｒｅｌａｔｉｏｎａｌ  Ｓｔｏｒｅ」、祐成光樹、田村稔、ＮＥＣ技報、Vol.６５ Ｎo.２／２０１２.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述したようにスケーラブルなデータ永続化手段としてＫＶＳが注目されており、またＫＶＳで複数のＫＶデータに対してトランザクションをサポートするシステムが提案されている。しかしながら、上述したＫＶＳに対する楽観的な排他制御の仕組みでは、１つのＫＶデータ単位の排他しか実現できない。複数のＫＶデータを１つのＫＶデータにまとめてトランザクションを実行するシステムにおいては、まとめられた大きな１つのＫＶデータが排他の単位となるため、本来は排他違反にならないようなトランザクション同士も排他違反になってしまう可能性があり、トラザクションの同時実行性が下がり、スループットが下がってしまう問題がある。本発明に関連する第２の関連技術に示される悲観的排他を適用し、大きな１つのＫＶデータにまとめられる前のＫＶデータ単位で排他することが考えられるが、悲観的排他ではスケールアウトが困難になり、ＫＶデータを使用する意味がなくなる。
【０００９】
本発明の目的は、上述した課題、すなわち、複数のＫＶデータに対してトランザクションを実行するシステムではトランザクションの同時実行性が低下する、という課題を解決するトランザクションシステムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明の第１の観点に係るトランザクションシステムは、
キーとバリューの組で表現され、複数のレコードから構成される表形式データにおける上記レコードを上記バリューに格納し、上記バリューに格納した上記レコードの一部の列の値を上記キーに格納したキーバリューデータを記憶するキーバリューデータ記憶部と、
複数の上記キーバリューデータを１つのキーバリューデータに集約したデータグループ単位で、上記データグループに属する上記キーバリューデータの上記バリューに格納された上記レコードを参照および更新するトランザクションにおけるデータ操作命令の情報と該データ操作命令による処理により変更された上記レコードとを有する更新履歴を記憶するＷＡＬ記憶部と、
上記トランザクションのコミット時、上記ＷＡＬ記憶部に記憶された上記更新履歴に基づいて上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記ＷＡＬ記憶部に記録するトランザクション処理部と、
上記ＷＡＬ記憶部に記憶されている上記更新履歴に基づいて上記キーバリューデータ記憶部を更新するＷＡＬ反映処理部と
を有する。
【００１１】
本発明の第２の観点に係るトランザクションシステム制御方法は、
キーとバリューの組で表現され、複数のレコードから構成される表形式データにおける上記レコードを上記バリューに格納し、上記バリューに格納した上記レコードの一部の列の値を上記キーに格納したキーバリューデータを記憶するキーバリューデータ記憶部と、
複数の上記キーバリューデータを１つのキーバリューデータに集約したデータグループ単位で、上記データグループに属する上記キーバリューデータの上記バリューに格納された上記レコードを参照および更新するトランザクションにおけるデータ操作命令の情報と該データ操作命令による処理により変更された上記レコードとを有する更新履歴を記憶するＷＡＬ記憶部と、
トランザクション処理部と、
ＷＡＬ反映処理部と
を有するトランザクションシステムの制御方法であって、
上記トランザクション処理部が、上記トランザクションのコミット時、上記ＷＡＬ記憶部に記憶された上記更新履歴に基づいて上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記ＷＡＬ記憶部に記録し、
上記ＷＡＬ反映処理部が、上記ＷＡＬ記憶部に記憶されている上記更新履歴に基づいて上記キーバリューデータ記憶部を更新する。
【００１２】
本発明の第３の観点に係るプログラムは、
キーとバリューの組で表現され、複数のレコードから構成される表形式データにおける上記レコードを上記バリューに格納し、上記バリューに格納した上記レコードの一部の列の値を上記キーに格納したキーバリューデータを記憶するキーバリューデータ記憶部と、
複数の上記キーバリューデータを１つのキーバリューデータに集約したデータグループ単位で、上記データグループに属する上記キーバリューデータの上記バリューに格納された上記レコードを参照および更新するトランザクションにおけるデータ操作命令の情報と該データ操作命令による処理により変更された上記レコードとを有する更新履歴を記憶するＷＡＬ記憶部と
を有するコンピュータを、
上記トランザクションのコミット時、上記ＷＡＬ記憶部に記憶された上記更新履歴に基づいて上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記ＷＡＬ記憶部に記録するトランザクション処理部と、
上記ＷＡＬ記憶部に記憶されている上記更新履歴に基づいて上記キーバリューデータ記憶部を更新するＷＡＬ反映処理部と
して機能させる。
【発明の効果】
【００１３】
本発明は上述した構成を有するため、複数のＫＶデータを１つのＫＶデータにまとめてトランザクションを実行するシステムにおけるトランザクションの同時実行性を高めることが可能である。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態のブロック図である。
【図２】表形式データの構成例を示す図である。
【図３】表形式データから生成したＫＶデータの構成例を示す図である。
【図４】本発明の第１の実施形態におけるトランザクション処理部の動作の一例を示すフローチャートである。
【図５】本発明の第１の実施形態におけるＫＶデータおよびデータグループの説明に使用する表形式データの例を示す図である。
【図６】本発明の第１の実施形態におけるデータグループの例を示す図である。
【図７】本発明の第１の実施形態におけるＷＡＬ記憶手段に記憶されるＷＡＬの説明図である。
【図８】本発明の第１の実施形態における排他チェック処理部で排他違反無しと判断される一例を示す図である。
【図９】本発明の第１の実施形態における排他チェック処理部で排他違反有りと判断される一例を示す図である。
【図１０】本発明の第１の実施形態における排他チェック処理部で排他違反無しと判断される他の例を示す図である。
【図１１】本発明の第１の実施形態におけるＷＡＬ反映手段の動作の一例を示すフローチャートである。
【図１２】本発明の第２の実施形態のブロック図である。
【発明を実施するための形態】
【００１５】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態にかかるトランザクションシステム１００は、トランザクション処理部１１０、ＷＡＬ記憶部１２０、ＷＡＬ反映処理部１３０、ＫＶＳ１４０、システムカタログ１５０、およびアプリケーション（アプリケーションプログラム）１６０を備えている。
【００１６】
ＫＶＳ１４０は、ＫＶデータを記憶する機能を有する。ＫＶＳ１４０に記憶されるＫＶデータは、複数のレコードから構成される表形式データから所定の変換規則に従って生成したＫＶデータである。。
【００１７】
図２は表形式データの構成例を示す。この例の表形式データは、各々の行が４つの列を有し、列１と列２と列３とが主キーになっている。本明細書では、レコードとは、表形式データの１行のデータのことを指す。
【００１８】
図３（ａ）〜（ｃ）は、図２の表形式データから生成したＫＶデータの構成例を示す。ＫＶデータでは、キーの値が一意である必要があり、レコードの格納形式によって、キーの定義方法が変わる。図３（ａ）のＫＶデータでは、図２の表の全ての主キーの組み合わせをキーとしている。このため図３（ａ）のＫＶデータは、１つのＫＶデータが１つのレコードに対応している。すなわち、ＫＶデータのバリューに１つのレコードが格納されている。図３（ｂ）のＫＶデータでは、列１と列２の組み合わせをキーとしている。そのため図３（ｂ）のＫＶデータでは、列１と列２の値が同じ複数のレコードが１つのＫＶデータのバリューに格納されている。図３（ｃ）のＫＶデータでは、列１をキーとしている。そのため図３（ｃ）のＫＶデータでは、列１の値が同じ複数のレコードが１つのＫＶデータのバリューに格納されている。このように表形式データを表現するＫＶデータを生成する変換規則は様々なパターンが考えられ、図３に示すパターン以外の変換規則も存在する。ＫＶＳ１４０に記憶するＫＶデータは、任意の変換規則に従って表形式データから生成されたＫＶデータであってよい。但し、以下では、説明の便宜上、１つのＫＶデータが１つのレコードに対応する図３（ａ）の変換規則を使用して、表形式データから生成されたＫＶデータがＫＶＳ１４０に記憶されているものとする。
【００１９】
トランザクション処理部１１０は、１以上備えられている。各々のトランザクション処理部１１０は、アプリケーション１６０から入力されたトランザクションを受け付け、当該トランザクションを処理する手段である。各々のトランザクション処理部１１０は、他のトランザクション処理部１１０と並行して動作する。トランザクション処理部１１０は、ＷＡＬ管理手段１１１と排他チェック処理手段１１２とを備えている。
【００２０】
ＷＡＬ管理手段１１１は、アプリケーション１６０から入力されたトランザクションに対して、当該トランザクションが使用するＫＶデータを論理的にまとめたデータグループを作成し、その更新内容をＣＡＳ（Ｃｏｍｐａｒｅ  Ａｎｄ  Ｓｗａｐ）コマンド等を使用して、ＷＡＬとしてＷＡＬ記憶部１２０に対して書き込んだり、読み出したりする手段である。
【００２１】
ここで、ＷＡＬ（Ｗｒｉｔｅ  Ａｈｅａｄ  Ｌｏｇ）について説明する。一般にＷｒｉｔｅ  Ａｈｅａｄ  Ｌｏｇｇｉｎｇとは、データベースに対する操作前の変更内容をログに書き出すことを指し、ＷＡＬとはログそのものを指す。このように、データベースへの変更は、先ずログに記録され、次いで、ログからデータベースへ反映される。但し、本発明では、ログは物理ログではなく、論理ログである。ここで、物理ログとは、更新後のＫＶデータのイメージから構成される。これに対して論理ログは、トランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコードから構成される。データ操作命令の情報は、例えばＳＱＬで言えば、ＩＮＳＥＲＴ、ＤＥＬＥＴＥ、ＵＰＤＡＴＥといった命令の情報のことである。
【００２２】
ＷＡＬ記憶部１２０は、ＷＡＬ管理手段１１１によって生成、または更新されたＷＡＬを保存する手段である。ＷＡＬ記憶部１２０は、複数のトランザクション処理部１１０に共通に備えられる。本実施形態において、ＷＡＬ記憶部１２０はＫＶＳによって構成されており、ＷＡＬ自体もキーとバリューとからなるＫＶデータとして保存される。ＫＶＳは、例えばＣＡＳコマンドを使用することにより、１つのＫＶデータに対するアトミック性は保証することができるが、複数のＫＶデータを一度のトランザクションでアトミックに処理することはできない。このため、複数のＫＶデータを論理的にまとめたデータグループを作成し、このデータグループに対する更新内容をＷＡＬとしてＫＶＳに書き込むことで複数のＫＶデータをトランザクショナルに処理することを可能としている。なお、ＷＡＬ管理手段１１１は、トランザクションが成功した場合に限り、当該トランザクションによる更新内容をＷＡＬとしてＷＡＬ記憶部１２０に書き込む。なお、図１ではＷＡＬ記憶部１２０とＫＶＳ１４０とは別々のＫＶＳとして表現されているが、１つのＫＶＳにまとめても良い。
【００２３】
排他チェック処理手段１１２は、トランザクションをコミットする際に、当該トランザクションがスタートしてからコミットするまでにＷＡＬ記憶部１２０に記憶されたＷＡＬのデータと当該トランザクションで参照や更新したレコードとに基づいて、レコード単位で排他違反の有無を判定する機能を有する。具体的には、まず排他チェック処理手段１１２は、当該トランザクションがスタートしてからコミットするまでにＷＡＬ記憶部１２０に記憶されたＷＡＬに記録されているトランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコードとに基づいて、挿入、削除あるいは更新されたレコードを特定する。次に排他チェック処理手段１１２は、上記特定したレコードと当該トランザクションで参照や更新したレコードとを比較して、同じレコードが存在する場合は排他違反があるとしてトランザクションを失敗させ、同じレコードが存在しない場合は排他違反がないとしてトランザクションを成功させる。上述したようにトランザクションが成功した場合は、ＷＡＬ管理手段１１１が、当該トランザクションによる更新内容をＷＡＬとしてＷＡＬ記憶部１２０に書き込むことになる。
【００２４】
ＷＡＬ反映処理部１３０は、ＷＡＬ記憶部１２０に記憶されているＷＡＬに基づいてＫＶＳ１４０を更新する機能を有する。ＷＡＬ反映処理手段１３０が動作するタイミングはタイマーで指定してもよいし、システム管理者等が任意のタイミングで行ってもよい。ＷＡＬ反映処理部１３０は、更新前ＫＶデータ取得手段１３１、および更新後ＫＶデータ作成登録手段１３２を備えている。
【００２５】
更新前ＫＶデータ取得手段１３１は、ＷＡＬ記憶部１２０から古い順にＷＡＬを読み出し、読み出したＷＡＬに記録されているトランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコードに基づいて、挿入、削除あるいは更新されたレコードを含む更新前のＫＶデータをＫＶＳ１４０から取得し、上記読み出したＷＡＬと一緒に更新後ＫＶデータ作成登録手段１３２へ提供する。
【００２６】
更新後ＫＶデータ作成登録手段１３２は、更新前ＫＶデータ取得手段１３１から受け取った更新前のＫＶデータに対して上記ＷＡＬに記録されているトランザクションにおけるデータ操作命令を適用して更新後ＫＶデータを作成し、この更新後ＫＶデータをＫＶＳ１４０へ登録する。すなわち、ＫＶＳ１４０上の更新前ＫＶデータを更新後ＫＶデータに置き換える。また更新後ＫＶデータ作成登録手段１３２は、ＫＶＳ１４０に反映し終えたＷＡＬをＷＡＬ記憶部１２０から削除する。
【００２７】
システムカタログ１５０は、ＫＶＳ１４０に保存されているＫＶデータやその変換前の表形式データのメタ情報、トランザクションを実行する際に作成するデータグループの情報などのデータを保存する手段である。アプリケーション１６０からトランザクションが入力された時、ＷＡＬ管理手段１１１はシステムカタログ１５０からデータグループに関連する情報を抽出し、抽出された情報を元に当該トランザクションで使用するデータグループを特定する。
【００２８】
次に、本実施形態の動作について説明する。本実施形態は図４に示すフローチャートに従って動作を行う。
【００２９】
まず、トランザクション入力のステップＳ００１で、アプリケーション１６０が本システムに対してトランザクションを入力する。
【００３０】
次に、ＷＡＬ特定のステップＳ００２で、ＷＡＬ管理手段１１１が、入力されたトランザクションを解析し、システムカタログ１５０の情報を用いて当該トランザクションで処理するＫＶデータが所属するデータグループを特定し、当該データグループのこれまでの更新ログが保存されているＷＡＬを特定する。本システムにおいて、ＷＡＬとはトランザクションで扱われる複数のＫＶデータを論理的にまとめたデータグループの更新内容の履歴を１つのＫＶデータにまとめたものである。
【００３１】
ここで、本システムにおけるデータグループの概念を説明する。図５に示すような二種類の表形式データ、すなわち、商品テーブルＴ００１と入札テーブルＴ００２とがあるとする。このような表形式データに対して、以下のようなトランザクションを実行するとする。
「ユーザーが新たに入札を行った際に、商品テーブルと入札テーブルのレコードを更新する」
【００３２】
このようなトランザクションを処理する場合、商品テーブルのレコードと入札テーブルのレコードとをアトミックに更新しなければならない。しかし、ＫＶＳは１つのＫＶデータに対するアトミック性しか保証していないため、例えば、商品テーブルのレコードをバリューに有するＫＶデータを更新したあと、入札テーブルのレコードをバリューに有するＫＶデータの更新に失敗した場合、商品テーブルのレコードだけが更新された状態になってしまい、アトミック性が保証されないという問題がある。
【００３３】
そこで、トラザクションに関連する複数のＫＶデータを論理的にまとめて１つのＫＶデータとし、複数のＫＶデータの更新を１つのＫＶデータに対する書き込みで実現することでトラザクションのアトミック性を保証する。
【００３４】
データグループを作成するには、まず各レコードで共通するＫｅｙ（図５の例では商品ＩＤ）を抽出する。図５に示す表形式データからは、図６に示すような３つのグループ（Ｇ００１、Ｇ００２、Ｇ００３）が論理的にまとめられる。
【００３５】
次に、本システムにおけるＷＡＬの概念を説明する。図５に示す表形式データに対して以下のような２つのトランザクションが順番に実行されたとする。
最初のトランザクション：「入札テーブルＴ００２のＩＤがｂ１のレコードの入札額を１２０００に更新し、商品テーブルＴ００１の商品ＩＤがｉ１の最高金額を１２０００に更新する」
二番目のトランザクション：「入札テーブルＴ００２のＩＤがｂ２のレコードの入札額を１３０００に更新し、商品テーブルＴ００１の商品ＩＤがｉ１の最高金額を１３０００に更新する。」
【００３６】
まず、最初のトランザクション１によって商品テーブルＴ００１の１行目のレコードと入札テーブルＴ００２の１行目のレコードが更新され、二番目のトランザクション２によって商品テーブルＴ００１の１行目のレコードと入札テーブルＴ００２の２行目のレコードが更新される。これらの２つのトランザクションで更新されるデータは全て同じデータグループに所属しているため、これらのトランザクションによる更新結果は１つのＷＡＬに記録される。ＷＡＬは以下のような情報で構成される。
・当該ＷＡＬを識別するためのキー値
・トランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコード
【００３７】
ＷＡＬはＫＶデータであるため、（キー,バリュー）の組で表される。キー値として、データグループで共通のキー値にＷＡＬであることを示す接頭辞を付加したものを用いる。上記の例では、ＷＡＬ_ｉ１が当該ＷＡＬのキー値となる。バリュー値にはトランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコードが含まれる。具体的には、以下のようにＷＡＬが構成される。
ＷＡＬ＝（Ｋｅｙ,Ｖａｌｕｅ）＝（ＷＡＬ_ｉ１,＜[ｕｐｄａｔｅ，（ｉ１,ＡＡＡ,１０,５,１２０００）,（ｂ１,ｉ１,ｕ３,１２０００）,タイムスタンプ１]，[ｕｐｄａｔｅ，（ｉ１,ＡＡＡ,１０,５,１３０００），（ｂ２,ｉ１,ｕ１,１３０００），タイムスタンプ２]＞）
【００３８】
タイムスタンプは、当該ＷＡＬに対するトランザクションが実行された順番を表している。タイムスタンプは単純な数値で表されていればよい。このように、ＷＡＬはあるデータグループに対する論理的な更新履歴を表している。
【００３９】
ＷＡＬ特定のステップＳ００２でＷＡＬ管理手段１１１は、具体的には以下のようにＷＡＬを特定する。
【００４０】
まず、ＷＡＬ管理手段１１１は、入力されたトランザクションから、当該トランザクションで利用されるテーブルを抽出し、システムカタログ１５０から当該トランザクションで利用されるテーブル間のデータグループに関係する情報を抽出する。
【００４１】
システムカタログ１５０には、テーブルのスキーマ情報のほかに、どのテーブルがどの列でデータグループを構成するのかという情報が格納されている。例えば、図５に示すようなテーブルの場合には、「商品テーブルＴ００１と入札テーブルＴ００２でデータグループを構成し、データグループを構成する際のキーは商品ＩＤである。」という情報が格納されている。
【００４２】
ＷＡＬ管理手段１１１は、入力されたトランザクションとシステムカタログ１５０の情報とから、当該トランザクションが利用するデータグループを特定する。例えば、「入札テーブルＴ００２のＩＤがｂ１のレコードの入札額を１２０００に更新し、商品テーブルＴ００１の商品ＩＤがｉ１の最高金額を１２０００に更新する」というトランザクションが入力された場合は、当該トランザクションが利用するテーブルが商品テーブルＴ００１と入札テーブルＴ００２であることが分かり、システムカタログ１５０から商品テーブルＴ００１と入札テーブルＴ００２が商品ＩＤでグループ化されていることが分かる。これにより、取得すべきＷＡＬがＷＡＬ_ｉ１であることが分かり、当該トランザクションが利用するＷＡＬが特定できる。
【００４３】
次に、ＷＡＬ特定のステップＳ００２で特定されたＷＡＬの情報を用いて、ＷＡＬ管理手段１１１がＷＡＬ記憶部１２０からＷＡＬを取得する（ステップＳ００３）。ここで、ＷＡＬ記憶部１２０にＷＡＬが存在する場合は、ＷＡＬ取得のステップＳ００４でＷＡＬ管理手段１１１がＷＡＬ記憶部１２０からＷＡＬを取得する。このとき、後の排他チェックで使用するために、当該ＷＡＬの最新のタイムスタンプをＷＡＬ記憶部１２０から取得しておく。
【００４４】
ここで、図７を用いてＷＡＬ記憶部１２０にＷＡＬがどのように保存されているのかを説明する。
【００４５】
ＷＡＬは、ＷＡＬ記憶部１２０の中でそれぞれのＷＡＬごとに履歴を持って保存されている。例えば、あるトランザクションがＷＡＬ_ｉ１を用いてトランザクションを実行すると、ＷＡＬ_ｉ１のタイムスタンプ１としてＷＡＬが蓄積され、次のトランザクションでＷＡＬ_ｉ１を用いてトランザクションを実行すると、ＷＡＬ_ｉ１のタイムスタンプ２としてＷＡＬが蓄積される。次のトランザクションでＷＡＬ_ｉ２を用いてトランザクションを実行すると、ＷＡＬ_ｉ２のタイムスタンプ１としてＷＡＬが蓄積される。
【００４６】
ＷＡＬ管理手段１１１は、それぞれのＷＡＬに含まれるトランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコードについて、タイムスタンプの値が古いものから順番に確認すれば、各レコードの更新履歴や最新のレコード値を知ることができる。
【００４７】
ＷＡＬ記憶部１２０に該当するＷＡＬが存在しない場合は、レコード取得のステップＳ００６で、ＷＡＬ管理手段１１１がＫＶＳ１４０から当該トランザクションで利用するレコードをバリューに含むＫＶデータを取得する。
【００４８】
ＷＡＬ記憶部１２０に該当するＷＡＬが存在する場合でも、ＷＡＬ記憶部１２０に保存されているＷＡＬの中に必要なレコードデータが全て含まれていない場合がある。そのため、ＷＡＬ管理手段１１１は、ＷＡＬ記憶部１２０からＷＡＬを取得した後に、当該トランザクションの処理に必要なレコードが当該ＷＡＬの中に全て含まれているかをチェックする（ステップＳ００５）。もし、必要なレコードがＷＡＬの中に含まれていない場合は、ＫＶＳ１４０から必要レコードをバリューに格納したＫＶデータを取得する（ステップＳ００６）。
【００４９】
ＷＡＬ管理手段１１１は、ＷＡＬ記憶部１２０やＫＶＳ１４０からトランザクションに必要なレコードを全て取得したら、それらのレコードを使用してトランザクションの処理を進める。そして、トランザクション実行のステップＳ００７で、ＷＡＬ管理手段１１１は、当該トランザクションによるデータグループの更新ログを新たにＷＡＬとして作成する。この時点ではまだＷＡＬ管理手段１１１は、ＷＡＬ記憶部１２０に新たに作成したＷＡＬを書き込まない。
【００５０】
次に、参照・更新レコード抽出のステップＳ００８で、ＷＡＬ管理手段１１１は、当該トランザクションで参照や更新したレコード情報を抽出する。具体的には、当該トランザクションで更新や参照したレコードの情報と、当該トランザクションのスタート時点のタイムスタンプ情報とを取得する。なお、取得するレコード情報はレコードデータ全体である必要はなく、各レコードのＫｅｙ値だけで十分である。
【００５１】
ＷＡＬ管理手段１１１は、排他チェック処理手段１１２に対して、上記レコード情報を出力する。このとき、ＷＡＬ管理手段１１１は、参照したレコード情報と更新したレコード情報とを含む全てのレコード情報を出力してもよいし、更新したレコードの情報だけを出力してもよい。参照と更新のすべてのレコード情報を出力するか、更新したレコード情報だけを出力するかで、トランザクション間のイソレーション（Ｉｓｏｌａｔｉｏｎ）レベルを調整することができる。どの種別のレコード情報を出力するかは、システムが起動する前にシステム管理者などが予め設定しておけばよい。
【００５２】
次に、排他チェックのステップＳ００９で、排他チェック処理手段１１２は、当該トランザクションがスタートしてから現時点までにＷＡＬ記憶部１２０に追加されたＷＡＬと、ＷＡＬ管理手段１１１から渡される当該トランザクションで参照や更新したレコードとに基づいて排他違反の有無を検出する（ステップＳ０１０）。そして排他チェック処理手段１１２は、排他違反があることを検出すると、当該トランザクションを失敗させ（ステップＳ０１２）、排他違反がないことを検出すると、当該トランザクションを成功させる（ステップＳ０１１）。
【００５３】
具体的には、排他チェック処理手段１１２は、まずＷＡＬ管理手段１１１から当該トランザクションで参照や更新されたレコードデータとスタート時点のタイムスタンプの値を受け取る。次に、排他チェック処理手段１１２は、ＷＡＬ記憶部１２０から当該トランザクションで使用されたＷＡＬを取得する。
【００５４】
排他チェック処理手段１１２は、ＷＡＬ記憶部１２０から取得したＷＡＬの最新のタイムスタンプがＷＡＬ管理手段１１１から受け取ったスタート時点のタイムスタンプと同じ値の場合は、当該トランザクションがスタートしてから現時点までの間に当該ＷＡＬに関連する他のトランザクションが実行されていないことになるため、トランザクションを成功させる。
【００５５】
他方、排他チェック処理手段１１２は、ＷＡＬ記憶部１２０から取得したＷＡＬの最新のタイムスタンプが、ＷＡＬ管理手段１１１から受け取ったスタート時点のタイムスタンプの値より大きな値の場合は、当該トランザクションがスタートしてから現時点までの間に当該ＷＡＬに関連する他のトランザクションが実行されていることを意味するため、排他違反がないかどうかをチェックする。
【００５６】
排他違反チェックは、以下のようにして実行される。まず、排他チェック処理手段１１２は、ＷＡＬ記憶部１２０から取得したＷＡＬのうち、ＷＡＬ管理手段１１１から受け取ったタイムスタンプの値より大きなタイムスタンプの値を持つＷＡＬを全て抽出する。そして、抽出したＷＡＬに記述されているトランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコードに基づいて、挿入、削除あるいは更新されたレコードを特定する。次に排他チェック処理手段１１２は、上記特定したレコードと当該トランザクションで参照や更新したレコードとを比較して、同じレコードが存在する場合は排他違反があると判断し、同じレコードが存在しない場合は排他違反がないと判断する。
【００５７】
排他チェック処理手段１１２がトランザクションを成功させる場合、失敗させる場合を説明する概念図を図８、図９、図１０に示す。図８乃至図１０において、左側には、トランザクションのスタート時点のタイムスタンプと当該トランザクションで参照または更新されたレコードとが描かれており、右側には、ＷＡＬ記憶部１２０に記憶されているＷＡＬのタイムスタンプとデータ操作されたレコードとが描かれている。
【００５８】
図８は、トランザクションがスタートしてから排他チェック処理手段１１２が排他チェックを実行するまでの間に当該ＷＡＬに更新が無かった場合の例である。この場合、当該トランザクションが実行されている間に当該ＷＡＬに関連する他のトランザクションが実行されていないため、当該トランザクションは成功する。
【００５９】
図９は、トランザクションがスタートしてから排他チェック処理手段１１２が排他チェックを実行するまでの間に当該ＷＡＬに更新があった場合の例である。この場合、排他チェック処理手段１１２で持っているスタート時点のタイムスタンプ値より大きなタイムスタンプ値を持つＷＡＬを抽出する。図９の例では、タイムスタンプが３のＷＡＬを取得する。図９の例では、タイムスタンプが３のＷＡＬにはレコードＡとレコードＤとに対するデータ操作の情報が含まれている。つまり、当該トランザクションがスタートしてから排他チェック処理部１１２が排他チェックを実行するまでの間に、他のトランザクションがレコードＡとレコードＤを更新するトランザクションを実行したことを意味している。ここで、当該トランザクションを実行するとレコードＡに関して排他違反が発生するため、当該トランザクションを失敗させる。
【００６０】
図１０は、トランザクションがスタートしてから排他チェック処理手段１１２が排他チェックを実行するまでの間に当該ＷＡＬに更新があった場合の例である。この場合、排他チェック処理手段１１２で持っているスタート時点のタイムスタンプ値以上のタイムスタンプ値を持つＷＡＬを抽出する。図１０の例ではタイムスタンプが３のＷＡＬを取得する。図１０の例では、タイムスタンプが３のＷＡＬには、レコードＣとレコードＤとに対するデータ操作の情報が含まれている。つまり、当該トランザクションがスタートしてから排他チェック処理手段１１２が排他チェックを実行するまでの間に、他のトランザクションがレコードＣとレコードＤを更新するトランザクションを実行したことを意味している。ここで、当該トランザクションを実行してもレコードレベルでは排他違反は発生していないため、当該トランザクションを成功させる。
【００６１】
排他チェック処理手段１１２は、排他違反を検出しなかった場合は、ＷＡＬ管理手段１１１にトランザクションのコミットを要求する。ＷＡＬ管理手段１１１は、トランザクションのコミットが要求されると、当該トランザクションのＷＡＬをＷＡＬ記憶部１２０に書き込む（ステップＳ０１１）。このとき、書き込むＷＡＬのタイムスタンプの値は、ＷＡＬ記憶部１２０に記憶されている最新のタイムスタンプの次の値とする。例えば図８の場合、ＷＡＬ管理手段１１１は、レコードＡに係るデータ操作の情報（トランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコード。以下同様）と、レコードＢに係るデータ操作の情報と、値３のタイムスタンプとを有するＷＡＬを書き込む。また例えば図１０の場合、ＷＡＬ管理手段１１１は、レコードＡに係るデータ操作の情報と、レコードＢに係るデータ操作の情報と、値４のタイムスタンプとを有するＷＡＬを書き込む。
【００６２】
他方、排他チェック処理手段１１２は、排他違反を検出した場合は、ＷＡＬ管理手段１１１にトランザクションのアボートを要求する。ＷＡＬ管理手段１１１はトランザクションのアボートが要求されると、当該トランザクションのＷＡＬを破棄する（ステップＳ０１２）。
【００６３】
次に、本実施形態において、ＷＡＬ記憶部１２０に記憶されたＷＡＬをＫＶＳ１４０に反映する動作について説明する。ＷＡＬのＫＶＳへの反映は、図１１に示すフローチャートに従って動作を行う。
【００６４】
まず、ＷＡＬ反映処理部１３０の更新前ＫＶデータ取得手段１３１は、ＷＡＬ取得のステップＳ１０１で、ＷＡＬ記憶部１２０から、記憶されている古い順にＷＡＬを１つ取得する。更新前ＫＶデータ取得手段１３１は、ＷＡＬ記憶部１２０にＷＡＬが存在しない場合は図１１の処理を終了する（ステップＳ１０２のｎｏ）。
【００６５】
ＷＡＬ記憶部１２０にＷＡＬが存在する場合（ステップＳ１０２のｙｅｓ）、更新前ＫＶデータ取得手段１３１は、更新前ＫＶデータ取得のステップＳ１０３で、上記取得したＷＡＬに含まれるトランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコードに基づいて、更新の対象となったレコードをバリューに格納する更新前のＫＶデータをＫＶＳ１４０から取得する。
【００６６】
次に更新後ＫＶデータ作成登録部１３２は、更新後ＫＶデータ作成のステップＳ１０４で、上記取得された更新前のＫＶデータに対して、上記取得されたＷＡＬに含まれるトランザクションにおけるデータ操作命令の処理を実行して、更新後のＫＶデータを作成する。次に更新後ＫＶデータ作成登録部１３２は、作成した更新後のＫＶデータをＫＶＳ１４０に登録する。次に更新後ＫＶデータ作成登録部１３２は、ＷＡＬ削除のステップで、上記取得されたＷＡＬをＷＡＬ記憶部１２０から削除する。
【００６７】
その後、ＷＡＬ反映処理部１３０は、ＷＡＬ取得のステップＳ１０１の処理へ戻り、上述した動作と同様の動作を繰り返す。
【００６８】
あるＫＶデータについて、ＷＡＬにトランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により更新されたレコードが存在する場合は、当該データ操作命令による処理を行ったＫＶデータが当該ＫＶデータについて最新の情報である。このため、ＷＡＬ反映処理部１３０がＫＶＳ１４０の更新前ＫＶデータにＷＡＬのデータ操作を行った時点で最新のＫＶデータがＫＶＳ１４０に保存される。あるＫＶデータについてＷＡＬが存在しない場合は、ＫＶＳ１４０に保存されているＫＶデータが最新の情報となる。
【００６９】
なお、アプリケーション１６０から入力されたトランザクションを処理するプロセス（トランザクション処理部）と、ＷＡＬを反映するプロセス（ＷＡＬ反映処理部）はそれぞれ並列に動作している。ＷＡＬを反映するプロセスはタイマーによって一定時間ごとに行われてもよいし、システム管理者等が任意のタイミングで行っても良い。
【００７０】
このように本実施形態によれば、ＫＶＳに対して複数のＫＶデータのトランザクションをサポートするシステムに対して、トランザクションの排他制御を行う際に、トランザクションを実行するデータグループ単位で排他制御を行うのではなく、当該トランザクションで参照や更新したレコード単位で排他制御を行うことで、トランザクションの排他単位を小さくすることができ、トランザクションの同時実効性を高めスループットを上げることができる。
【００７１】
また本実施形態によれば、ＷＡＬ記憶部１２０に記憶するＷＡＬを論理ログ、すなわちデータ操作命令の情報と当該データ操作命令による処理により変更されたレコードとを有するＷＡＬとしているため、ＫＶＳ１４０に記憶するＫＶデータが任意の変換規則に従って表形式データから生成されたＫＶデータであっても、表形式データにおけるレコード単位で排他制御を行うことができる。
【００７２】
[第２の実施形態]
図１２は、本発明の第２の実施形態のブロック図である。図１２に示すように、本実施形態は、１以上のトランザクション処理部１と、ＫＶＳ２と、ＷＡＬ記憶部３と、ＷＡＬ反映処理部４とを有する。
【００７３】
ＫＶＳ２は、半導体メモリや磁気ディスク等で構成され、キーとバリューの組で表現されるレコードを記憶する。具体的には、ＫＶＳ２は、キーとバリューの組で表現され、複数のレコードから構成される表形式データにおけるレコードをバリューに格納し、バリューに格納したレコードの一部の列の値をキーに格納したＫＶデータを記憶する。
【００７４】
ＷＡＬ記憶部３は、半導体メモリや磁気ディスク等で構成され、複数の上記ＫＶデータを１つのＫＶデータに集約したデータグループ単位で、その論理ログを記憶する。好ましくは、ＷＡＬ記憶部３は、キーとバリューの組で表現される更新ログを記憶する。上記キーは、複数の上記ＫＶデータを集約したデータであるデータグループを一意に識別する値である。また上記バリューは、上記データグループの更新履歴を表す。さらに上記更新履歴は、１以上の部分更新履歴を有する。そして、１つの上記部分更新履歴は、上記データグループを構成する上記ＫＶデータのバリューに格納されるレコードに対するデータ操作命令の情報と当該データ操作命令による処理により変更された上記レコードと更新の順番を表すタイムスタンプとを有する。
【００７５】
トランザクション処理部１は、図示しないアプリケーションプログラム等から入力されたトランザクションを実行する機能を有する。トランザクション処理部１は、上記データグループを参照および更新するトランザクションのコミット時、ＷＡＬ記憶部３に記憶された更新履歴に基づいて、レコード単位で排他違反の有無を判定し、排他違反がなければ当該トランザクションを成功させ、その更新履歴をＷＡＬ記憶部３に記録する。好ましくは、トランザクション処理部１は、主な機能部として、ＷＡＬ管理部５と排他チェック処理部６とを有する。
【００７６】
ＷＡＬ管理部５は、入力されたトランザクションで使用する上記データグループを構成する上記レコードの最新の値をＷＡＬ記憶部３およびＫＶＳ２から取得する機能を有する。またＷＡＬ管理部５は、当該データグループに対応する上記更新ログ中の最新の上記タイムスタンプをスタート時タイムスタンプとしてＷＡＬ記憶部３から取得する機能を有する。
【００７７】
排他チェック処理部６は、トランザクション処理部１で実行しているトランザクションのコミット時、当該トランザクションのスタート時に取得しておいた上記スタート時タイムスタンプと、ＷＡＬ記憶部３に現に記憶されている上記データグループの最新のタイムスタンプであるコミット時タイムスタンプとを比較する機能を有する。また排他チェック処理部６は、上記の比較の結果、スタート時タイムスタンプとコミット時タイムスタンプとが相違するときは、スタート時タイムスタンプより後のタイムスタンプを有する部分更新履歴中に、当該トランザクションが使用したレコードと同じレコードに対するデータ操作命令の情報が存在するか否かを判定する機能を有する。さらに排他チェック処理部６は、上記判定の結果に基づいて、上記トランザクションを成功させるか、失敗させるかを決定し、成功させると決定した場合、上記レコードを参照および更新した上記トランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理により変更された上記レコードとコミット時タイムスタンプより後のタイムスタンプとを有する新たな部分更新履歴を、上記データグループに対応してＷＡＬ記憶部３に現に記憶されている更新ログに追加する機能を有する。
【００７８】
ＷＡＬ反映部４は、ＷＡＬ記憶部３に記憶されている更新履歴中のデータ操作命令の情報と当該データ操作命令による処理により変更されたレコードとに基づいて、ＫＶＳ２のＫＶデータを更新する機能を有する。
【００７９】
本実施形態のトランザクションシステムは、例えば、ＭＰＵ等のプロセッサとそれに接続されたメモリ、入出力装置、通信インターフェイス等を有するコンピュータと、当該コンピュータで実行されるプログラムとで実現することができる。プログラムは、磁気ディスク装置等のコンピュータ可読記録媒体に記録されており、コンピュータの立ち上げ時にＭＰＵ等のプロセッサに読み取られ、そのプロセッサの動作を制御することにより、そのプロセッサ上にＷＡＬ管理部５、排他チェック処理部６、ＷＡＬ反映部４を実現する。
【００８０】
次に本実施形態の動作を説明する。
【００８１】
トランザクション処理部１は、入力されたトランザクションを実行する。そして、トランザクション処理部１は、データグループを参照および更新するトランザクションのコミット時、ＷＡＬ記憶部３に記憶された更新履歴に基づいて、レコード単位で排他違反の有無を判定し、排他違反がなければ当該トランザクションを成功させ、その更新履歴をＷＡＬ記憶部３に記録する。その後、ＷＡＬ反映部４は、ＷＡＬ記憶部３に記憶されている更新履歴に基づいてＫＶＳ２を更新する。
【００８２】
より好ましくは、本実施形態は以下のように動作する。
【００８３】
トランザクション処理部１は、トランザクションが入力されると、そのトランザクションで使用するデータグループを構成するＫＶデータの最新の値をＷＡＬ記憶部３およびＫＶＳ２から取得し、また、当該データグループに対応する更新ログ中の最新のタイムスタンプをスタート時タイムスタンプとしてＷＡＬ記憶部３から取得し、トランザクションの実行を開始する。
【００８４】
トランザクション処理部１は、実行しているトランザクションのコミット時、そのトランザクションのスタート時に取得しておいた上記スタート時タイムスタンプと、ＷＡＬ記憶部３に現に記憶されているデータグループの最新のタイムスタンプであるコミット時タイムスタンプとを比較する。次にトランザクション処理部１は、スタート時タイムスタンプとコミット時タイムスタンプとが相違するときは、スタート時タイムスタンプより後のタイムスタンプを有する全ての部分更新履歴をＷＡＬ記憶部３から読み出し、それらの部分更新履歴中に、当該トランザクションが使用したレコード（参照または更新したレコード、或いは更新したレコード）に対するデータ操作命令の情報が存在するか否かを判定する。
【００８５】
トランザクション処理部１は、上記比較と判定の結果とに基づいて、上記トランザクションを成功させるか、失敗させるかを決定する。具体的には、スタート時タイムスタンプとコミット時タイムスタンプとが同じであるか、同じでなくても、スタート時タイムスタンプより後のタイムスタンプを有する全ての部分更新履歴中に、当該トランザクションが使用したレコード（参照または更新したレコード、或いは更新したレコード）に対するデータ操作命令の情報が存在しなければ、トランザクションを成功させる。しかし、スタート時タイムスタンプとコミット時タイムスタンプとが異なっており、しかも、スタート時タイムスタンプより後のタイムスタンプを有する部分更新履歴中に、当該トランザクションが使用したレコード（参照または更新したレコード、或いは更新したレコード）に対するデータ操作命令の情報が存在していれば、トランザクションを失敗させる。
【００８６】
トランザクション処理部１は、トランザクションを成功させると決定した場合、当該トランザクションにおけるデータ操作命令の情報と当該データ操作命令による処理で更新したレコードとコミット時タイムスタンプより後のタイムスタンプとを有する新たな部分更新履歴を作成して、当該トランザクションが使用したデータグループに対応してＷＡＬ記憶部３に現に記憶されている更新ログに追加する。更新ログは、キーとバリューの組で表現される１つのキーバリューデータであるため、ＣＡＳコマンド等を使用することで、データ操作のアトミック性を保証することができる。
【００８７】
他方、ＷＡＬ反映部４は、例えば定期的に、ＷＡＬ記憶部３に記憶されている更新ログ中のデータ操作命令の情報と当該データ操作命令による処理により変更されるレコードとに基づいて、ＫＶＳ２のＫＶデータを更新する。この更新をＣＡＳコマンド等を使用して行うことで、データ操作のアトミック性を保証することができる。
【００８８】
こうして本実施形態によれば、複数のＫＶデータを１つのＫＶデータにまとめてトランザクションを実行するシステムにおけるトランザクションの同時実行性を高めることが可能である。その理由は、レコード単位で楽観的な排他を行うためである。
【００８９】
以上、上記各実施形態を参照して本発明を説明したが、本発明は、上述した実施形態に限定されるものではない。本発明の構成や詳細には、本発明の範囲内で当業者が理解しうる様々な変更をすることができる。例えば、以下のような構成も本発明に含まれる。
【００９０】
ＷＡＬ記憶部に記憶するＷＡＬに記録するデータ操作命令の情報として、ＩＮＳＥＲＴ、ＤＥＬＥＴＥ、ＵＰＤＡＴＥ等の命令の情報と当該データ操作命令による処理により更新したレコードとに加えて、操作を行った列の情報を付加しておくことにより、レコード中の列単位で排他違反の有無を検出するようにしてもよい。
【００９１】
ＷＡＬ反映処理部は、ＫＶＳに反映した更新ログの複数の部分更新履歴のうち、タイムスタンプの新しい上位所定個数の部分更新履歴は削除せずに残しておき、削除せずに残しておいた反映済の部分更新領域を識別する情報を更新履歴に記録するようにしてもよい。
【００９２】
またＷＡＬ反映処理部は、トランザクションシステムを構成するＣＰＵのアイドル状態とＷＡＬ記憶手段を構成する記憶装置の使用量とに基づいて、更新ログのＫＶＳへの反映のタイミングを決定してよい。
【産業上の利用可能性】
【００９３】
本発明は、データ永続化手段としてＫＶＳを用いてトランザクションを実行するシステムにおいて利用可能である。
【符号の説明】
【００９４】
１…トランザクション処理部
２…ＫＶＳ
３…ＷＡＬ記憶部
４…ＷＡＬ反映処理部
５…ＷＡＬ管理部
６…排他チェック処理部
【図１】
2015191307.tif 000003
【図２】
2015191307.tif 000004
【図３】
2015191307.tif 000005
【図４】
2015191307.tif 000006
【図５】
2015191307.tif 000007
【図６】
2015191307.tif 000008
【図７】
2015191307.tif 000009
【図８】
2015191307.tif 000010
【図９】
2015191307.tif 000011
【図１０】
2015191307.tif 000012
【図１１】
2015191307.tif 000013
【図１２】
2015191307.tif 000014