JPWO2014068820A1 - トランザクションシステム - Google Patents
トランザクションシステム Download PDFInfo
- Publication number
- JPWO2014068820A1 JPWO2014068820A1 JP2014544217A JP2014544217A JPWO2014068820A1 JP WO2014068820 A1 JPWO2014068820 A1 JP WO2014068820A1 JP 2014544217 A JP2014544217 A JP 2014544217A JP 2014544217 A JP2014544217 A JP 2014544217A JP WO2014068820 A1 JPWO2014068820 A1 JP WO2014068820A1
- Authority
- JP
- Japan
- Prior art keywords
- wal
- transaction
- record
- data
- storage unit
- 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
Links
- 238000012545 processing Methods 0.000 claims abstract description 72
- 238000013500 data storage Methods 0.000 claims abstract description 45
- 238000007726 management method Methods 0.000 claims description 41
- 238000000034 method Methods 0.000 claims description 34
- 230000004931 aggregating effect Effects 0.000 claims description 3
- 230000007717 exclusion Effects 0.000 description 41
- 239000000047 product Substances 0.000 description 26
- 230000008569 process Effects 0.000 description 22
- 238000011156 evaluation Methods 0.000 description 11
- 239000000284 extract Substances 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 238000012217 deletion Methods 0.000 description 5
- 230000037430 deletion Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 238000000354 decomposition reaction Methods 0.000 description 3
- 230000002688 persistence Effects 0.000 description 3
- 238000013523 data management Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000006227 byproduct Substances 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2322—Optimistic concurrency control using timestamps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1474—Saving, restoring, recovering or retrying in transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
レコードデータ記憶部は、キーとバリューの組で表現されるレコードを記憶する。WAL(Write Ahead Logging)記憶部は、複数のレコードを集約したデータグループ単位で、その更新履歴を記憶する。トランザクション処理部は、データグループを参照および更新するトランザクションのコミット時、WAL記憶部に記憶された更新履歴に基づいて、レコード単位で排他違反の有無を判定し、排他違反がなければトランザクションを成功させ、その更新ログをWAL記憶部に記録する。WAL反映手段は、WAL記憶部に記憶されている更新ログ中のレコードの更新内容をレコードデータ記憶部に反映する。
Description
本発明は、各々がキーバリューストアである複数のレコードに対して参照および更新するトランザクションを実行するトランザクションシステム、トランザクションシステム制御方法、およびプログラムに関する。
近年、スケーラブルなアプリケーションの実行基盤として、多数のコンピュータを用いるいわゆるクラウドが注目されている。クラウドのインフラストラクチャにおいて、スケーラブルなデータ永続化手段として、キーバリューストア(Key Value Store(KVS))というものが広く知られている。しかしながら、通常のKVSでは1つのレコードに対するトランザクションしか提供できない。
そこで、各々がKVSである複数のレコードに対してトランザクションをサポートするシステムが本発明に関連する第1の関連技術として提案されている(例えば非特許文献1参照)。この第1の関連技術では、KVSで複数のレコードに対するトランザクションを実現するために、トランザクションで扱われる複数のレコードをグルーピングし、1つのKey Value(KV)データとしてKVSに書き込むことで、複数レコードに対するトランザクションを実現している。複数のレコードを1つのKVデータに集約したデータを、本明細書では、データグループと呼ぶ。
また上記第1の関連技術では、KVSに対する排他制御の仕組みとして、楽観的排他を使用している。具体的には、レコード(KVデータ)ごとにタイムスタンプが採番されており、あるトランザクションがスタートしたときに当該タイムスタンプを取得し、レコードを更新してコミットする際にタイムスタンプがトランザクションのスタート時から変化していなければ、タイムスタンプを1つインクリメントしてKVSに書き込む。コミット時にタイムスタンプが変化していれば、当該トランザクションがスタートしてからコミットするまでの間に他のトランザクションによって先にレコードが更新されていることになるので、当該トランザクションを失敗させる。楽観的排他では、排他制御情報などの共有資源を使用しないため、スケールアウトが容易になる。
他方、悲観的排他と呼ばれる排他制御の仕組みを採用したトランザクションシステムが本発明に関連する第2の関連技術として提案されている(例えば特許文献1参照)。この第2の関連技術では、トランザクションからのレコード更新要求に従うデータファイルの更新処理に際しては、更新するレコードへの同時アクセスを排他制御機構にて排他制御する。また、そのレコードの更新をバッファ上で行わせると共に、バッファ上でのレコード更新の履歴を生成する。トランザクションの確定時には、生成しておいたトランザクションに対応するレコード単位の更新履歴をジャーナルファイルに記録する。そして、当該ジャーナルファイルに記録した更新履歴に基づき書き込みバッファを通してブロック単位でデータファイルを更新する。
また、マスタサイトのマスタデータとローカルサイトの複製データとの同期を管理する共有データ管理システムにおいて、マスタデータの更新データをローカルサイトの複製データに反映させるタイミングを、更新の緊急度等に基づいて決定することが、本発明に関連する第3の関連技術として提案されている(例えば特許文献2参照)。
"ビッグデータの活用に最適なスケールアウト型 新データベース「InfoFrame Relational Store」、祐成光樹、田村稔、NEC技報、Vol.65 No.2/2012.
上述したようにスケーラブルなデータ永続化手段としてKVSが注目されており、またKVSで複数のレコードに対してトランザクションをサポートするシステムが提案されている。しかしながら、上述したKVSに対する楽観的な排他制御の仕組みでは、1つのレコード(KVデータ)単位の排他しか実現できない。複数のレコードを1つのKVデータにまとめてトランザクションを実行するシステムにおいては、まとめられた大きな1つのKVデータが排他の単位となるため、本来は排他違反にならないようなトランザクション同士も排他違反になってしまう可能性があり、トラザクションの同時実行性が下がり、スループットが下がってしまう問題がある。本発明に関連する第2の関連技術に示される悲観的排他を適用し、大きな1つのKVデータにまとめられる前のレコード単位で排他することが考えられるが、悲観的排他ではスケールアウトが困難になり、KVデータを使用する意味がなくなる。
本発明の目的は、上述した課題、すなわち、複数のレコードを1つのKVデータにまとめてトランザクションを実行するシステムではトランザクションの同時実行性が低下する、という課題を解決するトランザクションシステムを提供することにある。
本発明の第1の観点に係るトランザクションシステムは、
キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の上記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と、
上記データグループを参照および更新するトランザクションのコミット時、上記WAL記憶部に記憶された更新履歴に基づいて、上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記WAL記憶部に記録するトランザクション処理部と、
上記WAL記憶部に記憶されている上記更新履歴中のレコードの更新内容を上記レコードデータ記憶部に反映するWAL反映部と
を有する。
キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の上記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と、
上記データグループを参照および更新するトランザクションのコミット時、上記WAL記憶部に記憶された更新履歴に基づいて、上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記WAL記憶部に記録するトランザクション処理部と、
上記WAL記憶部に記憶されている上記更新履歴中のレコードの更新内容を上記レコードデータ記憶部に反映するWAL反映部と
を有する。
また本発明の第2の観点に係るトランザクションシステム制御方法は、
キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の上記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と、
トランザクション処理部と、
WAL反映部と
を有するトランザクションシステムの制御方法であって、
上記トランザクション処理部が、上記データグループを参照および更新するトランザクションのコミット時、上記WAL記憶部に記憶された更新履歴に基づいて、上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記WAL記憶部に記録し、
上記WAL反映部が、上記WAL記憶部に記憶されている上記更新履歴中のレコードの更新内容を上記レコードデータ記憶部に反映する。
また本発明の第3の観点に係るプログラムは、
キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の上記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と
を有するコンピュータを、
上記データグループを参照および更新するトランザクションのコミット時、上記WAL記憶部に記憶された更新履歴に基づいて、上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記WAL記憶部に記録するトランザクション処理部と、
上記WAL記憶部に記憶されている上記更新履歴中のレコードの更新内容を上記レコードデータ記憶部に反映するWAL反映部と
して機能させる。
キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の上記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と、
トランザクション処理部と、
WAL反映部と
を有するトランザクションシステムの制御方法であって、
上記トランザクション処理部が、上記データグループを参照および更新するトランザクションのコミット時、上記WAL記憶部に記憶された更新履歴に基づいて、上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記WAL記憶部に記録し、
上記WAL反映部が、上記WAL記憶部に記憶されている上記更新履歴中のレコードの更新内容を上記レコードデータ記憶部に反映する。
また本発明の第3の観点に係るプログラムは、
キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の上記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と
を有するコンピュータを、
上記データグループを参照および更新するトランザクションのコミット時、上記WAL記憶部に記憶された更新履歴に基づいて、上記レコード単位で排他違反の有無を判定し、排他違反がなければ上記トランザクションを成功させ、その更新履歴を上記WAL記憶部に記録するトランザクション処理部と、
上記WAL記憶部に記憶されている上記更新履歴中のレコードの更新内容を上記レコードデータ記憶部に反映するWAL反映部と
して機能させる。
本発明は上述した構成を有するため、複数のレコードを1つのKVデータにまとめてトランザクションを実行するシステムにおけるトランザクションの同時実行性を高めることが可能である。
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第1の実施形態]
[構成]
図1を参照すると、本発明の第1の実施形態にかかるトランザクションシステムは、トランザクション処理部100、WAL記憶手段200、WAL反映手段300、レコードデータ記憶手段400、システムカタログ500を備え、トランザクション処理部100はさらにWAL管理手段101、リード/ライトセット管理手段102、排他チェック処理部103を備え、排他チェック処理部103はさらにWALデータ分解手段113とレコードデータ照合手段123を備える。
[第1の実施形態]
[構成]
図1を参照すると、本発明の第1の実施形態にかかるトランザクションシステムは、トランザクション処理部100、WAL記憶手段200、WAL反映手段300、レコードデータ記憶手段400、システムカタログ500を備え、トランザクション処理部100はさらにWAL管理手段101、リード/ライトセット管理手段102、排他チェック処理部103を備え、排他チェック処理部103はさらにWALデータ分解手段113とレコードデータ照合手段123を備える。
トランザクション処理部100は、1以上備えられている。各々のトランザクション処理部100は、アプリケーション(アプリケーションプログラム)600から入力されたトランザクションを受け付け、当該トランザクションを処理する手段である。各々のトランザクション処理部100は、他のトランザクション処理部100と並行して動作する。
WAL管理手段101は、アプリケーション600から入力されたトランザクションに対して、当該トランザクションが使用するレコードを論理的にまとめたデータグループを作成し、その更新内容をCAS(Compare And Swap)コマンド等を使用して、WALとしてWAL記憶手段200に対して書き込んだり、読み出したりする手段である。
ここで、WAL(Write Ahead Log)について説明する。一般にWrite Ahead Loggingとは、データベースに対する操作前の変更内容をログに書き出すことを指し、WALとはログそのものを指す。このように、データベースへの変更は、先ずログに記録され、次いで、ログからデータベースへ反映される。
WAL記憶手段200は、WAL管理手段101によって生成、または更新されたWALを保存する手段である。WAL記憶手段200は、複数のトランザクション処理部100に共通に備えられる。本実施形態において、WAL記憶手段200はKVSによって構成されており、WAL自体もKeyとValueからなるKVデータとして保存される。KVSは、例えばCASコマンドを使用することにより、1つのKVデータに対するアトミック性は保証することができるが、複数のレコードを一度のトランザクションでアトミックに処理することはできない。このため、複数のレコードを論理的にまとめたデータグループを作成し、このデータグループに対する更新内容をWALとしてKVSに書き込むことで複数レコードをトランザクショナルに処理することを可能としている。
リード/ライトセット管理手段102は、アプリケーション600から入力されたトランザクションで参照や更新したレコードの情報などを抽出する手段である。リード/ライトセット管理手段102で抽出された参照レコードや更新レコードの情報などは、排他チェック処理部103に渡される。
排他チェック処理部103は、トランザクションをコミットする際に、当該トランザクションがスタートしてからコミットするまでにWAL記憶手段200に追加されたWALのデータと、リード/ライトセット管理手段102から渡される、当該トランザクションで参照や更新したレコードとを比較して、同じレコードが存在する場合はトランザクションを失敗させ、同じレコードが存在しない場合はトランザクションを成功させる。トランザクションが成功した場合は、WAL管理手段101が、当該トランザクションによる更新内容をWALとしてWAL記憶手段200に書き込む。
WALデータ分解手段113は、WAL記憶手段200から取得したWALデータをレコード単位に分解してWALデータに含まれるレコードデータを取得する手段である。
レコードデータ照合手段123は、当該トランザクションで参照や更新したレコードと、WALに含まれるレコードデータとを比較して、同じレコードがあるかどうかを調べ、同じレコードが存在する場合はトランザクションを失敗させ、同じレコードが存在しない場合はトランザクションを成功させる手段である。
WAL反映手段300は、WAL記憶手段200に記憶されているWALに含まれるレコードデータをレコードデータ記憶手段400に反映し、反映したWALをWAL記憶手段200から削除する。WAL反映手段300が動作するタイミングはタイマーで指定してもよいし、システム管理者等が任意のタイミングで行っても良い。
レコードデータ記憶手段400は、レコードデータを保存しておく手段である。本実施形態において、レコードデータ記憶手段400はKVSによって構成されており、レコードデータはKeyとValueからなるKVデータとして保存される。なお、WAL記憶手段200とレコードデータ記憶手段400は、図1では別々のKVSとして表現されているが、1つのKVSにまとめても良い。
システムカタログ500は、レコードデータ記憶手段400に保存されているデータのメタ情報や、トランザクションを実行する際に作成するデータグループの情報などのデータを保存する手段である。アプリケーション600からトランザクションが入力された時、WAL管理手段101はシステムカタログ500からデータグループに関連する情報を抽出し、抽出された情報を元に当該トランザクションで使用するデータグループを特定する。
[動作]
次に、本実施形態の動作について説明する。本実施形態は図2に示すフローチャートに従って動作を行う。
次に、本実施形態の動作について説明する。本実施形態は図2に示すフローチャートに従って動作を行う。
まず、トランザクション入力のステップS001で、アプリケーション600が本システムに対してトランザクションを入力する。
次に、WAL特定のステップS002で、WAL管理手段101が、入力されたトランザクションを解析し、システムカタログ500の情報を用いて当該トランザクションで処理するデータが所属するデータグループを特定し、当該データグループのこれまでの更新内容が保存されているWALを特定する。本システムにおいて、WALとはトランザクションで扱われる複数のレコードを論理的にまとめたデータグループの更新内容の履歴を1つのKVデータにまとめたものである。
ここで、本システムにおけるデータグループの概念を説明する。図3に示すような二種類のデータ、すなわち、商品テーブルT001と入札テーブルT002があるとする。このようなデータに対して、以下のようなトランザクションを実行するとする。
「ユーザーが新たに入札を行った際に、商品テーブルと入札テーブルのデータを更新する」
「ユーザーが新たに入札を行った際に、商品テーブルと入札テーブルのデータを更新する」
このようなトランザクションを処理する場合、商品テーブルのデータと入札テーブルのデータをアトミックに更新しなければならない。しかし、KVSは1つのKVデータに対するアトミック性しか保証していないため、例えば、商品テーブルのデータを更新したあと、入札テーブルのデータの更新に失敗した場合、商品テーブルのデータだけが更新された状態になってしまい、アトミック性が保証されないという問題がある。
そこで、トラザクションに関連する複数のデータを論理的にまとめて1つのKVデータとし、複数のデータ更新を1回のKVSに対する書き込みで実現することでトラザクションのアトミック性を保証する。
データグループを作成するには、まず各データで共通するKey(図3の例では商品ID)を抽出する。図3に示すデータからは、図4に示すような3つのグループ(G001、G002、G003)が論理的にまとめられる。
次に、本システムにおけるWALの概念を説明する。図3に示すデータに対して以下のような2つのトランザクションが順番に実行されたとする。
最初のトランザクション:「入札テーブルT002のIDがb1のレコードの入札額を12000に更新し、商品テーブルT001の商品IDがi1の最高金額を12000に更新する」
二番目のトランザクション:「入札テーブルT002のIDがb2のレコードの入札額を13000に更新し、商品テーブルT001の商品IDがi1の最高金額を13000に更新する。」
最初のトランザクション:「入札テーブルT002のIDがb1のレコードの入札額を12000に更新し、商品テーブルT001の商品IDがi1の最高金額を12000に更新する」
二番目のトランザクション:「入札テーブルT002のIDがb2のレコードの入札額を13000に更新し、商品テーブルT001の商品IDがi1の最高金額を13000に更新する。」
まず、最初のトランザクション1によって商品テーブルT001の1行目のデータと入札テーブルT002の1行目のデータが更新され、二番目のトランザクション2によって商品テーブルT001の1行目のデータと入札テーブルT002の2行目のデータが更新される。これらの2つのトランザクションで更新されるデータは全て同じデータグループに所属しているため、これらのトランザクションによる更新結果は1つのWALに記録される。WALは以下のような情報で構成される。
・当該WALを識別するためのKey値
・トランザクションによる更新結果
・当該WALを識別するためのKey値
・トランザクションによる更新結果
WALはKVデータであるため、(Key,Value)の組で表される。Key値としてデータグループで共通のKey値にWALであることを示す接頭辞を付加したものを用いる。上記の例では、WAL_i1が当該WALのKey値となる。Value値にはトランザクションによる更新結果が含まれる。具体的には、以下のようにWALが構成される。
WAL=(Key,Value)=(WAL_i1,<[{i1,AAA,10,5,12000},{b1,i1,u3,12000},タイムスタンプ1],[{i1,AAA,10,5,13000},{b2,i1,u1,13000},タイムスタンプ2]>)
WAL=(Key,Value)=(WAL_i1,<[{i1,AAA,10,5,12000},{b1,i1,u3,12000},タイムスタンプ1],[{i1,AAA,10,5,13000},{b2,i1,u1,13000},タイムスタンプ2]>)
タイムスタンプは当該WALに対するトランザクションが実行された順番を表している。タイムスタンプは単純な数値で表されていれば良い。このように、WALはあるデータグループに対する更新履歴を表している。
WAL特定のステップS002でWAL管理手段101は、具体的には以下のようにWALを特定する。
まず、WAL管理手段101は、入力されたトランザクションから、当該トランザクションで利用されるテーブルを抽出し、システムカタログ500から当該トランザクションで利用されるテーブル間のデータグループに関係する情報を抽出する。
システムカタログ500には、テーブルのスキーマ情報のほかに、どのテーブルがどの列でデータグループを構成するのかという情報が格納されている。例えば、図3に示すようなデータの場合には、「商品テーブルT001と入札テーブルT002でデータグループを構成し、データグループを構成する際のKeyは商品IDである。」という情報が格納されている。
WAL管理手段101は、入力されたトランザクションとシステムカタログ500の情報から、当該トランザクションが利用するデータグループを特定する。例えば、「入札テーブルT002のIDがb1のレコードの入札額を12000に更新し、商品テーブルT001の商品IDがi1の最高金額を12000に更新する」というトランザクションが入力された場合は、当該トランザクションが利用するテーブルが商品テーブルT001と入札テーブルT002であることが分かり、システムカタログ500から商品テーブルT001と入札テーブルT002が商品IDでグループ化されていることが分かる。これにより、取得すべきWALがWAL_i1であることが分かり、当該トランザクションが利用するWALが特定できる。
次に、WAL特定のステップS002で特定されたWALの情報を用いて、WAL管理手段101がWAL記憶手段200からWALを取得する(ステップS003)。ここで、WAL記憶手段200にWALが存在する場合は、WAL取得のステップS004でWAL管理手段101がWAL記憶手段200からWALを取得する。このとき、後の排他チェックで使用するために、当該WALの最新のタイムスタンプをWAL記憶手段200から取得しておく。
ここで、図5を用いてWAL記憶手段200にWALがどのように保存されているのかを説明する。
WALはWAL記憶手段200の中でそれぞれのWALごとに履歴を持って保存されている。例えば、あるトランザクションがWAL_i1を用いてトランザクションを実行すると、WAL_i1のタイムスタンプ1としてWALが蓄積され、次のトランザクションでWAL_i1を用いてトランザクションを実行すると、WAL_i1のタイムスタンプ2としてWALが蓄積される。次のトランザクションでWAL_i2を用いてトランザクションを実行するとWAL_i2のタイムスタンプ1としてWALが蓄積される。
それぞれのWALに含まれるレコードについて、タイムスタンプの値が古いものから順番にWALのデータを確認すれば、各レコードの更新履歴や最新のレコード値を知ることができる。
WAL記憶手段200に該当するWALが存在しない場合は、レコード取得のステップS006で、WAL管理手段101がレコードデータ記憶手段400から当該トランザクションで利用するレコードデータを取得する。
ここでレコードデータ記憶手段400にレコードがどのように保存されているのかを説明する。レコードデータ記憶手段400はKVSであるため、レコードデータは(Key,Value)の組で表されるデータとして保存されている。
図3に示すようなレコードデータは、主キーがKey値となり、それ以外の列がValue値として保存されている。具体的には、以下のように保存されている。
(Key,Value)=(i1,{AAA,10,5,10000})
(Key,Value)=(b1,{i1,u3,9000})
(Key,Value)=(i1,{AAA,10,5,10000})
(Key,Value)=(b1,{i1,u3,9000})
WAL記憶手段200に該当するWALが存在する場合でも、WAL記憶手段200に保存されているWALの中に必要なレコードデータが全て含まれていない場合がある。以下にその場合の例を示す。
例えば、トランザクション1で以下のようなトランザクションを実行したとする。
「入札テーブルT002のIDがb1のレコードの入札額を12000に更新し、商品テーブルT001の商品IDがi1の最高金額を12000に更新する」
このときWALは存在せず、新たにWAL_i1のWALが作成され、WAL記憶手段200に保存されたとする。このとき、WAL_i1のWALとして保存されるWALは以下のようなものであり、レコードデータとしては、商品テーブルT001の1行目のレコードと入札テーブルT002の1行目のレコードが含まれる。
WAL=(WAL_i1,[{i1,AAA,10,5,12000},{b1,i1,u3,12000},1])
次に、トランザクション2で以下のようなトランザクションを実行したとする。
「入札テーブルT002のIDがb2のレコードの入札額を13000に更新し、商品テーブルT001の商品IDがi1の最高金額を13000に更新する。」
WAL管理手段101は上記のトランザクション2が入力されると、WAL_i1を特定し、WAL記憶手段200からWAL_i1のWALを取得する。このとき、WAL_i1にはタイムスタンプが1のWALのみが含まれており、当該WALの中にはレコードデータとして、商品テーブルT001の1行目のレコードと入札テーブルT002の2行目のレコードが含まれている。しかし、トランザクション2では、商品テーブルT001の1行目のレコードと、入札テーブルT002の2行目のレコードを更新するため、WALを取得しただけでは、トランザクションに必要なデータが全て揃わない。
「入札テーブルT002のIDがb1のレコードの入札額を12000に更新し、商品テーブルT001の商品IDがi1の最高金額を12000に更新する」
このときWALは存在せず、新たにWAL_i1のWALが作成され、WAL記憶手段200に保存されたとする。このとき、WAL_i1のWALとして保存されるWALは以下のようなものであり、レコードデータとしては、商品テーブルT001の1行目のレコードと入札テーブルT002の1行目のレコードが含まれる。
WAL=(WAL_i1,[{i1,AAA,10,5,12000},{b1,i1,u3,12000},1])
次に、トランザクション2で以下のようなトランザクションを実行したとする。
「入札テーブルT002のIDがb2のレコードの入札額を13000に更新し、商品テーブルT001の商品IDがi1の最高金額を13000に更新する。」
WAL管理手段101は上記のトランザクション2が入力されると、WAL_i1を特定し、WAL記憶手段200からWAL_i1のWALを取得する。このとき、WAL_i1にはタイムスタンプが1のWALのみが含まれており、当該WALの中にはレコードデータとして、商品テーブルT001の1行目のレコードと入札テーブルT002の2行目のレコードが含まれている。しかし、トランザクション2では、商品テーブルT001の1行目のレコードと、入札テーブルT002の2行目のレコードを更新するため、WALを取得しただけでは、トランザクションに必要なデータが全て揃わない。
このように、WAL管理手段101はWAL記憶手段200からWALを取得した後に、当該トランザクションの処理に必要なデータが当該WALの中に全て含まれているかをチェックする(ステップS005)。もし、必要なデータがWALの中に含まれていない場合は、レコードデータ記憶手段400から必要な分のレコードを取得する(ステップS006)。
WALやレコードデータからトランザクションに必要なデータを全て取得したら、それらのデータを使用してトランザクションの処理を進める。そして、トランザクション実行のステップS007で、WAL管理手段101が、当該トランザクションによるデータグループの更新イメージを新たにWALとして作成する。この時点ではまだWAL管理手段101はWAL記憶手段200に新たに作成したWALを書き込まない。
次に、参照・更新レコード抽出のステップS008で、リード/ライトセット管理手段102は当該トランザクションで参照や更新したレコード情報を抽出する。具体的には、WAL管理手段101から当該トランザクションで更新や参照したレコードの情報と、当該トランザクションのスタート時点のタイムスタンプ情報を取得する。なお、リード/ライトセット管理手段で保持しておくレコード情報はレコードデータ全体である必要はなく、各レコードのKey値だけで十分である。
リード/ライトセット管理手段102は、排他チェック処理部103に対して、保持しているレコード情報を出力するが、このとき、参照したレコード情報と更新したレコード情報とを含む全てのレコード情報を出力してもよいし、更新したレコードの情報だけを出力してもよい。参照と更新のすべてのレコード情報を出力するか、更新したレコード情報だけを出力するかで、トランザクション間のIsolationレベルを調整することができる。どの種別のレコード情報を出力するかは、システムが起動する前にシステム管理者などが予め設定しておけばよい。
次に、排他チェックのステップS009で、排他チェック処理部103は当該トランザクションがスタートしてから現時点までにWAL記憶手段200に追加されたWALデータと、リード/ライトセット管理手段102から渡される当該トランザクションで参照や更新したレコードとを比較して(ステップS010)、同じレコードが存在する場合はトランザクションを失敗させ(ステップS012)、同じレコードが存在しない場合はトランザクションを成功させる(ステップS011)。
具体的には、排他チェック処理部103はまず、リード/ライトセット管理手段102から当該トランザクションで参照や更新されたレコードデータとスタート時点のタイムスタンプの値を受け取る。次に、WAL記憶手段200から当該トランザクションで使用されたWALを取得する。
WAL記憶手段200から取得したWALの最新のタイムスタンプがリード/ライトセット管理手段102から受け取ったスタート時点のタイムスタンプと同じ値の場合は、当該トランザクションがスタートしてから現時点までの間に当該WALに関連する他のトランザクションが実行されていないことになるため、トランザクションを成功させる。
WAL記憶手段200から取得したWALの最新のタイムスタンプが、リード/ライトセット管理手段102から受け取ったスタート時点のタイムスタンプの値より大きな値の場合は、当該トランザクションがスタートしてから現時点までの間に当該WALに関連する他のトランザクションが実行されていることを意味するため、排他違反がないかチェックする。
排他違反チェックは以下のようにして実行される。まず、WALデータ分解手段113が、WAL記憶手段200から取得したWALデータのうち、リード/ライトセット管理手段102から受け取ったタイムスタンプの値より大きなタイムスタンプの値を持つWALデータを全て抽出する。そして、抽出したWALデータをレコード単位に分解して当該WALデータに含まれるレコードデータを抽出する。
次に、レコードデータ照合手段123が、抽出したWALデータに含まれるレコードデータと、リード/ライトセット管理手段102から受け取ったレコードデータに一致するものが含まれるかどうかをチェックする。もし、一致するものが1つでも存在する場合は排他違反が発生しているため、トランザクションを失敗させる。一致するものが存在しない場合は排他違反が発生していないため、トランザクションを成功させる。
排他チェック処理部103がトランザクションを成功させる場合、失敗させる場合を説明する概念図を図6、図7、図8に示す。
図6は、トランザクションがスタートしてから排他チェック処理部103が排他チェックを実行するまでの間に当該WALに更新が無かった場合の例である。この場合、当該トランザクションが実行されている間に当該WALに関連する他のトランザクションが実行されていないため、当該トランザクションは成功する。
図7は、トランザクションがスタートしてから排他チェック処理部103が排他チェックを実行するまでの間に当該WALに更新があった場合の例である。この場合、排他チェック処理部103で持っているスタート時点のタイムスタンプ値より大きなタイムスタンプ値を持つWALデータを抽出する。図7の例では、タイムスタンプが3のWALデータを取得する。図7の例では、タイムスタンプが3のWALデータにはレコードAとレコードDが含まれている。つまり、当該トランザクションがスタートしてから排他チェック処理部103が排他チェックを実行するまでの間に、他のトランザクションがレコードAとレコードDを更新するトランザクションを実行したことを意味している。ここで、当該トランザクションを実行するとレコードAに関して排他違反が発生するため、当該トランザクションを失敗させる。
図8は、トランザクションがスタートしてから排他チェック処理部103が排他チェックを実行するまでの間に当該WALに更新があった場合の例である。この場合、排他チェック処理部103で持っているスタート時点のタイムスタンプ値以上のタイムスタンプ値を持つWALデータを抽出する。図8の例ではタイムスタンプ値が3のWALデータを取得する。図8の例では、タイムスタンプが3のWALデータにはレコードCとレコードDが含まれている。つまり、当該トランザクションがスタートしてから排他チェック処理部103が排他チェックを実行するまでの間に、他のトランザクションがレコードCとレコードDを更新するトランザクションを実行したことを意味している。ここで、当該トランザクションを実行してもレコードレベルでは排他違反は発生していないため、当該トランザクションを成功させる。
排他チェック処理部103で排他違反が検出されなかった場合は、排他チェック処理部103はWAL管理手段101にトランザクションのコミットを要求する。WAL管理手段101はトランザクションのコミットが要求されると、当該トランザクションのWALデータをWAL記憶手段200に書き込む(ステップS011)。このとき、書き込むWALのタイムスタンプの値は、WAL記憶手段200に記憶されている最新のタイムスタンプの次の値とする。例えば図6の場合、更新後のレコードA、Bに値3のタイムスタンプを付加して書き込む。また例えば図8の場合、更新後のレコードA、Bに値4のタイムスタンプを付加して書き込む。
排他チェック処理部103で排他違反が検出された場合は、排他チェック処理部103はWAL管理手段101にトランザクションのアボートを要求する。WAL管理手段101はトランザクションのアボートが要求されると、当該トランザクションのWALデータを破棄する(ステップS012)。
次に、本実施形態においてWALデータをレコードデータ記憶手段400に反映する動作について説明する。WALデータの反映は図9に示すフローチャートに従って動作を行う。
まず、WALデータ取得のステップS101でWAL反映手段300がWAL記憶手段200から、記憶されているWALデータを全て取得する。
WAL記憶手段200にWALデータが存在しない場合はWAL反映の処理を終了する(ステップS102のno)。
WAL記憶手段200にWALデータが存在する場合(ステップS102のyes)は、WALデータ反映のステップS103でWAL反映手段300がWAL記憶手段200から取得したWALデータに含まれるレコードデータを抽出し、抽出したレコードデータをレコードデータ記憶手段400に反映させる。
WAL反映手段300がWAL記憶手段200から取得したWALデータには同じレコードデータが複数含まれている場合がある。同じレコードデータが複数含まれている場合は、タイムスタンプがもっとも大きな値のWALに含まれるレコードデータが当該レコードデータについて最新のデータであるため、これを反映する。
図10を用いて具体的に説明する。WAL反映手段300がWAL記憶手段200から図10に示すようなWALを取得した場合、レコードAについては、タイムスタンプが1のWALデータに含まれるものが最新のため、このデータをレコードデータ記憶手段400に反映する。レコードBとレコード Cについては、タイムスタンプが3のWALデータに含まれるものが最新のため、このデータをレコードデータ記憶手段400に反映する。
最後に、WALデータ削除のステップS104でWAL反映手段300がWAL記憶手段200から抽出し、反映したWALデータを削除する。WAL反映手段300がWAL記憶手段200からデータを取得し、反映するまでの間にトランザクションが実行され、新たなWALが追加されている可能性があるが、新たに追加されたWALについては削除しない。
あるレコードについて、WALにデータが存在する場合は、WALに保存されているレコードデータが当該レコードについて最新の情報であり、WAL反映手段300がレコードデータ記憶手段400にレコードデータを反映した時点で当該レコードに対する最新のデータがレコードデータ記憶手段400に保存される。あるレコードについてWALにデータが存在しない場合は、レコードデータ記憶手段400に保存されているレコードデータが当該レコードについて最新の情報となる。
なお、アプリケーションから入力されたトランザクションを処理するプロセスと、WALを反映するプロセスはそれぞれ並列に動作している。WALを反映するプロセスはタイマーによって一定時間ごとに行われてもよいし、システム管理者等が任意のタイミングで行っても良い。
[効果]
本実施形態は、KVSに対して複数レコードのトランザクションをサポートするシステムに対して、トランザクションの排他制御を行う際に、トランザクションを実行するデータグループ単位で排他制御を行うのではなく、当該トランザクションで参照や更新したレコード単位で排他制御を行うことで、トランザクションの排他単位を小さくすることができ、トランザクションの同時実効性を高めスループットを上げることができる。
本実施形態は、KVSに対して複数レコードのトランザクションをサポートするシステムに対して、トランザクションの排他制御を行う際に、トランザクションを実行するデータグループ単位で排他制御を行うのではなく、当該トランザクションで参照や更新したレコード単位で排他制御を行うことで、トランザクションの排他単位を小さくすることができ、トランザクションの同時実効性を高めスループットを上げることができる。
[第2の実施形態]
次に、本発明の第2の実施形態について説明する。
次に、本発明の第2の実施形態について説明する。
図11に示すように、本実施形態は図1に示した第1の実施形態の構成要素に加えて、WAL反映手段300の中にWAL削除制御手段301を備える点で異なる。
本実施形態では、WAL反映手段300はWALデータをレコードデータ記憶手段400に反映させた後に、反映させた全てのWALデータを削除するのではなく、一定量のWALデータを削除せず残しておく。
図12に本実施形態におけるWAL反映手段300によるWALデータ管理の概念図を示す。WAL反映手段300が処理実行時にタイムスタンプ1からタイムスタンプ6までのWALデータが存在したとする。WAL削除制御手段301には、WALデータ反映後のWALデータ削除時に、反映済みのWALデータのうち、どれぐらいのWALデータを削除せずに残しておくかの情報を持っている。図12に示す例ではWAL削除制御手段301は3個のWALデータを削除せずに残しておくという情報を持っている。なお、タイムスタンプ7からタイムスタンプ9までのWALデータは、WAL反映手段300によってWAL反映処理が開始してからWAL反映処理が終了するまでの間に実行されたトランザクションによって新たに生成されたWALデータである。このように新たなWALデータはトランザクションの実行によって逐次蓄積されている。
本実施形態におけるWAL反映処理は基本的には図9に示すフローチャートと同様の手順で動作を行う。
まず、WALデータ取得のステップS101でWAL反映手段300がWAL記憶手段200からそこに記憶されているWALデータを全て取得する。
次に、WALデータ反映のステップS102でWAL反映手段300がWAL記憶手段200から取得したWALデータに含まれるレコードデータを抽出し、抽出したレコードデータをレコードデータ記憶手段400に反映させる。
最後に、WALデータ削除のステップS103で、WAL削除制御手段301が、反映したWALデータのうちタイムスタンプが大きな値のものから順番にN個(Nは自然数)だけ残して、WALデータを削除する。すなわち、タイムスタンプの新しい上位所定個数のWALデータは削除せずに残しておく。
次に、反映したWALデータを全て削除せずに一部残しておくことの効果について説明する。トランザクションの実行プロセスとWAL反映のプロセスはそれぞれ並列に動作しているため、トランザクションがスタートしてからコミットするまでの間にWAL反映のプロセスが動作する可能性がある。
もし、あるトランザクションがスタートしてからコミットするまでの間にWAL反映処理が動作した場合、当該トランザクションに関連するWALデータはWAL記憶手段200から全て削除されてしまう。WALデータが削除された後に当該トランザクションの排他チェックを実行しようとしても、WALデータが存在しないため排他違反があるのかないのかが判断できない。このため、本来成功するはずのトランザクションも失敗することになる。これに対して、WAL反映処理によって全てのデータが削除されず、トランザクションの排他チェックのために十分なWALデータが残っていれば当該トランザクションの排他違反を正確に検出できる。
例えば、本発明の第1の実施形態で参照した図6乃至図8においては、右側の破線内のWALの状態に基づいて、図6および図8の場合は排他違反無し、図7の場合は排他違反有りが検出された。若し、図6乃至図8において、右側の破線内のWALが全て削除されてしまっていると、そのような検出は困難になる。従って、安全を考えて図6乃至図8の全てのケースにおいて排他違反有りと判断せざるを得ず、トランザクションの同時実行性が低下する。
このように、本実施形態では、WAL反映手段300によって反映したWALデータを全て削除するのではなく、一部のWALデータを残しておくことによって、WALデータが存在しないためにトランザクションの実行が失敗してしまうという事態を避け、本来失敗しないはずのトランザクションを成功させることができ、トランザクションの同時実行性を向上させスループットを上げることができる。
なお、どれぐらいの量のWALを削除せずに残しておくかは、求めるトランザクションの同時実行性、使用する記憶容量とのトレードオフである。使用する記憶容量を抑えるためには、残しておくWALは少なくすべきであり、トランザクションの同時実行性を上げるためには、残しておくWALは多くすべきである。
WAL削除制御手段301が管理する、残しておくWALの量は固定値であってもよいし、WALが存在しないために排他チェックが行えず失敗したトランザクションの量からフィードバックを受けて自動で調整されてもよい。つまり、排他チェックが行えず失敗したトランザクションの量が多いならば残しておくWALの量を大きくし、排他チェックが行えずに失敗したトランザクションの量が少ないなら残しておくWALの量を少なくすればよい。
また、本実施形態におけるWALの構造は、以下のようになっている。
・当該WALを識別するためのKey値
・データグループに対する更新結果
・WAL反映位置
・当該WALを識別するためのKey値
・データグループに対する更新結果
・WAL反映位置
即ち、第1の実施形態と比較して、新たにWAL反映位置が追加されている。これは、WALデータのうちレコードデータ記憶手段400に反映済みのデータ位置を示している。図12に示すWALデータの例では、WAL反映位置はタイムスタンプ6となる。WAL管理手段101などがWAL記憶手段200からWALデータを取得した際にWAL反映位置を参照することによって、WALデータのうち、どのデータがレコードデータ記憶手段400に反映済みであるのかが分かる。同様に、WAL反映手段300は、WAL記憶手段200からWALデータを取得する際にWAL反映位置を参照することによって、WALデータのうち、どのデータがレコードデータ記憶手段400に既に反映済みであるのかが分かる。
[第3の実施形態]
次に、本発明の第3の実施形態について説明する。
次に、本発明の第3の実施形態について説明する。
図13に示すように、本実施形態は図1に示した第1の実施形態の構成要素に加えて、WAL反映タイミング制御手段310を備える点で異なる。
本実施形態では、WAL反映手段300は一定時間ごとやシステム管理者等による動作指示ではなく、WAL反映タイミング制御手段310からの指示によってWAL反映処理を実行する。
WAL反映処理はすべてのWALに含まれるレコードデータをレコードデータ記憶手段400に反映するため、負荷が高い処理である。このため、アプリケーションから頻繁にトランザクションが入力されているようなシステムに高い負荷がかかっているときにWAL反映処理が動作するとシステムにさらに負荷がかかってしまい、トランザクションの処理性能に悪影響を及ぼす。他方、WALはレコードデータに対する更新履歴が全て含まれているため、WALを反映せずに残しておくと、WALを保存するための記憶装置の使用容量が大きくなってしまう。
WAL反映タイミング制御手段310は、現在のシステムの負荷状況や記憶装置の使用量を監視して、システムの負荷が低い場合や、記憶装置の使用量が大きくなってきた場合にWAL反映手段300に動作を指示する。
例えば、以下のような評価式を用いて、評価値がある閾値を超えた場合にWAL反映タイミング制御手段310は、WAL反映手段300に動作を指示する。
評価値=W1*CPUのアイドル状況+W2*(記憶装置の使用量/記憶装置の全容量)
評価値=W1*CPUのアイドル状況+W2*(記憶装置の使用量/記憶装置の全容量)
上記評価式において、W1やW2は重み係数であり、システムの負荷の状況と記憶装置の使用量のどちらを優先するかを調整することができる。例えば、W1を大きくした場合は、よりシステムの負荷状況を優先した動作になる。W1やW2などの重み係数や、評価式に対する閾値などはシステム管理者がシステム起動前に予め設定しておけばよい。
本実施形態におけるWAL反映処理のフローチャートを図14に示す。
まず、評価値計算のステップS301で、WAL反映タイミング制御手段310が評価値の計算を行う。
次に、WAL反映タイミング制御手段310は、ステップS301で計算した評価値が閾値を超えているかどうかを判定する(ステップS302)。評価値が閾値を超えていない場合は、評価値計算のステップS301に戻る。評価値が閾値を超えている場合は、WAL反映タイミング制御手段310はWAL反映手段300に動作指示を行う。
WAL反映タイミング制御手段310から動作指示を受けたWAL反映手段300は、WAL反映処理を実行する。ステップS304以降の動作は図9に示したWAL反映の動作フローと同じため説明を割愛する。
このように、本実施形態では、WAL反映タイミング制御手段310がシステムの負荷状況や記憶装置の使用量などを考慮してWAL反映の動作タイミングを制御することで、本システムが稼動しているコンピュータの資源を有効に使うことができる。
[第4の実施形態]
図15は、本発明の第4の実施形態のブロック図である。図15に示すように、本実施形態は、1以上のトランザクション処理部1と、レコードデータ記憶部2と、WAL記憶部3と、WAL反映部4とを有する。
図15は、本発明の第4の実施形態のブロック図である。図15に示すように、本実施形態は、1以上のトランザクション処理部1と、レコードデータ記憶部2と、WAL記憶部3と、WAL反映部4とを有する。
レコードデータ記憶部2は、半導体メモリや磁気ディスク等で構成され、キーとバリューの組で表現されるレコードを記憶する。
WAL記憶部3は、半導体メモリや磁気ディスク等で構成され、複数の上記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶する。好ましくは、WAL記憶部3は、キーとバリューの組で表現される更新ログを記憶する。上記キーは、複数の上記レコードを集約したデータであるデータグループを一意に識別する値である。また上記バリューは、上記データグループの更新履歴を表す。さらに上記更新履歴は、1以上の部分更新履歴を有する。そして、1つの上記部分更新履歴は、上記データグループを構成する上記レコードの更新内容と更新の順番を表すタイムスタンプとを有する。
トランザクション処理部1は、図示しないアプリケーションプログラム等から入力されたトランザクションを実行する機能を有する。トランザクション処理部1は、上記データグループを参照および更新するトランザクションのコミット時、WAL記憶部3に記憶された更新履歴に基づいて、レコード単位で排他違反の有無を判定し、排他違反がなければ当該トランザクションを成功させ、その更新履歴をWAL記憶部3に記録する。好ましくは、トランザクション処理部1は、主な機能部として、WAL管理部5と排他チェック処理部6とを有する。
WAL管理部5は、入力されたトランザクションで使用する上記データグループを構成する上記レコードの最新の値をWAL記憶部3およびレコードデータ記憶部2から取得する機能を有する。またWAL管理部5は、当該データグループに対応する上記更新ログ中の最新の上記タイムスタンプをスタート時タイムスタンプとしてWAL記憶部3から取得する機能を有する。
排他チェック処理部6は、トランザクション処理部1で実行しているトランザクションのコミット時、当該トランザクションのスタート時に取得しておいた上記スタート時タイムスタンプと、WAL記憶部3に現に記憶されている上記データグループの最新のタイムスタンプであるコミット時タイムスタンプとを比較する機能を有する。また排他チェック処理部6は、上記の比較の結果、スタート時タイムスタンプとコミット時タイムスタンプとが相違するときは、スタート時タイムスタンプより後のタイムスタンプを有する部分更新履歴中に、当該トランザクションが使用したレコードと一致するレコードが存在するか否かを判定する機能を有する。さらに排他チェック処理部6は、上記比較と上記判定の結果とに基づいて、上記トランザクションを成功させるか、失敗させるかを決定し、成功させると決定した場合、上記トランザクションで更新したレコードの更新内容とコミット時タイムスタンプより後のタイムスタンプとを有する新たな部分更新履歴を、上記データグループに対応してWAL記憶部3に現に記憶されている更新ログに追加する機能を有する。
WAL反映部4は、WAL記憶部3に記憶されている更新履歴中のレコードの更新内容をレコードデータ記憶部2に反映する機能を有する。
本実施形態のトランザクションシステムは、例えば、MPU等のプロセッサとそれに接続されたメモリ、入出力装置、通信インターフェイス等を有するコンピュータと、当該コンピュータで実行されるプログラムとで実現することができる。プログラムは、磁気ディスク装置等のコンピュータ可読記録媒体に記録されており、コンピュータの立ち上げ時にMPU等のプロセッサに読み取られ、そのプロセッサの動作を制御することにより、そのプロセッサ上にWAL管理部5、排他チェック処理部6、WAL反映部4を実現する。
次に本実施形態の動作を説明する。
トランザクション処理部1は、入力されたトランザクションを実行する。そして、トランザクション処理部1は、データグループを参照および更新するトランザクションのコミット時、WAL記憶部3に記憶された更新履歴に基づいて、レコード単位で排他違反の有無を判定し、排他違反がなければ当該トランザクションを成功させ、その更新履歴をWAL記憶部3に記録する。その後、WAL反映部4は、WAL記憶部3に記憶されている更新履歴中のレコードの更新内容をレコードデータ記憶部2に反映する。
より好ましくは、本実施形態は以下のように動作する。
トランザクション処理部1は、トランザクションが入力されると、そのトランザクションで使用するデータグループを構成するレコードの最新の値をWAL記憶部3およびレコードデータ記憶部2から取得し、また、当該データグループに対応する更新ログ中の最新のタイムスタンプをスタート時タイムスタンプとしてWAL記憶部3から取得し、トランザクションの実行を開始する。
トランザクション処理部1は、実行しているトランザクションのコミット時、そのトランザクションのスタート時に取得しておいた上記スタート時タイムスタンプと、WAL記憶部3に現に記憶されているデータグループの最新のタイムスタンプであるコミット時タイムスタンプとを比較する。次にトランザクション処理部1は、スタート時タイムスタンプとコミット時タイムスタンプとが相違するときは、スタート時タイムスタンプより後のタイムスタンプを有する全ての部分更新履歴をWAL記憶部3から読み出し、それらの部分更新履歴中に、当該トランザクションが使用したレコード(参照または更新したレコード、或いは更新したレコード)と一致するレコードが存在するか否かを判定する。
トランザクション処理部1は、上記の比較と判定の結果とに基づいて、上記トランザクションを成功させるか、失敗させるかを決定する。具体的には、スタート時タイムスタンプとコミット時タイムスタンプとが同じであるか、同じでなくても、スタート時タイムスタンプより後のタイムスタンプを有する全ての部分更新履歴中に、当該トランザクションが使用したレコード(参照または更新したレコード、或いは更新したレコード)と一致するレコードが存在しなければ、トランザクションを成功させる。しかし、スタート時タイムスタンプとコミット時タイムスタンプとが異なっており、しかも、スタート時タイムスタンプより後のタイムスタンプを有する部分更新履歴中に、当該トランザクションが使用したレコード(参照または更新したレコード、或いは更新したレコード)と一致するレコードが存在していれば、トランザクションを失敗させる。
トランザクション処理部1は、トランザクションを成功させると決定した場合、当該トランザクションで更新したレコードの更新内容とコミット時タイムスタンプより後のタイムスタンプとを有する新たな部分更新履歴を作成して、当該トランザクションが使用したデータグループに対応してWAL記憶部3に現に記憶されている更新ログに追加する。更新ログは、キーとバリューの組で表現される1つのキーバリューデータであるため、CASコマンド等を使用することで、データ操作のアトミック性を保証することができる。
他方、WAL反映部4は、例えば定期的に、WAL記憶部3に記憶されている更新ログ中のレコードの更新内容をレコードデータ記憶部2に反映する。レコードは、キーとバリューの組で表現される1つのキーバリューデータであるため、CASコマンド等を使用することで、データ操作のアトミック性を保証することができる。
こうして本実施形態によれば、複数のレコードを1つのKVデータにまとめてトランザクションを実行するシステムにおけるトランザクションの同時実行性を高めることが可能である。その理由は、レコード単位で楽観的な排他を行うためである。
以上、上記各実施形態を参照して本発明を説明したが、本発明は、上述した実施形態に限定されるものではない。本発明の構成や詳細には、本発明の範囲内で当業者が理解しうる様々な変更をすることができる。
なお、本発明は、日本国にて2012年10月29日に特許出願された特願2012−237597の特許出願に基づく優先権主張の利益を享受するものであり、当該特許出願に記載された内容は、全て本明細書に含まれるものとする。
本発明は、データ永続化手段としてKVSを用いてトランザクションを実行するシステムにおいて利用可能である。
1…トランザクション処理部
2…レコードデータ記憶部
3…WAL記憶部
4…WAL反映部
5…WAL管理部
6…排他チェック処理部
2…レコードデータ記憶部
3…WAL記憶部
4…WAL反映部
5…WAL管理部
6…排他チェック処理部
Claims (10)
- キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の前記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と、
前記データグループを参照および更新するトランザクションのコミット時、前記WAL記憶部に記憶された更新履歴に基づいて、前記レコード単位で排他違反の有無を判定し、排他違反がなければ前記トランザクションを成功させ、その更新履歴を前記WAL記憶部に記録するトランザクション処理部と、
前記WAL記憶部に記憶されている前記更新履歴中のレコードの更新内容を前記レコードデータ記憶部に反映するWAL反映部と
を有するトランザクションシステム。 - 前記WAL記憶部は、キーとバリューの組で表現される更新ログを記憶し、前記キーは複数の前記レコードを集約したデータであるデータグループを一意に識別する値であり、前記バリューは前記データグループの更新履歴を表し、また、前記更新履歴は、1以上の部分更新履歴を有し、1つの前記部分更新履歴は、前記データグループを構成する前記レコードの更新内容と更新の順番を表すタイムスタンプとを有し、
前記トランザクション処理部は、
アプリケーションプログラムから入力されたトランザクションで使用する前記データグループを構成する前記レコードの最新の値を前記WAL記憶部および前記レコードデータ記憶部から取得し、また、当該データグループに対応する前記更新ログ中の最新の前記タイムスタンプをスタート時タイムスタンプとして前記WAL記憶部から取得し、前記トランザクションを実行するWAL管理部と、
前記トランザクションのコミット時、前記トランザクションのスタート時に取得された前記スタート時タイムスタンプと、前記WAL記憶部に現に記憶されている前記データグループの最新の前記タイムスタンプであるコミット時タイムスタンプとを比較し、前記スタート時タイムスタンプと前記コミット時タイムスタンプとが相違するときは、前記スタート時タイムスタンプより後のタイムスタンプを有する前記部分更新履歴中に、前記トランザクションが使用した前記レコードと一致するレコードが存在するか否かを判定し、前記比較と前記判定の結果とに基づいて、前記トランザクションを成功させるか、失敗させるかを決定し、成功させると決定した場合、前記トランザクションで更新した前記レコードの更新内容と前記コミット時タイムスタンプより後のタイムスタンプとを有する新たな部分更新履歴を、前記データグループに対応して前記WAL記憶部に現に記憶されている前記更新ログに追加する排他チェック処理部と
を有する請求項1に記載のトランザクションシステム。 - 前記WAL反映部は、前記レコードデータ記憶部に反映した前記更新ログの複数の部分更新履歴のうち、タイムスタンプの新しい上位所定個数の部分更新履歴は削除せずに残しておく
請求項2に記載のトランザクションシステム。 - 前記WAL反映部は、削除せずに残しておいた反映済の前記部分更新領域を識別する情報を前記更新履歴に記録する
請求項3に記載のトランザクションシステム。 - 前記排他チェック処理部は、前記判定では、前記スタート時タイムスタンプより後のタイムスタンプを有する前記部分更新履歴中に、前記トランザクションが参照または更新した前記レコードと一致するレコードが存在するか否かを判定する
請求項2乃至4の何れかに記載のトランザクションシステム。 - 前記排他チェック処理部は、前記判定では、前記スタート時タイムスタンプより後のタイムスタンプを有する前記部分更新履歴中に、前記トランザクションが更新した前記レコードと一致するレコードが存在するか否かを判定する
請求項2乃至4の何れかに記載のトランザクションシステム。 - 前記WAL反映手段は、トランザクションシステムを構成するCPUのアイドル状態と前記WAL記憶手段を構成する記憶装置の使用量とに基づいて、前記反映のタイミングを決定する
請求項1乃至6の何れかに記載のトランザクションシステム。 - キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の前記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と、
トランザクション処理部と、
WAL反映部と
を有するトランザクションシステムの制御方法であって、
前記トランザクション処理部が、前記データグループを参照および更新するトランザクションのコミット時、前記WAL記憶部に記憶された更新履歴に基づいて、前記レコード単位で排他違反の有無を判定し、排他違反がなければ前記トランザクションを成功させ、その更新履歴を前記WAL記憶部に記録し、
前記WAL反映部が、前記WAL記憶部に記憶されている前記更新履歴中のレコードの更新内容を前記レコードデータ記憶部に反映する
トランザクションシステム制御方法。 - 前記WAL記憶部は、キーとバリューの組で表現される更新ログを記憶し、前記キーは複数の前記レコードを集約したデータであるデータグループを一意に識別する値であり、前記バリューは前記データグループの更新履歴を表し、また、前記更新履歴は、1以上の部分更新履歴を有し、1つの前記部分更新履歴は、前記データグループを構成する前記レコードの更新内容と更新の順番を表すタイムスタンプとを有し、
前記トランザクション処理部は、
アプリケーションプログラムから入力されたトランザクションで使用する前記データグループを構成する前記レコードの最新の値を前記WAL記憶部および前記レコードデータ記憶部から取得し、また、当該データグループに対応する前記更新ログ中の最新の前記タイムスタンプをスタート時タイムスタンプとして前記WAL記憶部から取得し、前記トランザクションを実行し、
前記トランザクションのコミット時、前記トランザクションのスタート時に取得された前記スタート時タイムスタンプと、前記WAL記憶部に現に記憶されている前記データグループの最新の前記タイムスタンプであるコミット時タイムスタンプとを比較し、前記スタート時タイムスタンプと前記コミット時タイムスタンプとが相違するときは、前記スタート時タイムスタンプより後のタイムスタンプを有する前記部分更新履歴中に、前記トランザクションが使用した前記レコードと一致するレコードが存在するか否かを判定し、前記比較と前記判定の結果とに基づいて、前記トランザクションを成功させるか、失敗させるかを決定し、成功させると決定した場合、前記トランザクションで更新した前記レコードの更新内容と前記コミット時タイムスタンプより後のタイムスタンプとを有する新たな部分更新履歴を、前記データグループに対応して前記WAL記憶部に現に記憶されている前記更新ログに追加する
請求項8に記載のトランザクションシステム制御方法。 - キーとバリューの組で表現されるレコードを記憶するレコードデータ記憶部と、
複数の前記レコードを1つのキーバリューデータに集約したデータグループ単位で、その更新履歴を記憶するWAL記憶部と
を有するコンピュータを、
前記データグループを参照および更新するトランザクションのコミット時、前記WAL記憶部に記憶された更新履歴に基づいて、前記レコード単位で排他違反の有無を判定し、排他違反がなければ前記トランザクションを成功させ、その更新履歴を前記WAL記憶部に記録するトランザクション処理部と、
前記WAL記憶部に記憶されている前記更新履歴中のレコードの更新内容を前記レコードデータ記憶部に反映するWAL反映部と
して機能させるためのプログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012237597 | 2012-10-29 | ||
JP2012237597 | 2012-10-29 | ||
PCT/JP2013/004860 WO2014068820A1 (ja) | 2012-10-29 | 2013-08-14 | トランザクションシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP5949937B2 JP5949937B2 (ja) | 2016-07-13 |
JPWO2014068820A1 true JPWO2014068820A1 (ja) | 2016-09-08 |
Family
ID=50626778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014544217A Active JP5949937B2 (ja) | 2012-10-29 | 2013-08-14 | トランザクションシステム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20150286671A1 (ja) |
JP (1) | JP5949937B2 (ja) |
WO (1) | WO2014068820A1 (ja) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6361223B2 (ja) | 2014-03-27 | 2018-07-25 | 日本電気株式会社 | トランザクションシステム |
JP6189266B2 (ja) * | 2014-08-20 | 2017-08-30 | 東芝メモリ株式会社 | データ処理装置、データ処理方法及びデータ処理プログラム |
EP3051440B1 (en) | 2014-11-12 | 2019-01-02 | Huawei Technologies Co. Ltd. | Keyvalue database data table updating method and data table updating device |
US10176209B2 (en) * | 2015-06-26 | 2019-01-08 | Vmware, Inc. | Abortable transactions using versioned tuple cache |
JP6189488B1 (ja) * | 2016-06-27 | 2017-08-30 | 株式会社東芝 | データベース管理装置、データベース管理方法、およびデータベース管理プログラム |
US11182384B2 (en) * | 2016-07-25 | 2021-11-23 | Visa International Service Association | Event-driven architecture using rolling aggregates |
US10491698B2 (en) * | 2016-12-08 | 2019-11-26 | International Business Machines Corporation | Dynamic distribution of persistent data |
JP6714158B2 (ja) * | 2017-06-08 | 2020-06-24 | 日本電信電話株式会社 | 制御装置、制御方法及び制御プログラム |
KR102405593B1 (ko) * | 2017-08-23 | 2022-06-08 | 삼성전자 주식회사 | 전자 장치 및 그의 데이터 운용 방법 |
WO2019127456A1 (zh) * | 2017-12-29 | 2019-07-04 | 华为技术有限公司 | 处理预写日志的方法和装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4237354B2 (ja) * | 1999-09-29 | 2009-03-11 | 株式会社東芝 | トランザクション処理方法及びトランザクション処理システム |
JP4290975B2 (ja) * | 2002-12-19 | 2009-07-08 | 株式会社日立製作所 | データベース処理方法及び装置並びにその処理プログラム及びディザスタリカバリ方法及びシステム |
EP1962195A4 (en) * | 2005-12-02 | 2009-01-21 | Ibm | SYSTEM FOR IMPROVING ACCESS EFFICIENCY TO A DATABASE AND METHOD THEREFOR |
JP2009026029A (ja) * | 2007-07-19 | 2009-02-05 | Nippon Telegr & Teleph Corp <Ntt> | トランザクション制御装置、トランザクション制御方法、トランザクション制御プログラムおよびそのプログラムを記憶した記憶媒体 |
US8396932B2 (en) * | 2010-04-07 | 2013-03-12 | Apple Inc. | Apparatus and method for efficiently managing data in a social networking service |
US8832022B2 (en) * | 2011-05-06 | 2014-09-09 | Nec Corporation | Transaction processing device, transaction processing method and transaction processing program |
US8504542B2 (en) * | 2011-09-02 | 2013-08-06 | Palantir Technologies, Inc. | Multi-row transactions |
US8990177B2 (en) * | 2011-10-27 | 2015-03-24 | Yahoo! Inc. | Lock-free transactional support for large-scale storage systems |
-
2013
- 2013-08-14 US US14/438,454 patent/US20150286671A1/en not_active Abandoned
- 2013-08-14 JP JP2014544217A patent/JP5949937B2/ja active Active
- 2013-08-14 WO PCT/JP2013/004860 patent/WO2014068820A1/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2014068820A1 (ja) | 2014-05-08 |
JP5949937B2 (ja) | 2016-07-13 |
US20150286671A1 (en) | 2015-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5949937B2 (ja) | トランザクションシステム | |
JP6361223B2 (ja) | トランザクションシステム | |
US11048599B2 (en) | Time-based checkpoint target for database media recovery | |
EP3234780B1 (en) | Detecting lost writes | |
US11442961B2 (en) | Active transaction list synchronization method and apparatus | |
CN106462592B (zh) | 优化对索引的多版本支持的系统和方法 | |
US9367346B2 (en) | Accelerating distributed transactions on key-value stores through dynamic lock localization | |
Aiyer et al. | Storage infrastructure behind Facebook messages: Using HBase at scale. | |
WO2017133216A1 (zh) | 分布式存储方法和设备 | |
JP5466459B2 (ja) | 階層ストレージ管理(hsm)制御ストレージ環境で双方向オーファン照合を行う方法、システムおよぶコンピュータ・プログラム | |
US9652492B2 (en) | Out-of-order execution of strictly-ordered transactional workloads | |
EP2673711A1 (en) | Method and system for reducing write latency for database logging utilizing multiple storage devices | |
US11226876B2 (en) | Non-blocking backup in a log replay node for tertiary initialization | |
US20170083419A1 (en) | Data management method, node, and system for database cluster | |
CN103500120A (zh) | 基于多线程异步双写的分布式缓存高可用处理方法及系统 | |
US20120278429A1 (en) | Cluster system, synchronization controlling method, server, and synchronization controlling program | |
WO2016143095A1 (ja) | 計算機システム及びトランザクション処理の管理方法 | |
WO2022048358A1 (zh) | 数据处理方法、装置及存储介质 | |
JP6442996B2 (ja) | トランザクション処理装置、トラザクション処理方法、及びプログラム | |
JP5715074B2 (ja) | データベースシステム、データベース管理方法、およびデータベース管理プログラム | |
US20110214130A1 (en) | Data processing system, data processing method, and data processing program | |
US11874796B1 (en) | Efficient garbage collection in optimistic multi-writer database systems | |
US20210406243A1 (en) | Non-transitory computer-readable storage medium for storing information processing program, information processing method, and information processing apparatus | |
JP6645296B2 (ja) | 情報処理システム、情報処理方法、及び、プログラム | |
CN115858584A (zh) | 一种数据导入方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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: 20160510 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160523 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5949937 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |