(57)【要約】サーバ装置は、キャッシュと、前回実行したトランザクションで利用したデータの識別情報とを保持する。サーバ装置は、クライアントから受信したトランザクションで利用するデータの識別情報と上記保持する識別情報とを比較し、比較不一致のときは永続記憶装置から取得したデータでキャッシュを更新した後にトランザクションを実行し、比較一致のときはキャッシュ更新を省略してトランザクションを実行する。次にサーバ装置は、楽観的排他に成功したか、失敗したかを判定し、失敗したときはキャッシュ上のデータを永続記憶装置から取得したデータによって更新した後にトランザクションを再実行する。
2014192213.tif 000002
【特許請求の範囲】
【請求項１】
トランザクションを送信するクライアント装置と、
データを記憶する永続記憶装置と、
楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御する複数のサーバ装置とを有し、
各々の前記サーバ装置は、
前記永続記憶装置から取得した前記データを保持するキャッシュと、
前回実行した前記トランザクションで利用した前記データの識別情報を保持する識別情報保持部と、
前記クライアント装置から受信した前記トランザクションの実行に必要な前記データの識別情報と前記識別情報保持部に保持された前記データの識別情報とを比較し、前記比較の結果が不一致のときは前記永続記憶装置に記憶された前記データを取得して前記キャッシュを更新した後に前記キャッシュ上の前記データを利用して前記トランザクションを実行し、前記比較の結果が一致のときは前記永続記憶装置のデータによる前記キャッシュの更新を省略して前記キャッシュ上の前記データを利用して前記トランザクションを実行し、その後、前記楽観的排他に成功したか、失敗したかを判定し、失敗したときは前記キャッシュ上の前記データを前記永続記憶装置に記憶された前記データによって更新した後に前記トランザクションを再実行するトランザクション実行部と
を有する
分散処理システム。
【請求項２】
前記トランザクション実行部は、前記楽観的排他に失敗したときの前記キャッシュの更新では、前記再実行するトランザクションの実行に必要な前記データのうち、前記キャッシュ上の前記データと相違する前記永続記憶装置上の前記データを取得して前記キャッシュを更新する
請求項１に記載の分散処理システム。
【請求項３】
前記クライアント装置と前記サーバ装置との間に、前記クライアント装置から前記トランザクションを受信し、該受信した前記トランザクションを前記サーバ装置に振り分ける振り分け装置を有する
請求項１または２に記載の分散処理システム。
【請求項４】
前記振り分け装置は、前記振り分けでは、特定データを利用する前記トランザクションを特定の前記サーバ装置に振り分ける
請求項３に記載の分散処理システム。
【請求項５】
前記振り分け装置は、前記振り分けでは、利用する前記データの識別情報が同じ複数の前記トランザクションを同じ前記サーバ装置に連続して振り分ける
請求項３に記載の分散処理システム。
【請求項６】
前記振り分け装置は、前記振り分けでは、特定データを利用する前記トランザクションを特定の前記サーバ装置に振り分け、前記特定データ以外の前記データを利用する前記トランザクションについては、利用する前記データの識別情報が同じ複数の前記トランザクションを同じ前記サーバ装置に連続して振り分ける
請求項３に記載の分散処理システム。
【請求項７】
前記データは、キー値とバリュー値とを有し、
前記データの識別情報は、前記キー値である
請求項１乃至６の何れかに記載の分散処理システム。
【請求項８】
トランザクションを送信するクライアント装置とデータを記憶する永続記憶装置とに接続され、楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御するサーバ装置であって、
前記永続記憶装置から取得した前記データを保持するキャッシュと、
前回実行した前記トランザクションで利用した前記データの識別情報を保持する識別情報保持部と、
前記クライアント装置から受信した前記トランザクションの実行に必要な前記データの識別情報と前記識別情報保持部に保持された前記データの識別情報とを比較し、前記比較の結果が不一致のときは前記永続記憶装置に記憶された前記データを取得して前記キャッシュを更新した後に前記キャッシュ上の前記データを利用して前記トランザクションを実行し、前記比較の結果が一致のときは前記永続記憶装置のデータによる前記キャッシュの更新を省略して前記キャッシュ上の前記データを利用して前記トランザクションを実行し、その後、前記楽観的排他に成功したか、失敗したかを判定し、失敗したときは前記キャッシュ上の前記データを前記永続記憶装置に記憶された前記データによって更新した後に前記トランザクションを再実行するトランザクション実行部と
を有する
サーバ装置。
【請求項９】
前記トランザクション実行部は、前記楽観的排他に失敗したときの前記キャッシュの更新では、前記再実行するトランザクションの実行に必要な前記データのうち、前記キャッシュ上の前記データと相違する前記永続記憶装置上の前記データを取得して前記キャッシュを更新する
請求項８に記載のサーバ装置。
【請求項１０】
前記データは、キー値とバリュー値とを有し、
前記データの識別情報は、前記キー値である
請求項８または９に記載のサーバ装置。
【請求項１１】
トランザクションを送信するクライアント装置とデータを記憶する永続記憶装置とに接続され、前記永続記憶装置から取得した前記データを保持するキャッシュと前回実行した前記トランザクションで利用した前記データの識別情報を保持する識別情報保持部とを有し、楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行制御を行うサーバ装置が実行するトランザクション実行方法であって、
前記クライアント装置から受信した前記トランザクションの実行に必要な前記データの識別情報と前記識別情報保持部に保持された前記データの識別情報とを比較し、
前記比較の結果が不一致のときは、前記キャッシュ上の前記データを前記永続記憶装置に記憶された前記データによって更新した後に前記キャッシュ上の前記データを利用して前記トランザクションを実行し、前記比較の結果が一致のときは、前記永続記憶装置のデータによる前記キャッシュの更新を省略して前記キャッシュ上の前記データを利用して前記トランザクションを実行し、
前記楽観的排他に成功したか、失敗したかを判定し、失敗したときは前記キャッシュ上の前記データを前記永続記憶装置に記憶された前記データによって更新した後に前記トランザクションを再実行する
トランザクション実行方法。
【請求項１２】
前記楽観的排他に失敗したときの前記キャッシュの更新では、前記再実行するトランザクションの実行に必要な前記データのうち、前記キャッシュ上の前記データと相違する前記永続記憶装置上の前記データを取得して前記キャッシュを更新する
請求項１１に記載のトランザクション実行方法。
【請求項１３】
前記データは、キー値とバリュー値とを有し、
前記データの識別情報は、前記キー値である
請求項１１または１２に記載のトランザクション実行方法。
【請求項１４】
トランザクションを送信するクライアント装置とデータを記憶する永続記憶装置とに接続され、楽観的排他に基づいて、前記クライアント装置から受信した前記トランザクションの実行を制御するコンピュータを、
前記永続記憶装置から取得した前記データを保持するキャッシュと、
前回実行した前記トランザクションで利用した前記データの識別情報を保持する識別情報保持部と、
前記クライアント装置から受信した前記トランザクションの実行に必要な前記データの識別情報と前記識別情報保持部に保持された前記データの識別情報とを比較し、前記比較の結果が不一致のときは前記永続記憶装置に記憶された前記データを取得して前記キャッシュを更新した後に前記キャッシュ上の前記データを利用して前記トランザクションを実行し、前記比較の結果が一致のときは前記永続記憶装置のデータによる前記キャッシュの更新を省略して前記キャッシュ上の前記データを利用して前記トランザクションを実行し、その後、前記楽観的排他に成功したか、失敗したかを判定し、失敗したときは前記キャッシュ上の前記データを前記永続記憶装置に記憶された前記データによって更新した後に前記トランザクションを再実行するトランザクション実行部と
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理システム、サーバ装置、トランザクション実行方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、携帯やインターネットが普及するにつれて、扱うデータ量が増え、大量データの処理の高速化が求められている。その中で、大量データを保管するためのシステムとして、キーバリューストア（ＫＶＳ）の需要が高まっている。キーバリューストアでは、データ（値：ｖａｌｕｅ）に対して、対応する一意の標識（ｋｅｙ）を設定し、それらをペアで保存する。キーとバリューとをペアにしたデータを、以下、ＫＶデータと呼ぶ。特に、複数のサーバや記憶装置などに分散してＫＶデータを保存できる機能を持ったものは、分散ＫＶＳと呼ばれる。分散ＫＶＳはスケーラビリティとスループット性を重視しており、データの一貫性が必要なシステムやトランザクション処理を要するシステムには不向きであった。しかし、より大量のデータの分析やトランザクション処理の必要性から、分散ＫＶＳにおいてもデータの一貫性を保持しつつ、大量データの高速処理を行うことが求められるようになっている。【０００３】
データの処理性能を向上させるための技術として、キャッシュの利用と、トランザクションの同時実行制御方法とが知られている。キャッシュの利用とは、使用頻度の高いデータを高速な記憶装置に蓄えておくことにより、いちいち低速な永続記憶装置から読み出す無駄を省いて高速化する技術である。一方、トランザクションの同時実行制御方法とは、データの一貫性を保持しつつ、同じ情報を更新する複数のトランザクションを並行して実行するための技術である。【０００４】
トランザクションの同時実行制御方法には、悲観的排他に基づく方法と楽観的排他に基づく方法とが知られている。悲観的排他に基づく同時実行制御方法は、或るトランザクションの実行に先だって当該トランザクションで参照または更新する全てのデータを予め排他（ロック）することにより、データの一貫性を確保する。しかし、悲観的排他に基づく同時実行制御では、排他を取得した処理を実行するサーバの当該処理が終了するまで、同じデータを使用する他のサーバの処理を行うことができないため、スケーラビリティに欠ける。そのため、スケーラビリティを重視する分散キーバリューストアでは、楽観的排他に基づく同時実行制御方法が用いられる（例えば特許文献１参照）。【０００５】
上記のキャッシュの利用と楽観的排他に基づくトランザクションの同時実行制御とは、それぞれ単独で用いられるだけでなく、両者を組み合わせた分散処理システムが提案されている（例えば特許文献２参照）。【０００６】
図２２は、楽観的排他に基づく同時実行制御とキャッシュの利用とを組み合わせた本発明に関連する分散処理システム１１００のブロック図である。図２２において、永続記憶装置１３００はＫＶデータ１３２０を有するデータ１３１０を記憶する。ＫＶデータ１３２０には、当該ＫＶデータ１３２０が更新される毎にインクリメントされるバージョン情報１３３０が付加されている。各々のサーバ１２００のトランザクション実行部１２２０は、クライアント装置１１００から受信したトランザクションを内蔵のキャッシュ１２１０を利用して実行する。受信したトランザクションが、例えばＫＶデータ１３２０のバリューの値を更新する処理である場合、各サーバのトランザクション実行部１２２０は、キャッシュ１２１０上でＫＶデータ１３２０のバリューの値を更新する。このときトランザクション実行部１２２０は、キャッシュ１２１０上にＫＶデータ１３２０が存在しなければ、永続記憶装置１３００からＫＶデータ１３２０を有するデータ１３１０をキャッシュ１２１０上に取得する処理を行い、キャッシュ１２１０上にＫＶデータ１３２０が既に存在する場合には上記取得処理は省略する。その後、トランザクション実行部１２２０は、キャッシュ１２１０上で更新したＫＶデータ１３２０をＣＡＳ（Ｃｏｍｐａｒｅ  ａｎｄ  Ｓｗａｐ）操作により永続記憶装置１３００に書き戻す。【０００７】
具体的には、トランザクション実行部１２２０は、ＫＶデータ１３２０のバージョン情報１３３０が取得時と書き戻し時とで同じかどうかを判定し（ＣＡＳ操作のＣｏｍｐａｒｅ処理）、一致する場合にはコミット成功として、更新後のＫＶデータ１３２０にインクリメントしたバージョン情報１３３０を付加して永続記憶装置１３００に書き込む（ＣＡＳ操作のＳｗａｐ処理）。一方、バージョン情報が一致しなかった場合は、自サーバがＫＶデータ１３２０を永続記憶装置１３００からキャッシュ１２１０に取得した後、書き込むまでの間に他のサーバが当該ＫＶデータ１３２０を更新しているため、コミット失敗とする。コミット失敗とした場合、トランザクション実行部１２２０は、永続記憶装置１３００からＫＶデータ１３２０をあらためてキャッシュ１２１０に取得し、当該トランザクションを再実行する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１３−４５３５６号公報
【特許文献２】特開２００６−２３５７３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述したように、楽観的排他に基づく同時実行制御とキャッシュの利用とを組み合わせた本発明に関連する分散処理システムでは、トランザクションで利用するキャッシュ上のデータが最新でない場合、トランザクションのコミットに失敗し、当該トランザクションは再実行される。そのため、分散処理システムの処理性能が低下する。それを回避するために、トランザクション実行前にキャッシュを毎回更新するようにすれば、楽観的排他に成功する確率が高まってトランザクションを再実行する頻度が小さくなるが、反対にキャッシュ更新に係るコストが増大し、そもそもキャッシュを持つ意味がなくなる。一方、トランザクション実行前にキャッシュを更新しなければ、キャッシュ更新に係るコストは削減できるが、前述したように楽観的排他に失敗する確率が高まってトランザクションの再実行に係るコストが増大する。即ち、キャッシュ更新に係るコストとトランザクションの再実行に係るコストとを共に削減することは困難である。【００１０】
各サーバのキャッシュに最新データを保持する仕組みとして、サーバ間で最新のキャッシュデータを交換する方法がある。しかし、この方法では、サーバ同士をネットワークでつなぐ必要があり、サーバ同士の通信（データや情報交換）を不要とした運用が行えない。またサーバ同士が独立していないと、処理を並列に実行できず、同時実行可能トランザクション数が減るため、処理性能が劣化するという点や、処理するデータ量が増えたとき、サーバのみを増設することが困難になるという点が問題になる。従って、サーバ間で最新のキャッシュデータを交換する方法は、スケーラビリティを重視する分散キーバリューストアには適用が困難である。そのため、各サーバは独立したまま、楽観的排他制御によりデータの一貫性を保ちつつ、サーバのキャッシュを有効利用できる仕組みが望まれる。【００１１】
本発明の目的は、上述した課題、すなわち、楽観的排他に基づく同時実行制御とキャッシュの利用とを組み合わせた分散処理システムでは、スケーラビリティを確保しつつ、キャッシュ更新に係るコストとトランザクションの再実行に係るコストとを共に削減することは困難である、という課題を解決する分散処理システムを提供することにある。
【課題を解決するための手段】
【００１２】
本発明の第１の観点に係る分散処理システムは、
トランザクションを送信するクライアント装置と、
データを記憶する永続記憶装置と、
楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行を制御する複数のサーバ装置とを有し、
各々の上記サーバ装置は、
上記永続記憶装置から取得した上記データを保持するキャッシュと、
前回実行した上記トランザクションで利用した上記データの識別情報を保持する識別情報保持部と、
上記クライアント装置から受信した上記トランザクションの実行に必要な上記データの識別情報と上記識別情報保持部に保持された上記データの識別情報とを比較し、上記比較の結果が不一致のときは上記永続記憶装置に記憶された上記データを取得して上記キャッシュを更新した後に上記キャッシュ上の上記データを利用して上記トランザクションを実行し、上記比較の結果が一致のときは上記永続記憶装置のデータによる上記キャッシュの更新を省略して上記キャッシュ上の上記データを利用して上記トランザクションを実行し、その後、上記楽観的排他に成功したか、失敗したかを判定し、失敗したときは上記キャッシュ上の上記データを上記永続記憶装置に記憶された上記データによって更新した後に上記トランザクションを再実行するトランザクション実行部と
を有する。【００１３】
また本発明の第２の観点に係るサーバ装置は、
トランザクションを送信するクライアント装置とデータを記憶する永続記憶装置とに接続され、楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行を制御するサーバ装置であって、
上記永続記憶装置から取得した上記データを保持するキャッシュと、
前回実行した上記トランザクションで利用した上記データの識別情報を保持する識別情報保持部と、
上記クライアント装置から受信した上記トランザクションの実行に必要な上記データの識別情報と上記識別情報保持部に保持された上記データの識別情報とを比較し、上記比較の結果が不一致のときは上記永続記憶装置に記憶された上記データを取得して上記キャッシュを更新した後に上記キャッシュ上の上記データを利用して上記トランザクションを実行し、上記比較の結果が一致のときは上記永続記憶装置のデータによる上記キャッシュの更新を省略して上記キャッシュ上の上記データを利用して上記トランザクションを実行し、その後、上記楽観的排他に成功したか、失敗したかを判定し、失敗したときは上記キャッシュ上の上記データを上記永続記憶装置に記憶された上記データによって更新した後に上記トランザクションを再実行するトランザクション実行部と
を有する。【００１４】
また本発明の第３の観点に係るトランザクション実行方法は、
トランザクションを送信するクライアント装置とデータを記憶する永続記憶装置とに接続され、上記永続記憶装置から取得した上記データを保持するキャッシュと前回実行した上記トランザクションで利用した上記データの識別情報を保持する識別情報保持部とを有し、楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行制御を行うサーバ装置が実行するトランザクション実行方法であって、
上記クライアント装置から受信した上記トランザクションの実行に必要な上記データの識別情報と上記識別情報保持部に保持された上記データの識別情報とを比較し、
上記比較の結果が不一致のときは、上記キャッシュ上の上記データを上記永続記憶装置に記憶された上記データによって更新した後に上記キャッシュ上の上記データを利用して上記トランザクションを実行し、上記比較の結果が一致のときは、上記永続記憶装置のデータによる上記キャッシュの更新を省略して上記キャッシュ上の上記データを利用して上記トランザクションを実行し、
上記楽観的排他に成功したか、失敗したかを判定し、失敗したときは上記キャッシュ上の上記データを上記永続記憶装置に記憶された上記データによって更新した後に上記トランザクションを再実行する。
また本発明の第４の観点に係るプログラムは、
トランザクションを送信するクライアント装置とデータを記憶する永続記憶装置とに接続され、楽観的排他に基づいて、上記クライアント装置から受信した上記トランザクションの実行を制御するコンピュータを、
上記永続記憶装置から取得した上記データを保持するキャッシュと、
前回実行した上記トランザクションで利用した上記データの識別情報を保持する識別情報保持部と、
上記クライアント装置から受信した上記トランザクションの実行に必要な上記データの識別情報と上記識別情報保持部に保持された上記データの識別情報とを比較し、上記比較の結果が不一致のときは上記永続記憶装置に記憶された上記データを取得して上記キャッシュを更新した後に上記キャッシュ上の上記データを利用して上記トランザクションを実行し、上記比較の結果が一致のときは上記永続記憶装置のデータによる上記キャッシュの更新を省略して上記キャッシュ上の上記データを利用して上記トランザクションを実行し、その後、上記楽観的排他に成功したか、失敗したかを判定し、失敗したときは上記キャッシュ上の上記データを上記永続記憶装置に記憶された上記データによって更新した後に上記トランザクションを再実行するトランザクション実行部と
して機能させる。
【発明の効果】
【００１５】
本発明は上述した構成を有するため、スケーラビリティを確保しつつ、キャッシュ更新に係るコストとトランザクションの再実行に係るコストとを共に削減することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１の実施形態に係る分散処理システムのブロック図である。
【図２】本発明の第１の実施形態に係る分散処理システムにおけるサーバ装置の動作の一例を示すフローチャートである。
【図３】本発明の第１の実施形態と本発明に関連する第１および第２の関連技術とについて、トランザクション実行前のキャッシュ更新の有無、楽観的排他の成功の可能性、トランザクションの再実行の可能性を比較した図である。
【図４】本発明の第２の実施形態に係る分散処理システムの概要を示す図である。
【図５】本発明の第２の実施形態に係る分散処理システムのブロック図である。
【図６】本発明の第２の実施形態における処理解析サーバのブロック図である。
【図７】本発明の第２の実施形態におけるデータベースサーバのブロック図である。
【図８】本発明の第２の実施形態における処理解析サーバの動作を示すフローチャートである。
【図９】本発明の第２の実施形態におけるデータベースサーバに記憶されている表の例を示す図である。
【図１０】本発明の第２の実施形態におけるトランザクションの処理の一例を示す図である。
【図１１】本発明の第３の実施形態に係る分散処理システムのブロック図である。
【図１２】本発明の第３の実施形態における振り分け装置のブロック図である。
【図１３】本発明の第３の実施形態における振り分け装置の動作を示すフローチャートである。
【図１４】本発明の第４の実施形態に係る分散処理システムのブロック図である。
【図１５】本発明の第４の実施形態における振り分け装置のブロック図である。
【図１６】本発明の第４の実施形態における特定データ振り分け先一覧表の一例を示す図である。
【図１７】本発明の第４の実施形態における処理解析サーバのブロック図である。
【図１８】本発明の第４の実施形態における振り分け装置の動作を示すフローチャートである。
【図１９】本発明の第４の実施形態における処理解析サーバの動作を示すフローチャートである。
【図２０】本発明の第５の実施形態における振り分け装置のブロック図である。
【図２１】本発明の第５の実施形態における振り分け装置の動作を示すフローチャートである。
【図２２】本発明に関連する分散処理システムのブロック図である。
【発明を実施するための形態】
【００１７】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態に係る分散処理システム１００は、クライアント装置１１０とサーバ装置１２０と永続記憶装置１３０とを有する。
【００１８】
クライアント装置１１０は、トランザクションを任意のサーバ装置１２０に送信する装置である。クライアント装置１１０は、例えば、ＣＰＵ、ＲＯＭやＲＡＭ等のメモリ、各種の情報を格納する外部記憶装置、入出力インターフェース、通信インターフェース、およびこれらを相互に接続するバスを備える専用または汎用のコンピュータであってよい。またクライアント装置１１０は、複数存在してよい。
【００１９】
永続記憶装置１３０は、データ１３１を記憶する機能を有する。永続記憶装置１３０は、例えば、ＢｅｒｋｌｅｙＤＢなどのデータベースや、キーバリューストアや、リレーショナルデータベースなど楽観的排他による制御ができるデータベースであればよい。また永続記憶装置１３０は、複数存在してよい。永続記憶装置１３０に記憶されるデータ１３１は、前述のような種類のデータベースに、それぞれの持つデータ格納方式（キーバリュー方式、関係モデル方式など）に従って適宜記憶される。例えばキーバリューストアであれば、データ１３１は、ＫＶデータとバージョン情報とを有する。ＫＶデータは、キー値とバリュー値とのペアである。バージョン情報は、ＫＶデータのバージョンを表す。以下、データ１３１は、ＫＶデータとバージョン情報とを有するものとして説明するが、本発明はそのような形式のデータに限定されない。
【００２０】
サーバ装置１２０は、楽観的排他に基づいて、クライアント装置１１０から受信したトランザクションの実行を制御する装置である。サーバ装置１２０は、例えば、ＣＰＵ、ＲＯＭやＲＡＭ等のメモリ、各種の情報を格納する外部記憶装置、入出力インターフェース、通信インターフェース、およびこれらを相互に接続するバスを備える専用または汎用のコンピュータであってよい。またサーバ装置１２０は、図１では２台であるが、３台以上存在してもよい。
【００２１】
各々のサーバ装置１２０は、キャッシュ１２１と識別情報保持部１２２とトランザクション実行部１２３とを有する。
【００２２】
キャッシュ１２１は、永続記憶装置１３０から取得したデータ１３１のコピーを保持する機能を有する。キャッシュ１２１は、ＲＡＭ等の書込み読み出し可能なメモリで構成される。キャッシュ１２１の容量は任意であるが、１トランザクションで利用するデータの最大量を少なくとも保持できる容量であることが望ましい。
【００２３】
識別情報保持部１２２は、サーバ装置１２０が前回実行したトランザクションで利用したデータ１３１の識別情報を保持する機能を有する。データ１３１の識別情報は、データ１３１がＫＶデータである場合、キー値であってよい。識別情報保持部１２２は、ＲＡＭ等の書込み読み出し可能なメモリで構成される。識別情報保持部１２２の容量は任意であるが、１トランザクションで利用するデータの識別情報の最大量を少なくとも保持できる容量であることが望ましい。
【００２４】
トランザクション実行部１２３は、トランザクションを実行する機能を有する。トランザクション実行部１２３は、サーバ装置１２０を構成するＣＰＵとそのＣＰＵで実行されるソフトウェアとで実現されるものであってよい。トランザクション実行部１２３は、同じサーバ装置１２０上に複数存在してよい。
【００２５】
トランザクション実行部１２３は、以下のような機能を有する。まずトランザクション実行部１２３は、クライアント装置１１０から受信したトランザクションを解析し、その実行に必要なデータ１３１の識別情報と識別情報保持部１２２に保持されたデータ１３１の識別情報とを比較する機能を有する。またトランザクション実行部１２３は、上記の比較の結果が不一致のときは、永続記憶装置１３０に記憶されたデータ１３１を取得してキャッシュ１２１を更新した後にキャッシュ１２１上のデータ１３１を利用してトランザクションを実行する機能を有する。またトランザクション実行部１２３は、上記の比較の結果が一致のときは、永続記憶装置１３０のデータによるキャッシュ１２１の更新を省略してキャッシュ１２１上のデータ１３１を利用してトランザクションを実行する機能を有する。またトランザクション実行部１２３は、上記のトランザクションの実行後、楽観的排他に成功したか、失敗したかを判定する機能を有する。またトランザクション実行部１２３は、楽観的排他に成功したときは、当該トランザクションをコミットし、トランザクションの実行結果をクライアント装置１１０へ送信する機能を有する。他方、トランザクション実行部１２３は、楽観的排他に失敗したときは、キャッシュ１２１上のデータ１３１を永続記憶装置１３０に記憶されたデータ１３１によって更新した後に、上記のトランザクションを再実行する機能を有する。
【００２６】
次に本実施形態の動作を説明する。
【００２７】
クライアント装置１１０は、トランザクションを任意のサーバ装置１２０へ送信する。トランザクションを受信したサーバ装置１２０は、そのトランザクションを解析して実行する。その際、サーバ装置１２０は、楽観的排他に基づいて、永続記憶装置１３０に記憶されたデータ１３０を必要に応じて参照、更新する。サーバ装置１２０は、楽観的排他に成功した場合、トランザクションの実行結果をクライアント装置１１０へ送信する。他方、サーバ装置１２０は、楽観的排他に失敗した場合、トランザクションを再実行する。以下、図２のフローチャートを参照して、サーバ装置１２０の動作をより詳細に説明する。
【００２８】
サーバ装置１２０のトランザクション実行部１２３は、クライアント装置１１０からトランザクションを受信すると、それを解析する（ステップＳ１０１）。次にトランザクション実行部１２３は、前回実行したトランザクションで利用したデータ１３１の識別情報を識別情報保持部１２２から読み出し、今回実行するトランザクションで利用するデータ１３１の識別情報と比較する（ステップＳ１０２）。次にトランザクション実行部１２３は、上記の比較結果が不一致であった場合（ステップＳ１０３でＮＯ）、今回のトランザクションの実行に必要なデータ１３１を永続記憶装置１３０から取得してキャッシュ１２１を更新する（ステップＳ１０４）。すなわち、永続記憶装置１３０から取得したデータ１３１をキャッシュ１２１にコピーする。そして、ステップＳ１０５の処理へ進む。一方、上記の比較結果が一致であった場合（ステップＳ１０３でＹＥＳ）、ステップＳ１０４をスキップして、ステップＳ１０５の処理へ進む。
【００２９】
トランザクション実行部１２３は、ステップＳ１０５において、キャッシュ１２１上のデータ１３１を利用してトランザクションを実行する。具体的には、例えばトランザクションがデータ１３１のバリュー値を更新するものである場合、キャッシュ１２１上のデータ１３１のバリュー値を更新する。
【００３０】
次にトランザクション実行部１２３は、ＣＡＳ操作を行うことによって、楽観的排他に成功したか、失敗したかを判定する（ステップＳ１０６、Ｓ１０７）。具体的には、トランザクションがデータ１３１のバリュー値を更新するものであった場合、トランザクション実行部１２３は、キャッシュ１２１上のデータ１３１のバージョン情報が永続記憶装置１３０上のデータ１３１のバージョン情報と同じかどうかを判定し（ＣＡＳ操作のＣｏｍｐａｒｅ処理）、一致する場合にはトランザクションのコミット成功として、更新後のキャッシュ１２１上のデータ１３１を、そのバージョン情報をインクリメントして永続記憶装置１３０に書き込む（ＣＡＳ操作のＳｗａｐ処理）。一方、バージョン情報が一致せずＣＡＳ操作が成功しなかった場合、トランザクションのコミット失敗とする。その場合、トランザクション実行部１２３は、トランザクションの実行に必要な最新のデータ１３１を永続記憶装置１３０からあらためて取得してキャッシュ１２１を更新する（ステップＳ１０８）。すなわち、永続記憶装置１３０から取得したデータ１３１をキャッシュ１２１にコピーする。そして、トランザクション実行部１２３は、ステップＳ１０５の処理へ進み、当該トランザクションを再実行する。このステップＳ１０５〜Ｓ１０８のループ処理は、ＣＡＳ操作が成功するまで、即ち楽観的排他が成功するまで繰り返される。
【００３１】
そして、トランザクション実行部１２３は、ＣＡＳ操作に成功すると（ステップＳ１０７でＹＥＳ）、当該トランザクションで利用したデータの識別情報によって識別情報保持部１２２を更新し（ステップＳ１０９）、またトランザクションの実行結果をクライアント装置１１０へ送信し（ステップＳ１１０）、受信したトランザクションに関する処理を終える。
【００３２】
次に本実施形態の効果を説明する。
【００３３】
本実施形態によれば、スケーラビリティを確保しつつ、キャッシュ更新に係るコストとトランザクションの再実行に係るコストとを共に削減することができる。
【００３４】
スケーラビリティを確保できる理由は、各サーバ装置１２０のキャッシュ１２１に最新データを保持する方法として、サーバ間で最新のキャッシュデータを交換する方法でなく、永続記憶装置１３０から最新データを取得する方法を使用しており、それぞれのサーバ装置１２０が互いに独立しているためである。
【００３５】
キャッシュ更新に係るコストとトランザクションの再実行に係るコストとを共に削減できる理由は、トランザクションで利用するデータの識別情報と前回のトランザクションで利用したデータの識別情報とが一致するか否かによって、トランザクション実行前にキャッシュ更新を実行するか否かを決定しているため、キャッシュ上のデータが最新であるにもかかわらずに無駄にキャッシュ更新する頻度が低下する一方、キャッシュ上のデータが最新でないにもかかわらずキャッシュ更新せずにトランザクションを実行してその再実行を余儀なくされる頻度が低下するためである。
【００３６】
図３は、本実施形態と本発明に関連する第１および第２の関連技術とについて、トランザクション実行前のキャッシュ更新の有無、楽観的排他の成功の可能性、トランザクションの再実行の可能性を比較した図である。図中、キャッシュ更新の欄における記号「‐」はキャッシュ更新しないことを、記号「○」はキャッシュ更新することを、それぞれ示す。また楽観的排他の欄における記号「○」は楽観的排他に成功する確率が高いことを、記号「×」は楽観的排他に失敗する確率が高いことを、それぞれ示す。また再実行の欄における記号「‐」はトランザクションの再実行の可能性が低いことを、記号「○」はトランザクションの再実行の可能性が高いことを、それぞれ示す。
【００３７】
また比較対象とする本発明に関連する第１の関連技術は、トランザクションの実行に必要なデータ１３１がキャッシュ上に存在していれば常にキャッシュ更新しない方法である。また本発明に関連する第２の関連技術は、トランザクションの実行前に常にキャッシュ更新を行う方法である。また実行する一連のトランザクションとして、最初のトランザクションＴＸ１から７番目のトランザクションＴＸ７までは、同じ識別情報のデータ１３１を使用するトランザクションとし、８番目から１０番目までのトランザクションＴＸ８、ＴＸ９、ＴＸ１０は、他のトランザクションと異なる識別情報のデータ１３１を使用するトランザクションとしている。
【００３８】
図３に示すように、本発明に関連する第１の関連技術では、キャッシュ１２１の更新コストが最小になるけれども、最初のトランザクションＴＸ１ではキャッシュ更新しないために楽観的排他に失敗し再実行する確率が高く、また８番目から１０番目までのトランザクションでもキャッシュ更新しないために楽観的排他に失敗し再実行する確率が高くなっている。２番目から７番目までのトランザクションにおいてキャッシュ更新しないにもかかわらず楽観的排他に成功し再実行する確率が低くなっているのは、直前のトランザクションで利用した最新のデータがキャッシュ１２１に保持されているためである。
【００３９】
また図３に示すように、本発明に関連する第２の関連技術では、毎回キャッシュ更新を行うため、楽観的排他に成功し再実行しなくてすむ確率が最も高くなっているが、キャッシュの更新コストは最大になる。
【００４０】
これに対して本実施形態による方法では、楽観的排他に成功し再実行しなくてよい確率が本発明に関連する第２の関連技術と同等であるにもかかわらず、キャッシュ更新コストが第２の関連技術に比べて大幅に低下している。その理由は、前述したように、キャッシュ上のデータが最新であると思われる場合、即ち、トランザクションで利用するデータの識別情報と前回のトランザクションで利用したデータの識別情報とが一致する場合には無駄にキャッシュ更新しないようにしているためである。
【００４１】
[第２の実施形態]
次に本発明の第２の実施形態について説明する。
【００４２】
図４を参照すると、本実施形態に係る分散処理システム２００は、クライアント２１０と処理解析サーバ２２０とデータベースサーバ２３０とを有する。
【００４３】
本実施形態に係る分散処理システム２００では、クライアント２１０は、まず処理解析サーバ２２０に処理要求を送る。ここで、１つの処理要求は、１つのトランザクションに相当する。クライアント２１０からの処理要求を受信した処理解析サーバ２２０は、処理要求を解析し、データベースサーバ２３０から必要な最新データをコピーしてきて、更新・参照処理を行う。処理解析サーバ２２０は、受信した処理要求に係る処理の完了後、応答をクライアント２１０に返す。クライアント２１０と処理解析サーバ２２０間、処理解析サーバ２２０とデータベースサーバ２３０間の全ての処理要求に係る処理は並列に行われるが、データの一貫性が失われることはない。また、クライアント２１０からデータベースサーバ２３０に直接に処理要求を送ることはない。
【００４４】
図５は本実施形態に係る分散処理システム２００のより詳細な構成を示す。図５を参照すると、本実施形態に係る分散処理システム２００は、ｉ個（ｉは１以上の整数）のクライアント（Ｃ）２１０を持つ分散データベースシステムである。分散データベースシステム内には、ｊ個（ｊは１以上の整数）の処理解析サーバ（Ｐ）２２０と、ｋ個（ｋは１以上の整数）のデータベースサーバ（Ｔ）２３０が存在する。各々のクライアント２１０は、全ての処理解析サーバ２２０と繋がっているため、任意の処理解析サーバ２２０に処理要求を送ることができる。また、各々の処理解析サーバ２２０は、全てのデータベースサーバ２３０と繋がっているため、任意のデータベースサーバ２３０に処理要求を送ることができる。
【００４５】
図６は処理解析サーバ２２０のブロック図である。処理解析サーバ２２０は、処理入出力部２２１、処理実行部２２２、およびデータ格納部２２３を有する。処理入出力部２２１は、クライアントとの通信部２２１１とデータベースサーバとの通信部２２１２とを有し、他機能サーバと処理要求やデータなどの送受信を行う。処理実行部２２２は、受信した処理要求を解析する処理解析部２２２１と、処理要求に係る処理を実際に実行する受信処理実行部２２２２とを有する。データ格納部２２３は、前回の処理要求で利用したデータの主キーを格納する前回処理データキー格納部２２３１と、データベースサーバ２３０からコピーしたデータを格納するキャッシュとしてのコピーデータ格納部２２３２とを有する。
【００４６】
図７はデータベースサーバ２３０のブロック図である。データベースサーバ２３０は、処理解析サーバ２２０と同様に、処理入出力部２３１、処理実行部２３２、およびデータ格納部２３３を有する。処理入出力部２３１は、処理解析サーバとの通信部２３１１を有する。データベースサーバ２３０はクライアント２１０と通信を行わないため、処理解析サーバ２２０におけるクライアントとの通信部２２１１に相当する通信部は有していない。処理実行部２３２は、実際に処理を実行する処理部２３２１を有する。データ格納部２３３は、最新のデータを格納するデータ格納部２３３１を有する。このデータ格納部２３３１に格納されるデータは、ＫＶデータとバージョン情報とを有する。
【００４７】
次に本実施形態の動作を処理解析サーバを中心に説明する。
【００４８】
まず動作の概要を説明する。処理解析サーバ２２０は、受信した処理要求が、前回の処理要求で利用したデータの主キー値と同じ主キー値を有するデータ（レコード）を利用する処理ならば、データベースサーバ２３０からデータのコピーを行わず、自サーバ内のコピーデータ格納部２２３２に格納されているデータに対し処理を行う。処理完了後、処理解析サーバ２２０は、データベースサーバ２３０のデータのバージョンを確認する。自サーバ内のデータが最新データだった場合、処理解析サーバ２２０は、更新処理ならば、データベースサーバ２３０に処理結果を反映し、クライアント２１０に結果を返す。参照処理ならば、そのままクライアントに結果を返す。
【００４９】
このように、処理解析サーバ２２０は、続く処理が同じデータに対する処理だった場合、自サーバに格納されているデータに対し、処理を行うことで、データベースサーバ２３０からのデータコピー時間を省き、処理性能を上げることが可能である。
【００５０】
次に動作をより具体的に説明する。図８は処理解析サーバ２２０の動作を示すフローチャートである。また図９はデータベースサーバ２３０のデータ格納部２３３１に保持されている表の例を示す。この例では、説明の容易さから表は１つだが、複数の表に対しても本発明は適用可能である。表中、データの主キーはＩＤ（下線部）とする。
【００５１】
以下では、下記のような処理要求（トランザクション）ａ〜ｄをその順にクライアント装置から受信した場合について動作を説明する。
（ａ）ＩＤ＝１のデータの個数更新
（ｂ）ＩＤ＝１のデータの個数更新
（ｃ）ＩＤ＝２のデータの単価更新
（ｄ）ＩＤ＝２のデータの個数参照
【００５２】
まず、処理解析サーバ２２０の処理解析部２２２１は、処理要求ａをクライアント２１０から受け取って、利用するデータのＩＤなどを解析する（図８のステップＳ２０１）。次に処理解析サーバ２２０の受信処理実行部２２２２は、前回処理データキー格納部２２３１に保持されている前回処理したデータのＩＤと今回受信した処理要求ａで利用するデータのＩＤが一致するか否か確認する（ステップＳ２０２）。処理要求ａは最初のものであり、一致しないため、データベースサーバ２３０のデータ格納部２３３から、最新のデータを自サーバのデータ格納部２２３のコピーデータ格納部２２３２にコピーする（ステップＳ２０３）。次に受信処理実行部２２２２は、コピーデータ格納部２２３２のデータを利用して処理要求ａの処理を実行する（ステップＳ２０４）。次に受信処理実行部２２２２は、処理要求ａは更新処理なので、ＣＡＳ操作によって、データベースサーバに更新結果を反映する（ステップＳ２０５、Ｓ２０６）。楽観的排他制御により、既に他のサーバからの更新でデータが更新されていた場合（ステップＳ２０５でＮＯ）、ＣＡＳ操作はエラーとなり、更新結果はデータベースサーバ２３０には反映されない。その場合、受信処理実行部２２２２は、エラー時に更新されていたデータのみ、データベースサーバ２３０からコピーデータ格納部２２３２に再度コピーする（ステップＳ２０７）。次に、受信処理実行部２２２２は、処理要求ａに係る処理を再度実行する（ステップＳ２０４）。そして、楽観的排他制御に失敗することなく処理要求ａに係る処理を無事終えると、処理解析サーバ２２０は、ステップＳ２０１の処理に戻る。
【００５３】
次に処理解析サーバ２２０の処理解析部２２２１は、処理要求ｂをクライアント２１０から受け取って解析する（ステップＳ２０１）。前回処理した処理要求ａで利用したデータのＩＤと今回受信した処理要求ｂで利用するデータのＩＤが一致するため（ステップＳ２０２でＹＥＳ）、処理解析サーバ２２０の受信処理実行部２２２２は、自サーバのデータ格納部２２３のコピーデータ格納部２２３２に格納されているデータに対し、処理を実行する（ステップＳ２０４）。処理要求ｂは更新処理なので、処理実行後は、データベースサーバ２３０のデータに処理結果を反映させる（ステップＳ２０５、Ｓ２０６）。
【００５４】
次に処理解析サーバ２２０の処理解析部２２２１は、処理要求ｃをクライアント２１０から受け取って解析する（ステップＳ２０１）。前回処理した処理要求ｂで利用したデータのＩＤと今回受信した処理要求ｃで利用するデータのＩＤは異なるため（ステップＳ２０２でＮＯ）、以下、処理要求ａの処理と同様の処理が行われる。
【００５５】
次に処理解析サーバ２２０の処理解析部２２２１は、処理要求ｄをクライアント２１０から受け取る（ステップＳ２０１）。前回処理した処理要求ｃで利用したデータのＩＤと今回受信した処理要求ｄで利用するデータのＩＤが一致するため（ステップＳ２０２でＹＥＳ）、処理解析サーバ２２０の受信処理実行部２２２２は、自サーバのデータ格納部２２３のコピーデータ格納部２２３２に格納されているデータに対し、処理を行う。処理要求ｄは参照処理のため、データベースサーバ２３０へのデータ反映が必要ない。しかし、タイミングによって、参照するデータの値が他の処理解析サーバに更新されてしまっている可能性がある。そのため、受信処理実行部２２２２は、クライアント２１０に結果を返す前にデータベースサーバ２３０のデータバージョンを確認する。該当データのバージョンが最新であることを確認できたらクライアントに結果を返す。もし、他の処理解析サーバによって更新されてしまっていたら（ステップＳ２０５でＮＯ）、更新されてしまったデータのみデータベースサーバ２３０から自サーバにコピーし、処理要求ｄの処理を再実行する。
【００５６】
このように、処理解析サーバ２２０は、直前の処理要求で利用したデータと今回受信した処理要求で利用するデータが同じ主キーか否かを判定し、同じでなければデータベースサーバ２３０から最新のデータを自サーバのデータ格納部２２３におけるコピーデータ格納部２２３２に取得し、同じであれば上記の取得処理を省略して自サーバのコピーデータ格納部２２３２に保持されているデータに対して処理を行う。
【００５７】
以下、楽観的排他制御により、処理がエラーになった場合の動きについて、もう少し詳しく説明する。
【００５８】
例えば、図１０に示すように、ＩＤ＝１のデータとＩＤ＝２のデータとを用いて加算処理を行い、その加算結果に基づいて主キーがｓｕｍ１のデータを更新する処理があったとする。処理解析サーバ２２０は、クライアント２１０から受信した処理要求に係る処理を行った後、データベースサーバ２３０に結果を反映しようとする。この時、処理解析サーバ２２０は、自サーバ上のＩＤ＝１、ＩＤ＝２、ｓｕｍ１の各データのバージョンをデータベースサーバ２３０上のＩＤ＝１、ＩＤ＝２、ｓｕｍ１の各データのバージョンと照合する。いま、ＩＤ＝２のデータのバージョンが他の処理解析サーバに更新され、２から３に上がっており、ＩＤ＝１、ｓｕｍ１の各データのバージョンは３、２のままであったとすると、処理解析サーバ２２０はＩＤ＝２のデータのみをデータベースサーバ２３０から自サーバにコピーする。また仮に、ＩＤ＝１、ＩＤ＝２の各データのバージョンが異なっていた場合は、ＩＤ＝１、ＩＤ＝２の各データをコピーするといったように、異なるバージョンのデータのみコピーする。そして、処理解析サーバ２２０は、コピーしたデータに対し、再度クライアントから受信した処理要求に係る処理を実施する。
【００５９】
このように、エラー時に、処理に必要なデータ全てではなく、差分のみをコピーすることにより、コピー時間が短縮される。
【００６０】
次に本実施形態の効果を説明する。
【００６１】
本実施形態によれば、処理解析サーバ２２０間で通信を行わないため、処理解析サーバ２２０が独立している。それにより、スケーラビリティな運用が可能である。
【００６２】
処理解析サーバ２２０に、前回処理したデータの識別情報（本実施形態では主キー）を保持し、前回処理したデータと同じ識別情報のデータを処理するか否かによってキャッシュ更新の有無を制御することで、データベースサーバ２３０からの処理データの無駄なコピーが低減し、システム全体の処理時間が短縮される。
【００６３】
楽観的排他制御によりエラーになった場合も、原因となったデータのみをコピーすることで、コピー時間が短縮される。それにより、再処理が再エラーになる可能性が下がる。すなわち、楽観的排他制御により、エラーになった時、一度全て削除して、新たなデータを取得する方法では、複数の処理解析サーバが一斉にエラーになった場合、また一緒に更新してしまう確率が高くなる。本実施形態のようにエラー時に差分のみコピーすることにより、差分があるデータ数・データサイズにより、処理解析サーバ間にデータコピー時間の差が生じるため、タイミングによってエラーが生じない可能性がある。
【００６４】
[第３の実施形態]
図１１を参照すると、本発明の第３の実施形態に係る分散処理システム３００は、クライアント３１０と処理解析サーバ３２０との間に、クライアント３１０から処理要求を受信し、受信した処理要求を処理解析サーバ３２０に振り分ける１台の振り分け装置３４０を有する点で、図５に示した第２の実施形態に係る分散処理システム２００と相違する。
【００６５】
クライアント３１０と処理解析サーバ３２０とデータベースサーバ３３０は、図５に示した第２の実施形態に係るクライアント２１０と処理解析サーバ２２０とデータベースサーバ２３０と同じである。
【００６６】
図１２を参照すると、振り分け装置３４０は、処理入出力部３４１、処理実行部３４２、およびデータ格納部３４３を有する。処理入出力部３４１は、クライアントとの通信部３４１１と処理解析サーバとの通信部３４１２とを有し、全てのクライアント３１０および全ての処理解析サーバ３２０と処理要求やデータの送受信を行う。処理実行部３４２は、受信した処理要求を解析する処理解析部３４２１と、受信した処理要求を処理解析サーバ３２０に振り分ける受信処理振り分け部３４２２とを有する。データ格納部３４３は、前回振り分けた処理要求で利用するデータの主キーを格納する前回処理データキー格納部３４３１と、処理要求を前回振り分けた処理解析サーバ３２０の識別情報（例えば名前）を格納する前回処理解析サーバ名格納部３４３２とを有する。
【００６７】
次に本実施形態の動作を説明する。クライアント３１０と処理解析サーバ３２０とデータベースサーバ３３０の動作は、図５に示した第２の実施形態に係るクライアント２１０と処理解析サーバ２２０とデータベースサーバ２３０と同じである。以下では、振り分け装置３４０の動作を中心に説明する。
【００６８】
図１３は振り分け装置３４０の動作を示すフローチャートである。振り分け装置３４０の処理解析部３４２１は、何れかのクライアント３１０から処理要求を受信して解析し、利用するデータのＩＤ等の解析結果を受信処理振り分け部３４２２へ伝達する（ステップＳ３０１）。次に、受信処理振り分け部３４２２は、その処理要求で利用するデータの主キーが前回処理した処理要求で利用するデータの主キーと一致するか否かを判定する（ステップＳ３０２）。具体的には、受信処理振り分け部３４２２は、前回処理データキー格納部３４３１から前回処理した処理要求で利用するデータの主キーを読み出し、今回受信した処理要求で利用するデータの主キーと比較する。比較の結果、一致しない場合、受信処理振り分け部３４２２は、今回受信した処理要求を任意の処理解析サーバ３２０に振り分ける（ステップＳ３０３）。このとき、受信処理振り分け部３４２２は、今回受信した処理要求で利用するデータの主キーを前回処理データキー格納部３４３１に保存し、今回振り分け先とした処理解析サーバ３２０の名前を前回処理解析サーバ名格納部３４３２に保存する。他方、上記比較の結果、一致した場合、受信処理振り分け部３４２２は、前回処理解析サーバ名格納部３４３２を参照して前回振り分け先として処理解析サーバ３２０を確認し、この処理解析サーバ３２０へ今回受信した処理要求を振り分ける（ステップＳ３０４）。
【００６９】
以下では、下記のような処理要求ａ〜ｃがその順でクライアント３１０から振り分け装置３４０に到着した場合について、動作を説明する。
（ａ）ＩＤ＝１のデータの個数更新
（ｂ）ＩＤ＝２のデータの単価更新
（ｃ）ＩＤ＝２のデータの個数更新
【００７０】
振り分け装置３４０は、処理要求ａを受信すると、それを解析し、前回処理した処理要求で利用するデータのＩＤと今回受信した処理要求ａで利用するデータのＩＤが一致するか否か確認する。処理要求ａは最初のものであり、それ以前に処理要求がないため、一致しない。一致しない場合、振り分け装置３４０は、適当な処理解析サーバ３２０に処理要求ａを振り分ける。
【００７１】
次に振り分け装置３４０は、処理要求ｂを受信すると、それを解析し、前回処理した処理要求ａで利用するデータのＩＤ（＝１）と今回受信した処理要求ｂで利用するデータのＩＤ（＝２）は異なるため、処理要求ｂを適当な処理解析サーバ３２０に振り分ける。
【００７２】
次に振り分け装置３４０は、処理要求ｃを受信すると、それを解析し、前回処理した処理要求ｂで利用するデータのＩＤ（＝２）と今回受信した処理要求ｃで利用するデータのＩＤ（＝２）は一致するため、前回の処理要求ｂを振り分けた処理解析サーバ３２０と同じ処理解析サーバ３２０に処理要求ｃを振り分ける。従って、処理要求ｂに続いて処理要求ｃを受信した処理解析サーバ３２０では、処理要求の実行に利用するデータの主キーが同じ処理要求ｂ、ｃが連続して投入されるため、無駄なキャッシュ更新動作が抑制される。
【００７３】
このように、本実施形態によれば、利用するデータの主キーが同じ複数の処理要求が同じ処理解析サーバに連続して振り分けるように、クライアントから送信された処理要求を複数の処理解析サーバに振り分ける振り分け装置３４０を有するため、任意のクライアントが任意の処理解析サーバに処理要求を送信する構成に比較して、処理解析サーバにおける無駄なキャッシュ更新を削減することができる。
【００７４】
[第４の実施形態]
図１４を参照すると、本発明の第４の実施形態に係る分散処理システム４００は、クライアント４１０と処理解析サーバ４２０との間に、クライアント４１０から処理要求を受信し、受信した処理要求を処理解析サーバ４２０に振り分ける１台または２台以上の振り分け装置４４０を有する点で、図５に示した第２の実施形態に係る分散処理システム２００と相違する。また、本実施形態に係る分散処理システム４００は、処理解析サーバ４２０の機能が第２の実施形態に係る分散処理システム２００の処理解析サーバ２２０の機能と一部相違している。
【００７５】
クライアント４１０とデータベースサーバ４３０は、図５に示した第２の実施形態に係るクライアント２１０とデータベースサーバ２３０と同じである。
【００７６】
図１５を参照すると、振り分け装置４４０は、処理入出力部４４１、処理実行部４４２、およびデータ格納部４４３を有する。処理入出力部４４１は、クライアントとの通信部４４１１と処理解析サーバとの通信部４４１２とを有し、全てのクライアント４１０および全ての処理解析サーバ４２０と処理要求やデータの送受信を行う。処理実行部４４２は、受信した処理要求を解析する処理解析部４４２１と、受信した処理要求を処理解析サーバ４２０に振り分ける受信処理振り分け部４４２２とを有する。データ格納部４４３は、特定データ振り分け先一覧表格納部４４３１を有する。
【００７７】
データ格納部４４３に格納されている特定データ振り分け先一覧表格納部４４３１は、特定データの識別情報とその特定データを利用する処理要求の振り分け先とする処理解析サーバの識別情報との対応関係を記載した一覧表を記憶する。図１６は、特定データ振り分け先一覧表の構成例である。この例では、主キーであるＩＤが２であるデータを利用する処理要求は、識別情報Ｐ１で特定される処理解析サーバ４２０に振り分けることが定められている。また、主キーであるＩＤが１であるデータを利用する処理要求は、識別情報Ｐ２で特定される処理解析サーバ４２０に振り分けることが定められている。また特定データ振り分け先一覧表は、左に記載されている情報ほど優先度が高くなっている。従って、図１６の例では、ＩＤが１であるデータとＩＤが２であるデータとの双方を利用する処理要求は、識別情報Ｐ２で特定される処理解析サーバ４２０に振り分けることが定められている。特定データ振り分け先一覧表に登録される処理解析サーバは、全サーバである必要は必ずしもなく、一部の処理解析サーバであってよい。振り分け装置４４０が複数存在する場合、全ての振り分け装置４４０の特定データ振り分け先一覧表は同じ内容になっている。
【００７８】
図１７は処理解析サーバ４２０のブロック図である。処理解析サーバ４２０は、処理入出力部４２１、処理実行部４２２、およびデータ格納部４２３を有する。処理入出力部４２１は、振り分け装置との通信部４２１１とデータベースサーバとの通信部４２１２とを有し、他機能サーバと処理やデータの送受信を行う。処理実行部４２２は、受信した処理要求を解析する処理解析部４２２１と、処理要求に係る処理を実際に実行する受信処理実行部４２２２とを有する。データ格納部４２３は、前回処理を実施したデータの主キーを格納する前回処理データキー格納部４２３１と、データベースサーバ４３０からコピーしたデータを格納するキャッシュとしてのコピーデータ格納部４２３２と、データベースサーバ４３０からコピーした特定データを格納するキャッシュとしての特定データ格納部４２３３とを有する。この特定データ格納部４２３３には、一連のトランザクションの実行に先だって、データベースサーバから取得した特定データが予め記憶されていることが望ましい。なお、本実施形態では、処理解析サーバ４２０で実行された処理結果を振り分け装置を通じて要求元のクライアントへ送信する。しかし、処理解析サーバ４２０で実行された処理結果を振り分け装置を経由せずに、処理解析サーバ４２０から要求元のクライアントに直接に送信するようにしてもよい。この場合、処理解析サーバ４２０の処理入出力部４２１は、クライアントとの通信部を有する。
【００７９】
次に本実施形態の動作を説明する。クライアント４１０とデータベースサーバ４３０の動作は、図５に示した第２の実施形態に係るクライアント２１０とデータベースサーバ２３０と同じである。以下では、振り分け装置４４０と処理解析サーバ４２０の動作を中心に説明する。
【００８０】
図１８は振り分け装置４４０の動作を示すフローチャートである。振り分け装置４４０の処理解析部４４２１は、何れかのクライアント４１０から処理要求を受信し、利用するデータの主キーなどを解析する（ステップＳ４０１）。次に、振り分け装置４４０の受信処理振り分け部４４２２は、その処理要求で利用するデータが特定データであるか否かを判定する。具体的には、受信処理振り分け部４４２２は、格納部４４３１から特定データ振り分け先一覧表を読み出し、当該一覧表の先頭から順に、一覧表に記載されている特定データの主キーと今回受信した処理要求で利用するデータの主キーとを照合する（ステップＳ４０２）。照合の結果、今回受信した処理要求で利用するデータが特定データ振り分け先一覧表に記載される特定データである場合（ステップＳ４０３でＹＥＳ）、受信処理振り分け部４４２２は、当該処理要求に特定データフラグを付加し、今回受信した処理要求を特定データ振り分け先一覧表で定められた処理解析サーバ４２０に振り分ける（ステップＳ４０４）。他方、上記照合の結果、特定データに対する処理要求でないことが判明した場合、受信処理振り分け部４４２２は、任意の処理解析サーバ４２０へ今回受信した処理要求を振り分ける（ステップＳ４０５）。このときは、処理要求には特定データフラグは付加しない。
【００８１】
図１９は処理解析サーバ４２０の動作を示すフローチャートである。処理解析サーバ４２０の処理解析部４２２１は、振り分け装置４４０から処理要求を受信して、利用するデータの主キーや特定データフラグの有無等を解析する（ステップＳ４１１）。次に、処理解析サーバ４２０の受信処理実行部４２２２は、その解析結果に基づいて、処理要求に特定データフラグが付加されているか否かを判定する（ステップＳ４１２）。特定データフラグが付加されている場合、ステップＳ４１３、Ｓ４１４をスキップして、ステップＳ４１５の処理へ進む。処理要求に特定データフラグが付加されていない場合には、受信処理実行部４２２２は、前回処理データキー格納部４２３１に保持されている前回処理したデータのＩＤと今回受信した処理要求で利用するデータのＩＤが一致するか否か確認する（ステップＳ４１３）。若し、一致しなかった場合、データベースサーバ４３０から、最新のデータを自サーバのデータ格納部４２３のコピーデータ格納部４２３２にコピーする（ステップＳ４１３）。そして、ステップＳ４１５の処理へ進む。一致した場合は、ステップＳ４１４の処理をスキップし、ステップＳ４１５の処理へ進む。
【００８２】
処理解析サーバ４２０の受信処理実行部４２２２は、ステップＳ４１５において、コピーデータ格納部４２３２と特定データ格納部４２３３のデータを利用して処理要求の処理を実行する。以降、処理解析サーバ４２０は、第２の実施形態における図８のステップＳ２０５〜Ｓ２０７と同様のステップＳ４１６〜Ｓ４１８の処理を実行する。
【００８３】
以下では、下記のような処理要求ａ〜ｃがその順でクライアント４１０から振り分け装置４４０に到着した場合について、動作を説明する。
（ａ）ＩＤ＝２のデータの個数更新
（ｂ）ＩＤ＝３のデータの個数更新
（ｃ）ＩＤ＝１のデータの単価更新、ＩＤ＝２の単価更新
【００８４】
振り分け装置４４０は、処理要求ａを受信すると、特定データ振り分け先一覧表を確認する。図１６を参照すると、ＩＤ＝２のデータは特定データであり、識別情報Ｐ１の処理解析サーバ４２０に振り分けるようになっている。このため、振り分け装置４４０は、処理要求ａに特定データフラグを付加し、識別情報Ｐ１の処理解析サーバ４２０に振り分ける。ここでは、処理要求ａに特定データフラグを付加したが、処理要求ａ中のＩＤ＝２に特定データフラグを付加するようにしてもよい。
【００８５】
振り分け装置４４０から処理要求ａを受け取った処理解析サーバ４２０は、特定データフラグの有無を確認し、特定データフラグが立っているので、前回処理したデータにかかわらず、自サーバの特定データ格納部４２３３に格納されているデータに対して処理を実行する。
【００８６】
次に振り分け装置４４０は、処理要求ｂを受信すると、特定データ振り分け先一覧表を確認するが、図１６を参照すると、ＩＤ＝３の記述がない。そのため、振り分け装置４４０は、処理要求ｂを適当な処理解析サーバ４２０に振り分ける。
【００８７】
振り分け装置４４０から処理要求ｂを受け取った処理解析サーバ４２０は、特定データフラグの有無を確認し、特定データフラグが立っていないので、図８を参照して説明した第２の実施形態における処理解析サーバ２２０と同様の処理を行う。
【００８８】
次に振り分け装置４４０は、処理要求ｃを受信すると、再び特定データ振り分け先一覧表を確認する。処理要求ｃは、ＩＤ＝１とＩＤ＝２の２つのデータに対する処理であり、図１６を参照すると、ＩＤ＝２のデータを識別情報Ｐ１に振り分ける優先度の方が高い。従って、振り分け装置４４０は、処理要求ｃに特定データフラグを付加し、識別情報Ｐ１の処理解析サーバ４２０に振り分ける。ここでは、処理要求ｃに特定データフラグを付加したが、処理要求ｃ中のＩＤ＝２に特定データフラグを付加するようにしてもよい。
【００８９】
振り分け装置４４０から処理要求ｃを受け取った処理解析サーバ４２０は、特定データフラグの有無を確認し、特定データフラグが立っているので、前回処理したデータにかかわらず、自サーバの特定データ格納部４２３３およびコピーデータ格納部４２３２に格納されているデータに対して処理を実行する。
【００９０】
このように、本実施形態によれば、特定データを利用する処理要求が特定の処理解析サーバに振り分けるように、クライアントから送信された処理要求を複数の処理解析サーバに振り分ける振り分け装置４４０を有するため、任意のクライアントが任意の処理解析サーバに処理要求を送信する構成に比較して、処理解析サーバにおける無駄なキャッシュ更新を削減することができる。
【００９１】
また、複数の振り分け装置４４０を有する構成によれば、クライアントからの処理の負荷分散が可能である。
【００９２】
[第５の実施形態]
本実施形態に係る分散処理システムは、第４の実施形態に係る分散処理システムと比較して、振り分け装置の機能のみ相違する。
【００９３】
図２０は、本実施形態における振り分け装置５４０のブロック図である。図２０を参照すると、振り分け装置５４０は、処理入出力部５４１、処理実行部５４２、およびデータ格納部５４３を有する。処理入出力部５４１は、クライアントとの通信部５４１１と処理解析サーバとの通信部５４１２とを有し、全てのクライアント４１０および全ての処理解析サーバ４２０と処理要求やデータの送受信を行う。処理実行部５４２は、受信した処理要求を解析する処理解析部５４２１と、受信した処理要求を処理解析サーバ４２０に振り分ける受信処理振り分け部５４２２とを有する。データ格納部５４３は、前回処理データキー格納部５４３１と、前回処理解析サーバ名格納部５４３２と、特定データ振り分け先一覧表格納部４４３１を有する。
【００９４】
データ格納部５４３が有する前回処理データキー格納部５４３１と前回処理解析サーバ名格納部５４３２とは、図１２に示した第３の実施形態における振り分け装置３４０が有する前回処理データキー格納部３４３１と前回処理解析サーバ名格納部３４３２と同じである。またデータ格納部５４３が有する特定データ振り分け先一覧表格納部５４３３は、図１５に示した第４の実施形態における振り分け装置４４０が有する特定データ振り分け先一覧表格納部４４３３と同じである。
【００９５】
図２１は振り分け装置５４０の動作を示すフローチャートである。振り分け装置５４０の処理解析部５４２１は、何れかのクライアント４１０から処理要求を受信し、利用するデータの主キーや特定データフラグの有無等を解析する（ステップＳ５０１）。次に、振り分け装置５４０の受信処理振り分け部５４２２は、上記の解析結果に基づいて、処理要求で利用するデータが特定データであるか否かを判定する（ステップＳ５０２）。具体的には、受信処理振り分け部５４２２は、格納部５４３１から特定データ振り分け先一覧表を読み出し、当該一覧表の先頭から順に、一覧表に記載されている特定データの主キーと今回受信した処理要求で利用するデータの主キーとを照合する。照合の結果、今回受信した処理要求で利用するデータが特定データ振り分け先一覧表に記載される特定データである場合（ステップＳ５０３でＹＥＳ）、受信処理振り分け部５４２２は、当該処理要求に特定データフラグを付加し、今回受信した処理要求を特定データ振り分け先一覧表で定められた処理解析サーバ４２０に振り分ける（ステップＳ５０４）。このとき、受信処理振り分け部５４２２は、今回受信した処理要求で利用するデータの主キーを前回処理データキー格納部５４３１に保存し、今回振り分け先とした処理解析サーバ４２０の名前を前回処理解析サーバ名格納部５４３２に保存する。
【００９６】
他方、上記照合の結果、特定データに対する処理要求でないことが判明した場合、受信処理振り分け部５４２２は、前回処理データキー格納部５４３１から前回処理した処理要求で利用するデータの主キーを読み出し、今回受信した処理要求で利用するデータの主キーと比較する（ステップＳ５０５）。比較の結果、一致しない場合、受信処理振り分け部５４２２は、今回受信した処理要求を任意の処理解析サーバ４２０に振り分ける（ステップＳ５０６）。このとき、受信処理振り分け部５４２２は、今回受信した処理要求で利用するデータの主キーを前回処理データキー格納部５４３１に保存し、今回振り分け先とした処理解析サーバ４２０の名前を前回処理解析サーバ名格納部５４３２に保存する。他方、上記比較の結果、一致した場合、受信処理振り分け部５４２２は、前回処理解析サーバ名格納部５４３２を参照して前回振り分け先として処理解析サーバ４２０を確認し、この処理解析サーバ４２０へ今回受信した処理要求を振り分ける（ステップＳ５０７）。上記ステップＳ５０６、Ｓ５０７において、処理解析サーバ４２０へ処理要求を振り分ける際、処理要求には特定データフラグは付加しない。
【００９７】
本実施形態によれば、特定データを利用する処理要求が特定の処理解析サーバに振り分けるように、また、特定データ以外のデータを利用する処理要求については、利用するデータの主キーが同じ複数の処理要求が同じ処理解析サーバに連続して振り分けるように、クライアントから送信された処理要求を複数の処理解析サーバに振り分ける振り分け装置５４０を有するため、任意のクライアントが任意の処理解析サーバに処理要求を送信する構成に比較して、処理解析サーバにおける無駄なキャッシュ更新を削減することができる。
【００９８】
なお、本発明は、日本国にて２０１３年５月３１日に特許出願された特願２０１３−１１５４８９の特許出願に基づく優先権主張の利益を享受するものであり、当該特許出願に記載された内容は、全て本明細書に含まれるものとする。
【産業上の利用可能性】
【００９９】
本発明は、データの一貫性を保持しつつ大量データの高速処理を行う分散処理システム、例えば分散キーバリューストアを用いてトランザクションを実行するシステム、特に大量ストリームが発生する分散データベースシステムや、より高速な処理が求められる分散データベースシステムに好適である。
【符号の説明】
【０１００】
１００…分散処理システム
１１０…クライアント装置
１２０…サーバ装置
１２１…キャッシュ
１２２…識別情報保持部
１２３…トランザクション実行部
１３０…永続記憶装置
１３１…データ
【図１】
2014192213.tif 000003
【図２】
2014192213.tif 000004
【図３】
2014192213.tif 000005
【図４】
2014192213.tif 000006
【図５】
2014192213.tif 000007
【図６】
2014192213.tif 000008
【図７】
2014192213.tif 000009
【図８】
2014192213.tif 000010
【図９】
2014192213.tif 000011
【図１０】
2014192213.tif 000012
【図１１】
2014192213.tif 000013
【図１２】
2014192213.tif 000014
【図１３】
2014192213.tif 000015
【図１４】
2014192213.tif 000016
【図１５】
2014192213.tif 000017
【図１６】
2014192213.tif 000018
【図１７】
2014192213.tif 000019
【図１８】
2014192213.tif 000020
【図１９】
2014192213.tif 000021
【図２０】
2014192213.tif 000022
【図２１】
2014192213.tif 000023
【図２２】
2014192213.tif 000024
【国際調査報告】
2014192213.tif 000025
2014192213.tif 000026
2014192213.tif 000027