(57)【特許請求の範囲】
【請求項１】
移行元の情報処理装置からデータの移行を受け付ける情報処理装置において、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行する処理部と、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知する応答部と、
を備える情報処理装置。
【請求項２】
前記処理部は、前記操作対象データが、前記移行元の情報処理装置から移行中である場合には、移行完了後に前記処理を実行する、
請求項１に記載の情報処理装置。
【請求項３】
前記処理部は、前記操作対象データが更新中である場合、前記移行元の情報処理装置における前記操作対象データの更新内容を含む差分データとともに、前記操作対象データの移行を受け付け、前記操作対象データおよび前記差分データに基づいて前記処理を行う、請求項１又は２に記載の情報処理装置。
【請求項４】
移行元の情報処理装置と、前記移行元の情報処理装置からデータの移行を受け付ける移行先の情報処理装置とを有する情報処理システムにおいて、
前記移行先の情報処理装置は、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行する処理部と、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知する応答部と、を備える、
情報処理システム。
【請求項５】
前記移行元の情報処理装置は、前記処理依頼を受信してトランザクションが発生した場合、前記操作対象データが更新中であることを記録し、前記トランザクションが終了する
と、前記記録を消去する記憶部、をさらに備える、
請求項４に記載の情報処理システム。
【請求項６】
前記クライアント装置は、前記処理の結果に基づいて、前記クライアント装置で保持しているデータの配置情報を更新する、
請求項４又は５に記載の情報処理システム。
【請求項７】
前記移行元の情報処理装置が、移行元の待機系情報処理装置と共にクラスタシステムを構築する場合に、前記移行先の情報処理装置は、前記データを受信すると、移行先の待機系情報処理装置との間で同期を取る、
請求項４から６のいずれか一項に記載の情報処理システム。
【請求項８】
移行元の情報処理装置からデータの移行を受け付ける移行先の情報処理装置に、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行させ、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知させる、
ための制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム及び制御プログラムに関する。
【背景技術】
【０００２】
近年、企業の扱うデータ量が増え、オンラインシステムの大規模化やクラウドコンピューティングの導入が進んでいる。データを高速に処理する手段の１つに、Key-Value Store（ＫＶＳ）がある。ＫＶＳは、データを保存し管理する手法である。ＫＶＳは、保存し
たいデータ（Ｖａｌｕｅ）と対応する一意の識別子（Ｋｅｙ）の組み合わせでデータを管理する。ＫＶＳでは、オンラインシステム等におけるクライアントからの処理依頼に対し、Ｋｅｙを指定してＶａｌｕｅを取り出すという単純な仕組みで、データが取得される。Ｋｅｙに応じてデータを複数台に分散して保存できるため、サーバが増設しやすい。即ち、ＫＶＳは、システムの拡張性に優れ、処理の遅延時間を低減する。このため、サーバの増設により、処理の高速化が容易となる。なお、サーバの増設によりシステム規模を拡充する手段は、スケールアウトといわれる。
【０００３】
複数のサーバでデータを分散して保存するdistributed KVS（分散ＫＶＳ）は、ステー
トレスな処理方式に適しており、スケールアウトが容易である。ステートレス処理方式は、現在の状態等を示すデータを保持せず、入力データに対して出力データが決定される方式である。
【０００４】
一方、オンラインシステムによる業務サービス等は、一般に、ステートレスな処理方式だけでは実現が難しく、特に重要な業務サービスではストーフルな処理方式を必要とする。ステートフルな処理方式は、現在の状態等を示すデータを保持し、保持したデータの内容を入力データに反映して出力データを決定する方式である。ステートレスで拡張性がある分散ＫＶＳに、Relational Database Management System（ＲＤＢＭＳ）等のトランザ
クション、排他制御、読み取り一貫性の保証、スプリットブレイン対策等の機能を追加していくと、状態を管理せざるをえなくなり、処理方式は拡張性のないステートフルとなる。
【０００５】
分散ＫＶＳの業務サービス等に対し、トランザクション、排他制御、読み取り一貫性の保証、スプリットブレイン対策に対応していくと、ステートレス性が失われ、処理方式は拡張性のないステートフルとなる。従って、分散ＫＶＳの業務サービスでなくなるため、拡張性が失われる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−１７５１１７号公報
【特許文献２】特開２００７−３２８７１１号公報
【特許文献３】特開２００５−３３９０７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ステートフルな処理を行うサーバに対してスケールアウトをすると、データの不整合が生じる場合がある。例えば、増設した移行先サーバにデータを移行した後、クライアントからの処理依頼により移行元サーバのデータが更新されると、移行先サーバのデータは、移行元サーバのデータと差分を生じる場合がある。また、サーバ側のデータ配置は、サーバの増設によって変更され、クライアント側で保持しているデータ配置と
整合しなくなる場合がある。
【０００８】
データの不整合を防ぐため、クライアントは、サーバへの処理依頼を停止し、スケールアウト後に増設したサーバに接続し直すことになる。すなわち、業務サービス等のステートフルな処理を行う場合、業務サービス等を停止したり、データへのアクセスを制限した上でデータを移行したりするため、スケールアウトが容易でなくなり、分散ＫＶＳによるステートレス性の利点が活かせない。
【０００９】
本発明の一態様は、クライアントからサーバへの処理依頼の停止を回避して、スケールアウトを可能とする情報処理装置、情報処理システム及び制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の態様の一つは、移行元の情報処理装置からデータの移行を受け付ける情報処理装置において、クライアント装置からの処理依頼の対象である操作対象データに対して、移行元の情報処理装置からの移行がなされ、移行元の情報処理装置から処理依頼を受信した場合に、操作対象データに対する処理を実行する処理部と、操作対象データの配置情報を含む処理の結果を、クライアント装置に通知する応答部と、を備える情報処理装置である。
【発明の効果】
【００１１】
開示の情報処理装置、情報処理システム及び制御プログラムによれば、クライアントからサーバへの処理依頼の停止を回避して、スケールアウトすることができる。
【図面の簡単な説明】
【００１２】
【図１】Shared Nothing方式の情報処理システムの例を示す図である。
【図２】比較例１におけるスケールアウトの例を示す図である。
【図３】比較例２におけるスケールアウトの例を示す図である。
【図４】比較例３におけるスケールアウトの例を示す図である。
【図５】情報処理システムの一例を示す図である。
【図６】情報処理装置のハードウェア構成の一例を示す図である。
【図７】サーバ装置の処理構成の一例を示す図である。
【図８】クライアント装置の処理構成の一例を示す図である。
【図９Ａ】ＲＤＢＭＳの表定義の例を示す図である。
【図９Ｂ】ＫＶＳの表定義の例を示す図である。
【図９Ｃ】データ集合の配置定義の例を示す図である。
【図１０】データ移行リストのデータ構造の一例を示す図である。
【図１１】被データ移行リストのデータ構造の一例を示す図である。
【図１２】クライアント通知リストのデータ構造の一例を示す図である。
【図１３】コネクション情報リストのデータ構造の一例を示す図である。
【図１４】トランザクションログのデータ構造の一例を示す図である。
【図１５】移行データのデータ構造の一例を示す図である。
【図１６】サーバ装置の定義ファイルの例を示す図である。
【図１７】クライアント装置におけるデータ集合接続先リストのデータ構造の一例を示す図である。
【図１８】クライアント装置におけるサーバ接続先リストのデータ構造の一例を示す図である。
【図１９】クライアント装置の定義ファイルの例を示す図である。
【図２０】依頼データのデータ構造の一例を示す図である。
【図２１】結果データのデータ構造の一例を示す図である。
【図２２】移行済のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。
【図２３】移行中のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。
【図２４】移行未のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。
【図２５】更新中でないデータ集合を優先して移行先サーバへ送信する場合の動作例を示す図である。
【図２６】更新中のデータ集合を移行先サーバへ送信する場合の動作例を示す図である。
【図２７】クライアント装置におけるデータ配置および接続先情報の更新の例を示す図である。
【図２８】クラスタシステムにおいてスケールアウトする場合の動作例を示す図である。
【図２９】サーバ制御処理のフローチャートの一例である。
【図３０】コマンド受付処理のフローチャートの一例である。
【図３１】スケールアウト処理のフローチャートの一例である。
【図３２】移行元サーバの処理のフローチャートの一例である。
【図３３】移行データ送信処理のフローチャートの一例である。
【図３４】移行先サーバの処理のフローチャートの一例である。
【図３５】依頼データ受付処理のフローチャートの一例である。
【図３６Ａ】依頼データ処理のフローチャートの一例である。
【図３６Ｂ】依頼データ処理のフローチャートの一例である。
【図３７Ａ】依頼データに基づく処理操作のフローチャートの一例である。
【図３７Ｂ】依頼データに基づく処理操作のフローチャートの一例である。
【図３８Ａ】クライアント制御処理のフローチャートの一例である。
【図３８Ｂ】クライアント制御処理のフローチャートの一例である。
【図３９】結果データ受信処理のフローチャートの一例である。
【発明を実施するための形態】
【００１３】
以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１４】
＜Shared Nothing方式＞
図１は、Shared Nothing方式の情報処理システムの例を示す図である。Shared Nothing方式は、データベースのアクセス管理をサーバと対応させる方式である。図１において、情報処理システムは、ノード１およびノード２を含む。現用系のノード１は、Database Management System（ＤＢＭＳ）によりデータベースＤＢ１を管理する。ノード１は、ＤＢ１に直接アクセスし、ノード１内において排他制御を行う。現用系のノード２は、ＤＢＭＳによりデータベースＤＢ２を管理する。ノード２は、ＤＢ２に直接アクセスし、ノード２内において排他制御を行う。ノード１は、ＤＢ２にアクセスする場合、ノード２に処理依頼を出し、間接的にＤＢ２にアクセスする。
【００１５】
Shared Nothing方式の利点は、情報処理システムを構成するコンピュータ間での排他制御が不要となることである。また、Shared Nothing方式では、データベースシステムの性能を左右するメモリ上のデータベースバッファが、単一システムの場合と同様に活用できる。このため、Shared Nothing方式の情報処理システムは、Input/Output（Ｉ／Ｏ）処理を効率良く行うことができ、サーバ数に比例した性能スケーラビリティが保証できる。
【００１６】
＜比較例１＞
図２は、比較例１におけるスケールアウトの例を示す図である。図２において、ステートレス処理方式で運用される情報処理システムは、複数のクライアント装置（以下、クライアントともいう）であるＣＬ＃１からＣＬ＃２ｎを含む。また、情報処理システムは、サーバ装置（以下、サーバともいう）としてサーバ＃１を含む。サーバ＃１は、複数のノードＳＶ＃１１からＳＶ＃１ｎを含む。情報処理システムは、ステートレス処理方式で運用されるため、制御システム内部に状態およびデータ等（以下、状態データともいう）を保持せず、入力データに対し出力データを決定する。
【００１７】
図２において、ＣＬ＃１からＣＬ＃ｎは、それぞれＳＶ＃１１からＳＶ＃１ｎに処理依頼をする。さらに、ＣＬ＃ｎ＋１からＣＬ＃２ｎがそれぞれＳＶ＃１１からＳＶ＃１ｎに処理依頼をすると、サーバ＃１に対する処理依頼は２倍になる。処理依頼の増加に対処するため、サーバ＃２が追加される。サーバ＃２は、複数のノードＳＶ＃２１からＳＶ＃２ｎを含む。情報処理システムは、ステートレス処理方式で運用されるため、追加したサーバ＃２への状態データの移行は行わない。このため、ＣＬ＃ｎ＋１からＣＬ＃２ｎの処理依頼の接続先を、それぞれＳＶ＃２１からＳＶ＃２ｎに変更することで、スケールアウトが可能となり、サーバ側の処理能力は２倍になる。
【００１８】
＜比較例２＞
図３は、比較例２におけるスケールアウトの例を示す図である。図３において、ステートフル処理方式で運用される情報処理システムは、複数のクライアントであるＣＬ＃１からＣＬ＃２ｎを含む。また、情報処理システムは、サーバとしてサーバ＃１を含む。サーバ＃１は、複数のノードＳＶ＃１１からＳＶ＃１ｎを含む。サーバ＃１は、ＣＬ＃１からＣＬ＃２ｎの状態データを保持する。情報処理システムは、ステートフル処理方式で運用されるため、制御システム内部にクライアントからの処理依頼に関する状態データを保持し、保持された内容を入力データに反映して出力データを決定する。
【００１９】
図３において、ＣＬ＃１からＣＬ＃ｎは、それぞれＳＶ＃１１からＳＶ＃１ｎに処理依頼をする。さらに、ＣＬ＃ｎ＋１からＣＬ＃２ｎがそれぞれＳＶ＃１１からＳＶ＃１ｎに処理依頼をすると、サーバ＃１に対する処理依頼は２倍になる。処理依頼の増加に対処するため、サーバ＃２が追加される。このとき、情報処理システムは、状態データもサーバ＃２に移行する。
【００２０】
具体的には、サーバ＃２が追加されると、まず、クライアントから状態データへのアクセスが停止される。処理中のトランザクションは破棄される。次に、ＣＬ＃ｎ＋１からＣＬ＃２ｎの状態データは、サーバ＃２に移行される。クライアントは、状態データの移行が完了するまで、処理依頼を送信しない。また、ＣＬ＃ｎ＋１からＣＬ＃２ｎは、処理依頼の接続先を追加されたサーバ＃２に変更する。状態データの移行完了後、クライアントは、破棄されたトランザクションの処理依頼をサーバ＃２に送信する。当該トランザクションは最初から実行される。
【００２１】
＜比較例３＞
図４は、比較例３におけるスケールアウトの例を示す図である。図４において、情報処理システムは、複数のクライアントであるＣＬ＃１からＣＬ＃２ｎを含む。また、情報処理システムは、サーバとしてサーバ＃１およびサーバ＃２を含む。サーバ＃１は、ノードＳＶ＃１１およびデータ集合１からデータ集合Ｘを含む。サーバ＃２は、ノードＳＶ＃２１を含む。また、サーバ＃２は、サーバ＃１から移行されたデータ集合ｎからデータ集合ｍを含む。
【００２２】
図４において、クライアントＣＬ＃１からＣＬ＃２ｎは、サーバ＃１のデータ集合にアクセスする。更新中のデータ集合がサーバ＃２に移行されると、サーバ＃１のデータ集合
とサーバ＃２のデータ集合との間に差異が生じる。また、データ集合をサーバ＃２に移行し、クライアント側で保持しているサーバ＃１およびサーバ＃２におけるデータ配置情報を更新しなければ、クライアントは、接続先が変更されていないため、サーバ＃２に移行されたデータ集合にアクセスできない。
【００２３】
Shared Nothing方式またはステートフルな方式で動作しているサーバをスケールアウトする際、移行元サーバのデータと移行先サーバのデータとで、差異が生じないようにするためには、クライアントからサーバへのデータアクセスが停止される。クライアントからサーバへのデータアクセスの停止により、クライアントは、新規サーバの接続先情報の追加やクライアントが保持しているデータ配置等を変更することができる。これにより、クライアントとサーバのデータ配置の整合性が保たれる。
【００２４】
＜実施形態＞
情報処理システムにおいて処理能力を拡大する場合、スケールアウトにより、新たなサーバが増設される。スケールアウトの対象であるサーバ（以下、移行元サーバともいう）は、自身の保持するデータの一部を増設されたサーバ(以下、移行先サーバともいう)に移行する。
【００２５】
Shared Nothing方式またはステートフルな方式で動作している情報処理システムにおいてスケールアウトをする際、移行先サーバは、移行元サーバで保持していたデータの他、トランザクション状態やコネクション状態を、移行元サーバから引き継ぐ。これにより、情報処理システムは、クライアントからサーバへのデータアクセスを停止することなくトランザクション処理を継続することができる。
【００２６】
また、クライアントは、操作対象のデータ集合を含むサーバに対し、処理を依頼するためのデータ（以下、依頼データまたは処理依頼ともいう）を送信する。なお、サーバに配置されるデータは、データ集合単位で管理される。依頼データを受信し、依頼データに基づく処理を実施したサーバは、処理結果を含むデータ（以下、結果データともいう）を、クライアントに送信する。クライアントは、依頼データの送信先であるサーバと、結果データの返信元のサーバとが異なる場合に、データ集合の配置先が変更されたことを認識する。データ集合の配置先が変更されたことを認識すると、クライアントは、クライアント側で保持しているデータ集合が配置されているサーバの接続先情報を変更する。これにより、クライアントは、データ集合の配置等の管理情報を動的に変更することができる。
【００２７】
したがって、情報処理システムは、クライアントからサーバへのデータアクセスを停止することなく、クライアントの管理情報を動的に変更することで、オンライン中のスケールアウトを可能とする。移行先サーバ、移行元サーバおよびサーバは、情報処理装置の一例である。また、依頼データは処理依頼の一例である。依頼データの操作対象であるデータ集合は、操作対象データの一例である。
【００２８】
＜装置構成＞
図５および図６は、実施形態における装置構成の一例を説明する。図５は、情報処理システム１の一例を示す図である。情報処理システム１は、ネットワーク１４を介して接続される複数の情報処理装置２を含む。情報処理装置２は、クライアント装置、サーバ装置、またはサーバ兼クライアント装置であってもよい。
【００２９】
図６は、情報処理装置２のハードウェア構成の一例を示す図である。情報処理装置２は、プロセッサ３、主記憶装置４、補助記憶装置５、画像信号処理部６、入力信号処理部７、可搬記録媒体駆動装置８、通信インタフェース９を備える。また、これらはバス１０により互いに接続される。
【００３０】
プロセッサ３は、補助記憶装置５又は記憶媒体１３に保持されたＯＳや様々なコンピュータプログラムを主記憶装置４にロードして実行することによって、様々な処理を実行する。ただし、コンピュータプログラムによる処理の一部がハードウェア回路により実行されてもよい。プロセッサ３は、例えば、Central Processing Unit（ＣＰＵ）や、Digital
Signal Processor（ＤＳＰ）である。
【００３１】
主記憶装置４は、プロセッサ３に、補助記憶装置５に格納されているプログラムをロードするための記憶領域、及びプログラムを実行するための作業領域を提供する。また、主記憶装置４は、データを保持するためのバッファとして用いられる。主記憶装置４は、例えば、Read Only Memory（ＲＯＭ）、Random Access Memory（ＲＡＭ）等の半導体メモリである。
【００３２】
補助記憶装置５は、様々なプログラムや、各プログラムの実行に際してプロセッサ３が使用するデータを格納する。補助記憶装置５は、例えば、Erasable Programmable ROM（
ＥＰＲＯＭ）、又はハードディスクドライブ（Hard Disk Drive、ＨＤＤ）等の不揮発性
のメモリである。補助記憶装置５は、例えば、オペレーティングシステム（Operating System、ＯＳ）、コンパイラプログラム、その他様々なアプリケーションプログラムを保持する。
【００３３】
画像信号処理部６は、プロセッサ３の処理の結果を画像信号に変換し、例えば、ディスプレイ１１に出力する。入力信号処理部７は、入力デバイス１２から入力された入力信号をプロセッサ３に出力する。入力デバイス１２は、例えば、キーボード、マウス等のポインティングデバイスである。
【００３４】
可搬記録媒体駆動装置８は、記憶媒体１３に記録されるプログラムや各種データを読出し、プロセッサ３に出力する。記憶媒体１３は、例えば、ＳＤカード、ｍｉｎｉＳＤカード、ｍｉｃｒｏＳＤカード、Universal Serial Bus（ＵＳＢ）フラッシュメモリ、Compact Disc（ＣＤ）、Digital Versatile Disc(ＤＶＤ)、フラッシュメモリカード等の記録媒体である。
【００３５】
通信インタフェース９は、ネットワーク１４との情報の入出力を行うインタフェースである。通信インタフェース９は、有線のネットワークと接続するインタフェース、無線のネットワークと接続するインタフェースを含む。通信インタフェース９は、例えば、Network Interface Card（ＮＩＣ）、無線Local Area Network（ＬＡＮ）カード等である。通信インタフェース９で受信されたデータ等は、プロセッサ３に出力される。
【００３６】
例えば、情報処理装置２では、プロセッサ３が、補助記憶装置５に保持される制御プログラムを主記憶装置４にロードして実行する。なお、情報処理装置２の装置構成は一例であり、上記に限られず、実施の形態に応じて適宜構成要素の省略や置換、追加が可能である。制御プログラムは、例えば、記憶媒体１３に記録されていてもよい。
【００３７】
＜処理構成＞
図７および図８は、情報処理装置２の処理構成を説明する。図７は、サーバ装置２ａの処理構成の一例を示す図である。サーバ装置２ａは、情報処理装置２の一例である。サーバ装置２ａは、サーバ制御部２０ａを含む。サーバ制御部２０ａは、通信制御部３０ａ、記憶部４０ａおよび処理制御部５０ａを含む。
【００３８】
通信制御部３０ａは、ネットワーク１４を介して、情報処理システム１内の他の情報処理装置２との通信を制御する。記憶部４０ａは、定義ファイル４１ａを含む。定義ファイ
ル４１ａは、処理制御部５０ａの処理に使用されるサーバ側の定義パラメタの値を記憶する。
【００３９】
処理制御部５０ａは、処理部５１、応答部５２、移行部５３および処理依頼送信部５４を含む。処理部５１は、クライアントからの依頼データを受信し、依頼データに基づく処理を実施する。応答部５２は、データ集合の配置情報を含む処理結果をクライアントに通知する。移行部５３は、移行元サーバから移行先サーバに、移行対象のデータ集合を移行する。移行部５３は、更新中のデータ集合については、データ集合と共に、移行元サーバでの更新内容を含む差分データを移行先サーバに移行する。処理依頼送信部５４は、クライアントから受信した依頼データを、移行先サーバに送信する。
【００４０】
サーバ装置２ａのプロセッサ３は、コンピュータプログラムにより、通信制御部３０ａ、記憶部４０ａ、処理制御部５０ａ、処理部５１、応答部５２、移行部５３および処理依頼送信部５４の処理を実行する。ただし、通信制御部３０ａ、記憶部４０ａ、処理制御部５０ａ、処理部５１、応答部５２、移行部５３および処理依頼送信部５４のいずれか、またはその処理の一部がハードウェア回路により実行されてもよい。
【００４１】
図８は、クライアント装置２ｂの処理構成の一例を示す図である。クライアント装置２ｂは、情報処理装置２の一例である。クライアント装置２ｂは、クライアント制御部２０ｂおよびアプリケーションソフトウェア６０を含む。クライアント制御部２０ｂは、通信制御部３０ｂ、記憶部４０ｂおよび処理制御部５０ｂを含む。
【００４２】
通信制御部３０ｂは、ネットワーク１４を介して、情報処理システム１内の他の情報処理装置２との通信を制御する。記憶部４０ｂは、定義ファイル４１ｂを含む。定義ファイル４１ｂは、処理制御部５０ｂの処理に使用されるクライアント側の定義パラメタの値を記憶する。処理制御部５０ｂは、データ集合の配置等のクライアント側での管理情報を変更する。アプリケーションソフトウェア６０は、クライアント装置２ｂで実行されるアプリケーションである。アプリケーションソフトウェア６０の実行により、クライアント装置２ｂからサーバ装置２ａへの処理依頼が発生する。クライアント装置２ｂは、処理依頼の内容を含む依頼データをサーバ装置２ａに送信する。
【００４３】
クライアント装置２ｂのプロセッサ３は、コンピュータプログラムにより、通信制御部３０ｂ、記憶部４０ｂおよび処理制御部５０ｂの処理を実行する。ただし、通信制御部３０ｂ、記憶部４０ｂおよび処理制御部５０ｂのいずれか、またはその処理の一部がハードウェア回路により実行されてもよい。
【００４４】
＜データ構造＞
図９Ａから図１６は、サーバ装置２ａで使用する定義およびデータ構造の例を説明する。図１７から図１９は、クライアント装置２ｂで使用する定義およびデータ構造の例を説明する。図２０および図２１は、サーバ装置２ａとクライアント装置２ｂ間で送受信するデータ構造の例を説明する。
【００４５】
図９Ａは、ＲＤＢＭＳの表定義の例を示す図である。ＲＤＢＭＳの表定義は、データ集合の配置定義をするために使用される。図９Ａにおいて、ＲＤＢＭＳの表定義は、一例として「列名」、「型」および「設定値」の項目を含む。ＲＤＢＭＳの表定義は、Structured Query Language（ＳＱＬ）規約に準拠した項目を含む表定義であってもよい。
【００４６】
「列名」は、ＲＤＢＭＳにおける列の名称である。「列名」には、任意の文字列、例えば“ＣＯＬＵＭＮ１”、“ＣＯＬＵＭＮ２”が設定される。「型」は、ＲＤＢＭＳにおけるデータ型である。例えば、“ＣＯＬＵＭＮ２”の列に対する「型」として“ＩＮＴＥＧ
ＥＲ”が設定される。即ち、“ＣＯＬＵＭＮ２”の列は、整数型の値を記憶する。「設定値」は、対応する列に設定される値である。例えば、“ＣＯＬＵＭＮ２”の列に設定される「設定値」として-32,768 〜 +32,767が設定される。即ち、“ＣＯＬＵＭＮ２”の列に設定される値は、-32,768 〜 +32,767の範囲内の整数である。
【００４７】
図９Ｂは、ＫＶＳの表定義の例を示す図である。ＫＶＳの表定義は、データ集合の配置定義をするために使用される。図９Ｂにおいて、ＫＶＳの表定義は、一例として「キー（ＫＥＹ）」および「値（ＶＡＬＵＥ）」の項目を含む。さらに、「キー（ＫＥＹ）」および「値（ＶＡＬＵＥ）」は、それぞれ「識別子」、「型名」および「設定値」の項目を含む。ＫＶＳの表定義は、インデックス等の項目を含む表定義であってもよい。
【００４８】
「キー（ＫＥＹ）」は、ＫＶＳにおいて、保存したいデータを識別するために設定される一意のキーである。例えば、「キー（ＫＥＹ）」の「識別子」、「型名」および「設定値」には、それぞれ“ＫＥＹ１”、“ＩＮＴＥＧＥＲ”、“-32,768 〜 +32,767”が設定される。即ち、識別子“ＫＥＹ１”は、-32,768 〜 +32,767の整数をキーとして含む。
【００４９】
「値（ＶＡＬＵＥ）」は、キーに対応づけられる値である。例えば、「値（ＶＡＬＵＥ）」の「識別子」、「型名」および「設定値」には、それぞれ“ＶＡＬＵＥ１”、“ＣＨＡＲ”、“ＡＢＣＤＥＦＧＨＩＪＫ”が設定される。即ち、識別子“ＶＡＬＵＥ１”は、各キーに対応する文字列を含む。
【００５０】
図９Ｃは、データ集合の配置定義の例を示す図である。データ集合の配置定義は、データ集合に含まれるデータの範囲、およびデータ集合が配置されるサーバ装置２ａを定義する。図９Ｃにおいて、データ集合の配置定義は、一例として「データ集合名」、「列名またはキー名」、「値の範囲」および「配置サーバ」の項目を含む。
【００５１】
「データ集合名」は、データ集合の名称である。「データ集合名」には、例えば“Ｐａｒｔｉｔｉｏｎ０１”、“Ｐａｒｔｉｔｉｏｎ０２”等が設定される。「列名またはキー名」は、データ集合に含まれる列またはキーの名称である。例えば、“Ｐａｒｔｉｔｉｏｎ０１”のデータ集合に対する列名またはキー名として“ＣＯＬＵＭＮ２”または“ＫＥＹ１”が設定される。「値の範囲」は、列またはキーの値の範囲である。例えば、“ＣＯＬＵＭＮ２”の列名の値の範囲として“0〜10000”が設定される。「配置サーバ」は、データ集合が配置されるサーバ装置２ａである。例えば、“Ｐａｒｔｉｔｉｏｎ０１”のデータ集合の配置サーバ装置２ａとして“ＳＶ０１”が設定される。即ち、データ集合“Ｐａｒｔｉｔｉｏｎ０１”は、“ＣＯＬＵＭＮ２”または“ＫＥＹ１”の値の範囲が“0〜10000”であるデータの集合であり、“ＳＶ０１”に配置される。
【００５２】
図１０は、データ移行リストのデータ構造の一例を示す図である。データ移行リストは、移行元サーバから移行先サーバへ移行するデータ集合のリストである。移行元サーバは、スケールアウトの命令を受けて、データ移行リストを作成する。移行対象のデータ集合は、データ集合配置定義を変更することで指定してもよい。移行対象のデータ集合は、スケールアウトコマンドにより、スケールアウトの命令と共に指定してもよい。
【００５３】
データ移行リストは、「データ集合名」、「移行状態」および「トランＩＤ」の項目を含む。「データ集合名」は、移行対象のデータ集合の名称である「移行状態」は、データ集合が移行先サーバに移行されたか否かの状態である。例えば、「移行状態」には、移行されていない場合には、移行未を示す“０”が設定される。また、移行中の場合は、移行中であることを示す“１”が設定される。移行されている場合は、移行済であることを示す“２”が設定される。「トランＩＤ」は、データ集合に対するトランザクションＩＤである。データ集合が更新中である場合、「トランＩＤ」には、“０”でない値がトランザ
クションＩＤとして設定される。
【００５４】
図１０において、データ集合“Ｐａｒｔｉｔｉｏｎ０１”の移行状態は“移行未（０）”であり、トランＩＤは“15896231”である。即ち、データ集合“Ｐａｒｔｉｔｉｏｎ０１”は、移行先サーバに移行されておらず、更新中であるため、トランザクションＩＤ“15896231”と対応づけられている。また、“Ｐａｒｔｉｔｉｏｎ０２”は移行中であり、“Ｐａｒｔｉｔｉｏｎ０３”は移行済である。
【００５５】
図１１は、被データ移行リストのデータ構造の一例を示す図である。被データ移行リストは、移行元サーバから移行先サーバへ移行されるデータ集合のリストである。移行先サーバは、スケールアウトの命令を受けて、被データ移行リストを作成する。被移行対象のデータ集合は、データ集合配置定義を変更することで指定してもよい。被移行対象のデータ集合は、スケールアウトの命令とともに指定してもよい。
【００５６】
被データ移行リストは、「データ集合名」、「被移行状態」および「トランＩＤ」の項目を含む。「データ集合名」および「トランＩＤ」は、データ移行リストと同様であるため説明を省略する。また、「被移行状態」はデータ移行リストの「移行状態」と同様であるため説明を省略する。
【００５７】
図１１において、データ集合“Ｐａｒｔｉｔｉｏｎ０１”は移行未であり、“Ｐａｒｔｉｔｉｏｎ０２”は移行中である。また、“Ｐａｒｔｉｔｉｏｎ０３”は移行済であり、トランＩＤは“15896239”である。即ち、“Ｐａｒｔｉｔｉｏｎ０３”は、移行先サーバに移行されており、更新中であるため、トランザクションＩＤ“15896239”と対応づけられている。
【００５８】
図１２は、クライアント通知リストのデータ構造の一例を示す図である。クライアント通知リストは、スケールアウトにより、移行対象のデータ集合が移行先サーバに移行されたことを各クライアント装置２ｂに通知したか否かを管理するリストである。各クライアント装置２ｂは、サーバ装置２ａへの処理依頼に対し、サーバ装置２ａから受信した結果データから、移行対象のデータ集合が、移行先サーバに移行されたことを認識することができる。サーバ装置２ａは、クライアント装置２ｂに結果データを送信することで、データ集合の移行を通知したと判断してもよい。
【００５９】
クライアント通知リストは、サーバ装置２ａに接続されたクライアント装置２ｂを含む。サーバ装置２ａは、クライアント通知リストの各クライアント装置２ｂにデータ集合移行の通知を完了するまでの間、データ移行リストを保持し、結果データの送信とともにデータ集合の移行を通知する。
【００６０】
クライアント通知リストは、「クライアント名」および「クライアント通知状態」の項目を含む。「クライアント名」は、サーバ装置２ａに接続されたクライアント装置２ｂを識別する名称である。「クライアント通知状態」は、データ集合の移行が通知されたか否かの状態である。例えば、「クライアント通知状態」には、通知されていない場合には、通知未を示す“０”が設定される。また、通知されている場合は、通知済であることを示す“２”が設定される。
【００６１】
図１２において、クライアント装置２ｂである“ＣＬＩ０１”のクライアント通知状態は“通知済（２）”である。即ち、“ＣＬＩ０１”に対し、サーバ装置２ａは、データ集合の移行を通知している。同様に、サーバ装置２ａは、クライアント装置２ｂである“ＣＬＩ０２”に対し、データ集合の移行を通知している。一方、サーバ装置２ａは、クライアント装置２ｂである“ＣＬＩ０３”に対し、データ集合の移行を通知していない。
【００６２】
図１３は、コネクション情報リストのデータ構造の一例を示す図である。コネクション情報リストは、サーバ装置２ａに接続される各クライアント装置２ｂとのコネクション情報のリストである。サーバ装置２ａは、クライアント装置２ｂから処理依頼を受信し、当該クライアント装置２ｂとのコネクションが確立されていない場合に、コネクション情報を作成する。
【００６３】
コネクション情報リストは、「コネクション数」およびコネクション情報の項目を含む。「コネクション数」は、クライアント装置２ｂとのコネクションの数であり、例えば、“1000”が設定される。コネクション情報は、各クライアント装置２ｂとのコネクションに関する情報であり、コネクション数分が作成される。
【００６４】
コネクション情報は、「コネクションＩＤ」、「クライアント名」、「クライアントポート番号」および「トランＩＤ」の項目を含む。「コネクションＩＤ」は、コネクション接続時に割り当てられる一意な識別子であり、例えば“102367598”が設定される。「ク
ライアント名」は、クライアント装置２ｂのInternet Protocol（ＩＰ）アドレスまたは
マシン名等であり、例えば“ＣＬＩ０１”が設定される。「クライアントポート番号」は、クライアント装置２ｂのポート番号であり、例えば“80”が設定される。「トランＩＤ」は、トランザクションが発生した際のトランザクションＩＤであり、例えば“15896231”が設定される。なお、サーバ装置２ａは、コネクション情報が作成されたクライアント装置２ｂをクライアント通知リストに登録してもよい。
【００６５】
図１４は、トランザクションログのデータ構造の一例を示す図である。トランザクションログ（以下、トランログともいう）は、コミットされていないトランザクションの属性、操作対象および更新内容等を含む。
【００６６】
トランログは、「トランＩＤ」、「コネクションＩＤ」、「トランザクション状態」、「トランザクション種別」、「カーソル状態」、「テーブル名」、「データ集合名」、「カーソル位置」および「更新データ」の項目を含む。
【００６７】
「トランＩＤ」は、トランザクションが発生した際のトランザクションＩＤであり、例えば“15896231”が設定される。「コネクションＩＤ」は、コネクション接続時に割り当てられる一意な識別子であり、例えば“102367598”が設定される。「トランザクション
状態」は、トランザクションの状態であり、例えば“ＣＯＮＴＩＮＵＥ”が設定される。「トランザクション種別」は、トランザクションの種別であり、例えば“ＲｅａｄＯｎｌｙ”または“ＲｅａｄＷｒｉｔｅ”が設定される。「カーソル状態」は、カーソルの状態であり、例えば“ＯＰＥＮ”または“ＣＬＯＳＥ”が設定される。「テーブル名」は、操作対象のテーブル名であり、例えば“ＴＢＬ０１”が設定される。「データ集合名」は、操作対象のデータ集合名であり、例えば“Ｐａｒｔｉｔｉｏｎ０１”が設定される。「カーソル位置」は、カーソルの位置情報であり、例えば“101”が設定される。「更新デー
タ」は、トランザクションが発生する前のデータと更新中のデータとの差分であり、更新されていない場合には、例えば“ＮＯＮＥ”が設定される。更新中の場合には、「更新データ」には、変更後のデータが設定されてもよい。また、更新中の場合、「更新データ」には、データベースを操作するための命令文、例えばStructured Query Language（ＳＱ
Ｌ）文であって、トランザクション発生後に実行されたＳＱＬ文が設定されてもよい。
【００６８】
図１５は、移行データのデータ構造の一例を示す図である。移行データは、移行元サーバから移行先サーバに移行されるデータの内容を含む。移行対象のデータ集合が更新中の場合には、移行データは、トランログの内容を含む。
【００６９】
移行データは、「データ集合名」、「データ集合データ長」、「トランＩＤ」、「トランログデータ長」、「データ集合の実データ部」および「トランログの実データ部」の項目を含む。
【００７０】
「データ集合名」は、移行対象のデータ集合の名称であり、例えば“Ｐａｒｔｉｔｉｏｎ０１”が設定される。「データ集合データ長」は、移行対象のデータ集合のデータ長であり、例えば“102400”が設定される。「トランＩＤ」は、移行対象のデータ集合に対するトランザクションＩＤである。例えば、「トランＩＤ」には、移行対象のデータ集合についてトランザクションが発生している場合は、対応するトランログのトランＩＤが設定され、トランザクションが発生していない場合は“０”が設定される。「トランログデータ長」は、移行対象のデータ集合に対するトランログのデータ長であり、例えば“1024”が設定される。「データ集合の実データ部」は、移行対象のデータ集合の実データである。「トランログの実データ部」は、移行対象のデータ集合に対するトランログの実データである。
【００７１】
図１６は、サーバ装置２ａの定義ファイル４１ａの例を示す図である。サーバ装置２ａの定義ファイル４１ａは、「CommunicationControlMultiplicity」、「ServerTimeOut」
および「ScaleoutTimeOut」を定義する。
【００７２】
「CommunicationControlMultiplicity」は、サーバ装置２ａの通信制御の多重度であり、例えば、“４”が設定される。「ServerTimeOut」は、クライアント装置２ｂから依頼
データを受信し、返却するまでの時間がタイムアウトとなる閾値であり、例えば、“３”が設定される。「ScaleoutTimeOut」は、スケールアウト処理の時間がタイムアウトとな
る閾値であり、例えば、“１８０”が設定される。
【００７３】
図１７は、クライアント装置２ｂにおけるデータ集合接続先リストのデータ構造の一例を示す図である。データ集合接続先リストは、クライアント装置２ｂが操作対象とするデータ集合および当該データ集合の接続先情報のリストである。
【００７４】
データ集合接続先リストは、「データ集合要素数」および「データ集合と接続先組み合わせ」の項目を含む。「データ集合要素数」は、クライアント装置２ｂが操作対象とするデータ集合の数であり、例えば、“５”が設定される。「データ集合と接続先組み合わせ」は、データ集合と当該データ集合が配置された接続先サーバの組み合わせであり、データ集合要素数分作成される。
【００７５】
「データ集合と接続先組み合わせ」は、「データ集合名」および「接続先サーバ名」の項目を含む。「データ集合名」は、操作対象のデータ集合の名称であり、例えば、「データ集合と接続先組み合わせ１」の「データ集合名」には“Ｐａｒｔｉｔｉｏｎ００”が設定される。「接続先サーバ名」は、操作対象のデータ集合が配置された接続先サーバの名称であり、例えば、「データ集合と接続先組み合わせ１」の「接続先サーバ名」には“ＳＶ０１”が設定される。
【００７６】
図１８は、クライアント装置２ｂにおけるサーバ接続先リストのデータ構造の一例を示す図である。サーバ接続先リストは、クライアント装置２ｂからアクセスするサーバ装置２ａの接続先情報のリストである。
【００７７】
サーバ接続先リストは、「サーバ接続先要素数」および「サーバ接続先情報」の項目を含む。「サーバ接続先要素数」は、クライアント装置２ｂからアクセスするサーバ装置２ａの接続先の数であり、例えば、“２”が設定される。「サーバ接続先情報」は、サーバ接続先要素数分作成される。
【００７８】
「サーバ接続先情報」は、「サーバ名」および「ポート番号」の項目を含む。「サーバ名」は、クライアント装置２ｂから接続するサーバ装置２ａのＩＰアドレスまたはマシン名等であり、例えば、「サーバ接続先情報１」の「サーバ名」には“ＳＶ０１”が設定される。「ポート番号」は、クライアント装置２ｂから接続するサーバ装置２ａのポート番号であり、例えば、「サーバ接続先情報１」の「ポート番号」には“80”が設定される。
【００７９】
図１９は、クライアント装置２ｂの定義ファイル４１ｂの例を示す図である。クライアント装置２ｂの定義ファイル４１ｂは、「ClientTimeOut」、「ClientPort」、「ServerName」、「ServerPort」および「DataLocatedServer」を定義する。
【００８０】
「ClientTimeOut」は、依頼データを送信し、結果データが返却されるまでの時間がタ
イムアウトとなる閾値であり、例えば、“３”が設定される。「ClientPort」は、クライアント装置２ｂで使用するポート番号であり、例えば、“80”が設定される。「ServerName」は、クライアント装置２ｂから接続するサーバ装置２ａのＩＰアドレスまたはマシン名等であり、例えば、“ＳＶ０１”が設定される。「ServerPort」は、クライアント装置２ｂから接続するサーバ装置２ａのポート番号であり、例えば、“80”が設定される。「DataLocatedServer」は、データ集合名と接続先の組み合わせであり、例えば、“Ｐａｒ
ｔｉｔｉｏｎ００：ＳＶ０１”が設定される。なお、「ServerName」、「ServerPort」および「DataLocatedServer」は、それぞれ複数定義してもよい。図１９において、上述の
例の他、「ServerName」、「ServerPort」および「DataLocatedServer」として、それぞ
れ“ＳＶ０２”、“80”および“Ｐａｒｔｉｔｉｏｎ０１：ＳＶ０２”が設定されている。
【００８１】
図２０は、依頼データのデータ構造の一例を示す図である。依頼データは、操作対象のデータ集合を含むサーバ装置２ａに対し、クライアント装置２ｂから処理を依頼するためのデータである。依頼データは、「サーバ名」、「サーバポート番号」、「クライアントＩＤ」、「依頼データ番号」、「クライアント名」、「クライアントポート番号」、「クライアントプロセスＩＤ」、「クライアントスレッドＩＤ」、「コネクションＩＤ」、「依頼データ送信時刻」、「処理依頼種別」、「処理依頼対象」、「処理依頼入力情報」および「処理依頼出力情報」の項目を含む。
【００８２】
「サーバ名」は、クライアント装置２ｂから接続するサーバ装置２ａのＩＰアドレスまたはマシン名等であり、例えば、“101.23.11.501”が設定される。「サーバポート番号
」は、クライアント装置２ｂから接続するサーバ装置２ａのポート番号であり、例えば、“80”が設定される。「クライアントＩＤ」は、クライアント制御プログラムの識別子であり、例えば、“ＣＬ００１”が設定される。「依頼データ番号」は、クライアント制御プログラムにより設定される一意な番号であり、例えば、“000000001”が設定される。
「クライアント名」は、クライアント装置２ｂのＩＰアドレスまたはマシン名等であり、例えば、“ＣＬＩ００１”が設定される。「クライアントポート番号」は、クライアント装置２ｂで使用するポート番号であり、例えば、“80”が設定される。「クライアントプロセスＩＤ」は、クライアントアプリケーションのプロセスＩＤであり、例えば、“4438”が設定される。「クライアントスレッドＩＤ」は、クライアントアプリケーションプロセスのスレッドＩＤであり、例えば、“47470217350064”が設定される。「コネクションＩＤ」は、コネクション確立時にサーバ装置２ａからクライアント装置２ｂに通知されるＩＤであり、例えば、“102367598”が設定される。サーバ装置２ａは、クライアント装
置２ｂからのコネクション確立依頼時に、例えば、「クライアント名」、「クライアントポート番号」、「クライアントプロセスＩＤ」、「クライアントスレッドＩＤ」、および「依頼データ送信時刻」に基づいて、一意なコネクションＩＤを生成する。「依頼データ送信時刻」は、クライアント装置２ｂからの処理依頼時のタイムスタンプであり、例えば
、“2013.8.19 15:32.32.225”が設定される。「処理依頼種別」は、ＳＱＬにおけるＳＥＬＥＣＴ、ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、ＤＥＬＥＴＥ等の操作命令であり、クライアントアプリケーションでは関数名である。「処理依頼種別」には、例えば、“ＳＥＬＥＣＴ”が設定される。「処理依頼対象」は、ＤＢ名、スキーマ名、表名、またはパーティション等のリソース情報であり、例えば、“ＴＡＢＬＥ１”が設定される。「処理依頼入力情報」は、処理依頼を実行するための入力情報である。具体的には、「処理依頼入力情報」は、ＳＱＬのＳＥＬＥＣＴ文における検索条件およびカーソル名等であり、クライアントアプリケーションの入力パラメタおよびハンドル等である。「処理依頼入力情報」には、例えば、“ＷＨＥＲＥ  ＣＯＬＵＭＮ２＝５”が設定される。「処理依頼出力情報」は、処理依頼の実行結果の対象である。具体的には、「処理依頼出力情報」は、ＳＱＬのＳＥＬＥＣＴ文の実行結果であり、クライアントアプリケーションの出力結果の対象、例えば行名または集合関数である。「処理依頼出力情報」には、例えば、“ＣＯＬＵＭＮ１”が設定される。
【００８３】
図２１は、結果データのデータ構造の一例を示す図である。結果データは、依頼データを送信したクライアント装置２ｂに対し、依頼データに基づく処理の結果を、サーバ装置２ａから通知するためのデータである。結果データは、「クライアント名」、「クライアントポート番号」、「クライアントＩＤ」、「依頼先サーバ名」、「結果送信サーバ名」および「結果データ」の項目を含む。
【００８４】
「クライアント名」は、クライアント装置２ｂのＩＰアドレスまたはマシン名等であり、例えば、“101.23.11.501”が設定される。「クライアントポート番号」は、クライア
ント装置２ｂで使用するポート番号であり、例えば、“80”が設定される。「クライアントＩＤ」は、クライアント制御プログラムの識別子であり、例えば、“ＣＬ００１”が設定される。「依頼先サーバ名」は、依頼先サーバ装置２ａのＩＰアドレスまたはマシン名等であり、例えば、“101.24.12.101”が設定される。「結果送信サーバ名」は、結果送
信サーバ装置２ａのＩＰアドレスまたはマシン名等であり、例えば、“101.24.12.102”
が設定される。
【００８５】
「結果データ」は、依頼データに基づく処理の結果に関するデータである。「結果データ」は、「依頼データ番号」、「クライアントプロセスＩＤ」、「クライアントスレッドＩＤ」、「セッションＩＤ」、「依頼データ送信時刻」、「結果データ送信時刻」、「結果データ番号」、「結果データ状態」、「結果データ長」および「処理結果」の項目を含む。
【００８６】
「依頼データ番号」は、クライアント装置２ｂが処理依頼時に与える番号であり、例えば、“000000001”が設定される。「クライアントプロセスＩＤ」は、クライアントアプ
リケーションのプロセスＩＤであり、例えば、“4438”が設定される。「クライアントスレッドＩＤ」は、クライアントアプリケーションプロセスのスレッドＩＤであり、例えば、“47470217350064”が設定される。「セッションＩＤ」は、コネクション確立時にサーバ装置２ａからクライアント装置２ｂに通知されるＩＤであり、例えば、“102367598”
が設定される。サーバ装置２ａは、クライアント装置２ｂからのコネクション確立依頼時に、例えば、「クライアント名」、「クライアントポート番号」、「クライアントプロセスＩＤ」、「クライアントスレッドＩＤ」、および「依頼データ送信時刻」に基づいて、一意なセッションＩＤを生成する。依頼データ送信時刻」は、クライアント装置２ｂからの処理依頼時のタイムスタンプであり、例えば、“2013.8.19 15:32.32.225”が設定される。「結果データ送信時刻」は、サーバ装置２ａからの処理結果送信時のタイムスタンプであり、例えば、“2013.8.19 15:32.32.236”が設定される。「結果データ番号」は、「結果データ」をサーバ装置２ａの処理結果と紐付けるための一意な番号であり、例えば、“00000123”が設定される。「結果データ状態」は、処理結果が完結しているか、継続中
であるかの情報であり、例えば、完結していれば“０”、継続中であれば“１”が設定される。「結果データ長」は、結果データの長さであり、例えば、“４”が設定される。「処理結果」は、処理依頼の実行結果である。具体的には、「処理結果」は、ＳＱＬのＳＥＬＥＣＴ文の実行結果であり、クライアントアプリケーションの出力結果、例えば行名または集合関数の結果である。「処理結果」には、例えば、“ＣＯＬＵＭＮ１＝４”が設定される。
【００８７】
＜動作例＞
図２２から図２８は、実施形態の動作例１から動作例７を説明するための図である。図２２から図２８において、サーバ＃１（図２８ではサーバ＃ａ１）は、スケールアウトの対象である移行元サーバである。また、サーバ＃２（図２８ではサーバ＃ａ２）は、移行先サーバである。なお、各図において、サーバ＃１（図２８ではサーバ＃ａ１）の処理は、ノードＳＶ＃１１（図２８ではノードＳＶ＃ａ１１）が処理するものとして記載されているが、各動作例では、サーバ＃１（図２８ではサーバ＃ａ１）の処理であるものとして説明される。同様に、サーバ＃２の処理は、ノードＳＶ＃２１（図２８ではノードＳＶ＃ａ２１）が処理するものとして記載されているが、各動作例では、サーバ＃２（図２８ではサーバ＃ａ２）の処理であるものとして説明される。
【００８８】
《動作例１》
動作例１は、ステートフルな方式で動作しているサーバにおいて、クライアントからサーバへのデータアクセスを停止せずに、業務を継続したままスケールアウトをする例である。また、動作例１は、スケールアウトの処理中にクライアントから処理依頼を受信した際、操作対象となるデータ集合が移行先サーバに移行済である例を示す。
【００８９】
図２２は、移行済のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。ステートフルな方式で動作しているサーバをスケールアウトする際、ユーザの指示により、または所定のプログラム等により、サーバ＃１およびサーバ＃２に対し、スケールアウトコマンドが発行される（Ａ１、Ａ２）。
【００９０】
スケールアウトコマンドにより、スケールアウト命令を受け付けたサーバ＃１は、図１０で説明したデータ移行リストを作成する。図２２の例では、移行対象のデータ集合は、データ集合ｎからデータ集合ｍである。同様に、スケールアウト命令を受け付けたサーバ＃２は、図１１で説明した被データ移行リストを作成する。図２２の例では、被移行対象のデータ集合は、データ集合ｎからデータ集合ｍである。
【００９１】
次に、サーバ＃１は、データ移行リストに含まれるデータ集合をサーバ＃２に移行する（Ａ３）。移行対象のデータ集合をサーバ＃２に送信する際、サーバ＃１は、データ移行リストの当該データ集合の移行状態を“移行未”から“移行中”に更新する。また、サーバ＃１は、データ集合の移行が完了すると、当該データ集合の移行状態を“移行中”から“移行済”に更新する。図２２の例では、データ集合ｎは“移行済”、データ集合ｎ＋１は“移行中”、データ集合ｍは“移行未”となっている。
【００９２】
また、サーバ＃２は、サーバ＃１からデータ集合の受信を開始すると、当該データ集合の被移行状態を“移行未”から“移行中”に更新する。また、サーバ＃２は、データ集合の移行が完了すると、当該データ集合の被移行状態を“移行中”から“移行済”に更新する。図２２の例では、データ集合ｎは“移行済”、データ集合ｎ＋１は“移行中”、データ集合ｍは“移行未”となっている。
【００９３】
スケールアウトの処理中に、サーバ＃１は、クライアントＣＬ＃１からデータ集合ｎに対する処理依頼を受け付ける（Ａ４）。処理依頼は、図２０で説明した依頼データのデー
タ構造により送受信される。サーバ＃１は、データ移行リストを参照し、依頼データによる操作対象であるデータ集合ｎの移行状態を判定する。データ集合ｎの移行状態は“移行済”であるため、サーバ＃１は、ＣＬ＃１からの依頼データをサーバ＃２に転送する（Ａ５）。
【００９４】
サーバ＃２は、サーバ＃１から受信した依頼データに基づいて、データ集合ｎに対する操作を行う（Ａ６）。データ集合ｎに対する操作後、サーバ＃２は、ＣＬ＃１とのコネクションを確立し、処理結果をＣＬ＃１に返却する（Ａ７）。処理結果は、図２１で説明した結果データのデータ構造により送受信される。
【００９５】
ＣＬ＃１は、処理を依頼したサーバ＃１とは異なるサーバ＃２から結果データを返却されたことからデータ集合ｎが移行されたことを認識し、ＣＬ＃１が保持しているデータ集合ｎのデータ配置および処理依頼先の接続先情報を動的に更新する。具体的には、図１７のデータ集合接続先リストにおいて、データ集合ｎに対する「接続先サーバ」をサーバ＃２に更新する。
【００９６】
《動作例２》
動作例２は、スケールアウトの処理中にクライアントから処理依頼を受信した際、操作対象となるデータ集合が移行先サーバに移行中である例を示す。この場合、移行元サーバは、移行先サーバへデータ集合の移行が完了した後、処理依頼を移行先サーバに送信する。
【００９７】
図２３は、移行中のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。Ｂ１からＢ３までの処理は、図２２のＡ１からＡ３までの処理とそれぞれ同様であるため、その説明を省略する。
【００９８】
スケールアウトの処理中に、サーバ＃１は、クライアントＣＬ＃１からデータ集合ｎ＋１に対する処理依頼を受け付ける（Ｂ４）。処理依頼は、図２０で説明した依頼データのデータ構造により送受信される。サーバ＃１は、データ移行リストを参照し、依頼データによる操作対象であるデータ集合ｎ＋１の移行状態を判定する。データ集合ｎ＋１の移行状態は“移行中”であるため、サーバ＃１は、データ集合ｎ＋１が移行済になるまで待機した後、ＣＬ＃１からの依頼データをサーバ＃２に転送する（Ｂ５）。
【００９９】
移行中のデータ集合に対し、移行済になるまで待機するのは、データ集合の移行にかかる時間は、通常の処理依頼における待機時間と変わらないからである。サーバ側の要因またはネットワーク負荷によりタイムアウトになった場合、情報処理システムは、通常の処理依頼においてタイムアウトした場合と同様に、クライアントによる処理依頼からやり直す。したがって、情報処理システムは、業務継続することができる。
【０１００】
サーバ＃２は、サーバ＃１から受信した依頼データに基づいて、データ集合ｎ＋１に対する操作を行う（Ｂ６）。データ集合ｎ＋１に対する操作後、サーバ＃２は、ＣＬ＃１とのコネクションを確立し、処理結果をＣＬ＃１に返却する（Ｂ７）。処理結果は、図２１で説明した結果データのデータ構造により送受信される。
【０１０１】
ＣＬ＃１は、処理を依頼したサーバ＃１とは異なるサーバ＃２から結果データを返却されたことからデータ集合ｎ＋１が移行されたことを認識し、クライアントが保持しているデータ集合ｎ＋１のデータ配置および接続先情報を動的に更新する。具体的には、図１７で説明したデータ集合接続先リストにおいて、データ集合ｎ＋１に対する「接続先サーバ」をサーバ＃２に更新する。
【０１０２】
《動作例３》
動作例３は、スケールアウトの処理中にクライアントから処理依頼を受信した際、操作対象となるデータ集合が移行先サーバに移行されていない例を示す。この場合、処理依頼に基づく処理は、移行元サーバで行われる。
【０１０３】
図２４は、移行未のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。Ｃ１からＣ４までの処理は、サーバ＃１がクライアントＣＬ＃Ｚ＋１から処理依頼を受け付ける点以外は、図２３のＢ１からＢ４までの処理とそれぞれ同様であるため、その説明を省略する。
【０１０４】
サーバ＃１は、ＣＬ＃Ｚ＋１から処理依頼を受け付けると、データ移行リストを参照し、依頼データによる操作対象であるデータ集合ｎ＋１の移行状態を判定する。データ集合ｎ＋１の移行状態は“移行未”であるため、サーバ＃１は、依頼データに基づいてデータ集合ｎ＋１に対する処理を行う。依頼データに基づく処理がデータ集合を更新する処理であってトランザクションが発生する場合、サーバ＃１は、データ移行リストのデータ集合ｎ＋１に対し、発生したトランザクションを識別するＩＤ（以下、トランＩＤともいう）を記録する（Ｃ５）。
【０１０５】
サーバ＃１は、データ集合ｎ＋１に対し、依頼データに基づく処理を行う（Ｃ６）。依頼データに基づく処理に対するトランザクションがコミットまたはロールバックされると、サーバ＃１は、データ移行リストに記録したトランＩＤを削除する（Ｃ７）。具体的には、例えば、サーバ＃１は、トランＩＤに“０”を設定する。サーバ＃１は、処理結果をＣＬ＃Ｚ＋１に返却する（Ｃ８）。
【０１０６】
《動作例４》
動作例４は、スケールアウトの処理中にクライアントから処理依頼を受信した際、業務への影響を低減するため、更新中でないデータ集合を優先して、移行先サーバへ送信する例である。
【０１０７】
図２５は、更新中でないデータ集合を優先して移行先サーバへ送信する場合の動作例を示す図である。Ｄ１からＤ８までの処理は、図２４のＣ１からＣ８までの処理とそれぞれ同様であるため、その説明を省略する。
【０１０８】
ただし、Ｄ３の処理において、サーバ＃１は、更新中のデータ集合の移行は後回しとし、更新中でないデータ集合を優先して移行先サーバへ送信する。更新中のデータ集合は、データ移行リストにおいてトランＩＤが記録されている。したがって、サーバ＃１は、移行対象のデータ集合に対してトランＩＤが記録されている場合、当該データ集合の移行を後回しとし、次のデータ集合を優先してサーバ＃２に移行する。
【０１０９】
図２５において、データ集合ｎ＋１の移行状態は“移行未”であり、トランＩＤが記録されているため、サーバ＃１は、データ集合ｎ＋１の移行は後回しとし、次のデータ集合ｎ＋２を優先してサーバ＃２に移行する。
【０１１０】
サーバ＃１は、データ集合ｎ＋２を移行先サーバに移行した後、更新中でないデータ集合を、順次サーバ＃２に移行する。データ集合ｎ＋１に対するトランザクションがコミットまたはロールバックされ、トランＩＤが削除されると、サーバ＃１はデータ集合ｎ＋１を、サーバ＃２に移行する。
【０１１１】
《動作例５》
動作例５は、スケールアウトの処理中にクライアントから処理依頼を受信した際、操作
対象となるデータ集合が更新中である例を示す。この場合、移行元サーバは、データ集合および更新による差分を移行先サーバに送信する。移行先サーバは、受信したデータ集合に対し、更新による差分をデータ集合に反映した後、データ集合に対する処理を行い、処理結果をクライアントに返却する。
【０１１２】
図２６は、更新中のデータ集合を移行先サーバへ送信する場合の動作例を示す図である。Ｅ１およびＥ２の処理は、図２５のＤ１およびＤ２の処理とそれぞれ同様であるため、その説明を省略する。
【０１１３】
スケールアウトの処理中に、サーバ＃１は、クライアントＣＬ＃Ｚ＋１からデータ集合ｎに対する処理依頼を受け付ける（Ｅ３）。データ集合ｎの移行状態が“移行未”である場合、サーバ＃１は、ＣＬ＃Ｚ＋１からの依頼データに基づいて、データ集合ｎに対する処理を行う（Ｅ４）。また、サーバ＃１は、データ集合ｎに対する処理において、トランザクションが発生した場合、トランログ１を作成する（Ｅ５）。トランログ１は、データ集合ｎの更新による差分データであり、継続中のトランザクションの更新状態を含む。さらに、サーバ＃１は、データ移行リストのデータ集合ｎに対し、トランＩＤを記録する（Ｅ６）。
【０１１４】
次に、サーバ＃１は、データ集合ｎおよびトランログ１を結合した移行データを作成する（Ｅ７）。移行データは、図１５で説明した移行データのデータ構造により作成される。サーバ＃１は、移行データをサーバ＃２に送信する（Ｅ８）。サーバ＃１は、データ移行リストのデータ集合ｎに対するトランＩＤを削除する（Ｅ９）。
【０１１５】
移行データを受信したサーバ＃２は、移行データをデータ集合ｎおよびトランログ１に分解し、トランログ１の差分データをデータ集合ｎに適用する（Ｅ１０）。サーバ＃１は、ＣＬ＃Ｚ＋１からの依頼データをサーバ＃２に転送する（Ｅ１１）。サーバ＃２は、トランログ１の差分データが適用されたデータ集合ｎに対し、依頼データに基づく処理を行う（Ｅ１２）。サーバ＃２は、ＣＬ＃Ｚ＋１とのコネクションを確立し、処理結果をＣＬ＃Ｚ＋１に返却する（Ｅ１３）。なお、サーバ＃１で処理中であった依頼データに基づく処理の結果データは、トランログ１が作成された後、ＣＬ＃Ｚ＋１には送信せずに破棄される。
【０１１６】
《動作例６》
動作例６は、スケールアウトによるデータ集合の移行が完了した後、各クライアントが、保持しているデータ配置および処理依頼先の接続先情報を動的に更新する例を示す。移行対象のデータ集合の移行先サーバへの送信が完了しても、各クライアントが保持しているデータ配置および処理依頼先の接続先情報は、変更されているとは限らない。このため、各クライアントは、処理依頼に対する結果データを受信すると、保持しているデータ配置および処理依頼先の接続先情報を動的に更新する。
【０１１７】
図２７は、クライアント装置におけるデータ配置および接続先情報の更新の例を示す図である。Ｆ１からＦ３までの処理は、図２２のＡ１からＡ３までの処理とそれぞれ同様であるため、その説明を省略する。
【０１１８】
スケールアウトによるデータ集合の移行が完了した後、サーバ＃１は、クライアントＣＬ＃Ｘからデータ集合ｎ〜ｍに対する処理依頼を受け付ける（Ｆ４）。データ集合ｎ〜ｍはサーバ＃２に移行済みなので、ＣＬ＃Ｘからの依頼データをサーバ＃２に転送する（Ｆ５）。
【０１１９】
サーバ＃２は、サーバ＃１から受信した依頼データに基づいて、データ集合ｎ〜ｍに対
する操作を行う（Ｆ６）。データ集合ｎ〜ｍに対する操作後、サーバ＃２は、ＣＬ＃Ｘとのコネクションを確立し、処理結果をＣＬ＃Ｘに返却する（Ｆ７）。
【０１２０】
ＣＬ＃Ｘは、処理を依頼したサーバ＃１とは異なるサーバ＃２から結果データを返却されたことからデータ集合ｎ〜ｍが移行されたことを認識し、ＣＬ＃Ｘが保持しているデータ集合ｎ〜ｍのデータ配置および処理依頼先の接続先情報を動的に更新する。
【０１２１】
Ｆ４以降の処理を、ＣＬ＃１からＣＬ＃Ｚの各クライアントに対して実行することで、各クライアントが保持しているデータ集合ｎ〜ｍのデータ配置および処理依頼先の接続先情報は、動的に更新される。
【０１２２】
ＣＬ＃Ｘは、結果データの受信を契機として、データ配置および処理依頼先の接続先情報を更新することができる。また、サーバからクライアントへのハートビートを行う仕組みが実装されている場合、スケールアウトによるサーバ側のデータ移行が完了した後のハートビートで、サーバ側のデータ配置が変わったことをクライアントに通知してもよい。サーバ側のデータ配置が変わったことは、ハートビート用の送信データに添付し、クライアントに伝えることができる。
【０１２３】
《動作例７》
動作例７は、クラスタシステムを構成し、ステートフルな方式で動作しているサーバをスケールアウトする場合に、クライアントからサーバへのデータアクセスを停止せずに、業務運用を継続させたままのスケールアウトをする例である。
【０１２４】
図２８は、クラスタシステムにおいてスケールアウトする場合の動作例を示す図である。Ｇ１およびＧ２の処理は、図２２のＡ１およびＡ２の処理とそれぞれ同様であるため、その説明を省略する。
【０１２５】
スケールアウトコマンドは、待機系であるサーバ＃２２に対しても発行される（Ｇ３）。スケールアウトコマンドにより、スケールアウト命令を受け付けたサーバ＃ａ１は、データ移行リストを作成する。図２８の例では、移行対象のデータ集合は、データ集合ｎおよびデータ集合ｎ＋１である。サーバ＃ａ１は、スケールアウト命令の受信の際、移行先サーバおよび移行対象データも受信する。サーバ＃ａ１は、移行先サーバが複数の場合は、現用系か否かについての情報を受信する。例えば、サーバ＃ａ１は、最初に指定されたサーバを現用系とみなしてもよい。
【０１２６】
同様に、スケールアウト命令を受け付けたサーバ＃ａ２は、被データ移行リストを作成する。図２８の例では、被移行対象のデータ集合は、データ集合ｎおよびデータ集合ｎ＋１である。
【０１２７】
次に、サーバ＃ａ１は、データ移行リストに含まれるデータ集合をサーバ＃ａ２に移行する（Ｇ４）。現用系の移行先サーバ＃ａ２は、待機系の移行先サーバ＃ｂ２との間で、データ同期をする（Ｇ５）。または、移行先サーバ＃ａ２へのデータ移行が完了してから、待機系の移行先サーバ＃ｂ２を組み込み、データ同期をしてもよい。
【０１２８】
現用系および待機系サーバ間のデータ同期をする手段としては、複数のメモリ間におけるデータのミラー化を制御する技術およびクラスタシステムに組み込んだサーバのデータ同期をする技術が知られている（例えば、国際公開第２００８／１０５０９８号、特開２０１２−２３４３３３等参照）。
【０１２９】
＜処理の流れ＞
図２９から図３７Ｂは、実施形態におけるサーバ装置２ａの制御処理の流れを説明する。図３８Ａから図３９は、実施形態におけるクライアント装置２ｂの制御処理の流れを説明する。
【０１３０】
図２９は、サーバ制御処理のフローチャートの一例である。サーバ制御処理は、例えば、サーバの起動により開始される。ＯＰ１では、サーバ装置２ａは、サーバ制御処理を起動する。次に処理がＯＰ２に進む。
【０１３１】
ＯＰ２では、サーバ装置２ａは、サーバ装置２ａの定義ファイル４１ａから定義パラメタの設定値を読み込み、変数に設定する。具体的には、サーバ装置２ａは、「通信制御多重度」、「サーバタイムアウト」および「スケールアウトタイムアウト」に、それぞれCommunicationControlMultiplicity、ServerTimeOutおよびScaleoutTimeOutの設定値を設定する。次に処理がＯＰ３に進む。
【０１３２】
ＯＰ３では、サーバ装置２ａは、「プロセス停止フラグ」、「スケールアウトフラグ」および「移行元サーバフラグ」に“ＯＦＦ”を設定する。次に処理がＯＰ４に進む。ＯＰ４では、サーバ装置２ａは、自身のサーバ名を取得し、「自サーバ」に設定する。次に処理がＯＰ５に進む。
【０１３３】
ＯＰ５では、サーバ装置２ａは、「表定義」（図９Ａ、図９Ｂ）および「データ集合配置定義」(図９Ｃ)を読み込んで、データを管理する表、およびデータ集合を作成する。次に処理がＯＰ６に進む。
【０１３４】
ＯＰ６では、サーバ装置２ａは、通信制御多重度数のスレッドを生成する。次に処理がＯＰ７およびＯＰ９に進む。ＯＰ７では、サーバ装置２ａは、依頼データ受付処理を行う。次に処理がＯＰ８に進む。ＯＰ８では、サーバ装置２ａは、スレッドを終了する。ＯＰ９では、サーバ装置２ａは、コマンド受付処理を行い、サーバ制御処理を終了する。
【０１３５】
図３０は、コマンド受付処理のフローチャートの一例である。図３０は、図２９のＯＰ９のコマンド受付処理の詳細を示す。ＯＰ１１では、サーバ装置２ａは、コマンドの実行による受信イベントが発生するまで待機する。次に処理がＯＰ１２に進む。
【０１３６】
ＯＰ１２では、サーバ装置２ａは、スケールアウト命令を受信したか否かを判定する。スケールアウト命令を受信した場合には（ＯＰ１２：Ｙｅｓ）、処理がＯＰ１３に進む。スケールアウト命令を受信していない場合には（ＯＰ１２：Ｎｏ）、処理がＯＰ１４に進む。
【０１３７】
ＯＰ１３では、サーバ装置２ａは、スケールアウト処理を行い、処理がＯＰ１１に戻る。ＯＰ１４では、サーバ装置２ａは、サーバ制御処理停止命令を受信したか否かを判定する。サーバ制御処理停止命令を受信した場合には（ＯＰ１４：Ｙｅｓ）、処理がＯＰ１５に進む。サーバ制御処理停止命令を受信していない場合には（ＯＰ１４：Ｎｏ）、処理がＯＰ１１に戻る。
【０１３８】
ＯＰ１５では、サーバ装置２ａは、「プロセス停止フラグ」に“ＯＮ”を設定する。次に処理がＯＰ１６に進む。ＯＰ１６では、サーバ装置２ａは、サーバ制御プロセスの停止処理を行い、コマンド受付処理を終了する。
【０１３９】
図３１は、スケールアウト処理のフローチャートの一例である。図３１は、図３０のＯＰ１３のスケールアウト処理の詳細を示す。ＯＰ２１では、サーバ装置２ａは、スケールアウト命令で指定された入力情報を、入力インタフェースのパラメタとして受け取る。入
力情報は、“移行対象のデータ集合名”、“移行元サーバ名”および“移行先サーバ名”を含む。スケールアウト命令に、待機系移行先サーバが指定された場合、サーバ装置２ａは、“待機系移行先サーバ名”も、入力情報として受け取る。次に処理がＯＰ２２に進む。
【０１４０】
ＯＰ２２では、サーバ装置２ａは、「スケールアウトフラグ」に“ＯＮ”を設定する。次に処理がＯＰ２３に進む。ＯＰ２３では、サーバ装置２ａは、入力情報の“移行元サーバ名”を「移行元サーバ」に設定する。次に処理がＯＰ２４に進む。
【０１４１】
ＯＰ２４では、サーバ装置２ａは、入力情報の“移行先サーバ名”を「移行先サーバ」に設定する。次に処理がＯＰ２５に進む。ＯＰ２５では、サーバ装置２ａは、「自サーバ」が「移行元サーバ」であるか否かを判定する。即ち、サーバ装置２ａは、自身が移行元サーバであるか否かを判定する。自身が移行元サーバである場合には（ＯＰ２５：Ｙｅｓ）、処理がＯＰ２６に進む。自身が移行元サーバでない場合には（ＯＰ２５：Ｎｏ）、処理がＯＰ２７に進む。
【０１４２】
ＯＰ２６では、サーバ装置２ａは、移行元サーバの処理を行う。移行元サーバの処理は、移行データを移行先サーバへ送信する処理である。次に処理がＯＰ２８に進む。ＯＰ２７では、サーバ装置２ａは、移行先サーバの処理を行う。移行先サーバの処理は、移行データを移行先サーバから受信する処理である。次に処理がＯＰ２８に進む。ＯＰ２８では、サーバ装置２ａは、「スケールアウトフラグ」に“ＯＦＦ”を設定し、スケールアウト処理を終了する。
【０１４３】
図３２は、移行元サーバの処理のフローチャートの一例である。図３２は、図３１のＯＰ２６の移行元サーバの処理の詳細を示す。ＯＰ３１では、サーバ装置２ａは、入力情報の“移行対象のデータ集合名”(図３１、ＯＰ２１)およびトランログからデータ移行リストを作成する。次に処理がＯＰ３２に進む。
【０１４４】
ＯＰ３２では、サーバ装置２ａは、コネクション情報からクライアント通知リストを作成する。クライアント通知リストは、各クライアント装置２ｂに対し、スケールアウトによるデータ配置の変更を通知したか否かを管理する。各クライアント装置２ｂへの通知が完了すると、サーバ装置２ａは、データ配置の変更に関する情報を保持しなくてもよい。一方、データ配置の変更に関する情報を保持し続ける場合には、クライアント通知リストを作成しなくてもよい。次に処理がＯＰ３３に進む。
【０１４５】
ＯＰ３３では、サーバ装置２ａは、「移行元サーバフラグ」に“ＯＮ”を設定する。次に処理がＯＰ３４に進む。ＯＰ３４では、サーバ装置２ａは、現在時刻を取得し、「処理開始時刻」に設定する。次に処理がＯＰ３５に進む。ＯＰ３５では、サーバ装置２ａは、移行データ送信処理を行い、移行元サーバの処理を終了する。
【０１４６】
図３３は、移行データ送信処理のフローチャートの一例である。図３３は、図３２のＯＰ３５の移行データ送信処理の詳細を示す。サーバ装置２ａは、移行部５３により、図３３のＯＰ４１からＯＰ５４までの処理を行う。
【０１４７】
ＯＰ４１では、サーバ装置２ａは、移行データを初期化する。次に処理がＯＰ４２に進む。ＯＰ４２では、サーバ装置２ａは、データ移行リストにおいて、「移行状態」が“移行未”のデータ集合の数が０より大きいか否かを判定する。“移行未”のデータ集合の数が０より大きい場合には（ＯＰ４２：Ｙｅｓ）、処理がＯＰ４３に進む。“移行未”のデータ集合の数が０以下の場合には（ＯＰ４２：Ｎｏ）、移行データ送信処理が終了する。
【０１４８】
ＯＰ４３では、サーバ装置２ａは、データ移行リストにおいて、「トランＩＤ」が“０” のデータ集合の数が０より大きいか否かを判定する。「トランＩＤ」が“０” のデータ集合の数が０より大きい場合には（ＯＰ４３：Ｙｅｓ）、処理がＯＰ４４に進む。「トランＩＤ」が“０”のデータ集合の数が０以下の場合には（ＯＰ４３：Ｎｏ）、処理がＯＰ４５に進む。
【０１４９】
ＯＰ４４では、サーバ装置２ａは、データ移行リストにおいて、「移行状態」が“移行未”で「トランＩＤ」が“０”のデータ集合を抽出する。次に処理がＯＰ４７に進む。ＯＰ４５では、サーバ装置２ａは、データ移行リストにおいて、「移行状態」が“移行未”で「トランＩＤ」が“０”でないデータ集合を抽出する。次に処理がＯＰ４６に進む。ＯＰ４６では、サーバ装置２ａは、移行データに当該「トランＩＤ」に対応するトランログを設定する。次に処理がＯＰ４７に進む。
【０１５０】
ＯＰ４７では、サーバ装置２ａは、移行対象のデータ集合の「移行状態」を“移行中"
に変更する。次に処理がＯＰ４８に進む。ＯＰ４８では、サーバ装置２ａは、移行データに移行対象のデータ集合を設定する。次に処理がＯＰ４９に進む。
【０１５１】
ＯＰ４９では、サーバ装置２ａは、移行先サーバに移行データを送信する。次に処理がＯＰ５０に進む。ＯＰ５０では、サーバ装置２ａは、移行先サーバからの応答を待つか、または一定時間休止する。一定時間は、例えば１０ｍｓである。次に処理がＯＰ５１に進む。
【０１５２】
ＯＰ５１では、サーバ装置２ａは、移行先サーバから応答を受信したか否かを判定する。移行先サーバから応答を受信した場合には（ＯＰ５１：Ｙｅｓ）、処理がＯＰ５２に進む。移行先サーバから応答を受信しない場合には（ＯＰ５１：Ｎｏ）、処理がＯＰ５３に進む。ＯＰ５２では、サーバ装置２ａは、移行対象のデータ集合の「移行状態」を“移行済"に変更する。次に処理がＯＰ４１に戻る。
【０１５３】
ＯＰ５３では、サーバ装置２ａは、現在時刻≧「処理開始時刻」＋「スケールアウトタイムアウト」であるか否かを判定する。即ち、サーバ装置２ａは、移行先サーバからの応答待ち時間が所定時間以上であるか否かを判定する。応答待ち時間が所定時間以上である場合には（ＯＰ５３：Ｙｅｓ）、処理がＯＰ５４に進む。応答待ち時間が所定時間より短い場合には（ＯＰ５３：Ｎｏ）、処理がＯＰ５０に戻る。ＯＰ５４では、サーバ装置２ａは、移行先サーバからの応答待ちのタイムアウトにより、スケールアウトが失敗した旨のメッセージを出力し、移行データ送信処理を終了する。
【０１５４】
図３４は、移行先サーバの処理のフローチャートの一例である。図３４は、図３１のＯＰ２７の移行先サーバの処理の詳細を示す。ＯＰ６１では、サーバ装置２ａは、入力情報の“移行対象のデータ集合名”(図３１、ＯＰ２１)から被データ移行リストを作成する。次に処理がＯＰ６２に進む。
【０１５５】
ＯＰ６２では、サーバ装置２ａは、被データ移行リストにおいて、「移行状態」が“移行未”のデータ集合の数が０より大きいか否かを判定する。“移行未”のデータ集合の数が０より大きい場合には（ＯＰ６２：Ｙｅｓ）、処理がＯＰ６３に進む。“移行未”のデータ集合の数が０以下の場合には（ＯＰ６２：Ｎｏ）、処理がＯＰ７３に進む。
【０１５６】
ＯＰ６３では、サーバ装置２ａは、移行元サーバからの移行データを待つか、または一定時間休止する。一定時間は、例えば１０ｍｓである。次に処理がＯＰ６４に進む。ＯＰ６４では、サーバ装置２ａは、移行元サーバから移行データを受信したか否かを判定する。移行データを受信した場合には（ＯＰ６４：Ｙｅｓ）、処理がＯＰ６５に進む。移行デ
ータを受信しない場合には（ＯＰ６４：Ｎｏ）、処理がＯＰ７１に進む。
【０１５７】
ＯＰ６５では、サーバ装置２ａは、移行データからデータ集合を取り出して保存する。次に処理がＯＰ６６に進む。ＯＰ６６では、サーバ装置２ａは、移行データにトランログが存在するか否かを判定する。トランログが存在する場合には（ＯＰ６６：Ｙｅｓ）、処理がＯＰ６７に進む。トランログが存在しない場合には（ＯＰ６６：Ｎｏ）、処理がＯＰ６９に進む。
【０１５８】
ＯＰ６７では、サーバ装置２ａは、移行データからトランログを取り出して保存する。次に処理がＯＰ６８に進む。ＯＰ６８では、サーバ装置２ａは、保存したトランログのＩＤを、被データ移行リストの被移行対象のデータ集合の「トランＩＤ」に設定する。次に処理がＯＰ６９に進む。
【０１５９】
ＯＰ６９では、サーバ装置２ａは、移行元サーバへ応答を送信する。次に処理がＯＰ７０に進む。ＯＰ７０では、サーバ装置２ａは、被移行対象のデータ集合の「移行状態」を"移行済"に変更する。次に処理がＯＰ６２に戻る。
【０１６０】
ＯＰ７１では、サーバ装置２ａは、現在時刻≧「処理開始時刻」＋「スケールアウトタイムアウト」であるか否かを判定する。即ち、サーバ装置２ａは、移行元サーバからの移行データの受信待ち時間が所定時間以上であるか否かを判定する。受信待ち時間が所定時間以上である場合には（ＯＰ７１：Ｙｅｓ）、処理がＯＰ７２に進む。受信待ち時間が所定時間より短い場合には（ＯＰ７１：Ｎｏ）、処理がＯＰ６２に戻る。
【０１６１】
ＯＰ７２では、サーバ装置２ａは、移行元サーバからの移行データの受信待ちのタイムアウトにより、スケールアウトが失敗した旨のメッセージを出力する。次に処理がＯＰ７３に進む。ＯＰ７３では、サーバ装置２ａは、移行元サーバに移行完了通知を送信し、移行先サーバの処理を終了する。
【０１６２】
図３５は、依頼データ受付処理のフローチャートの一例である。図３５は、図２９のＯＰ７の依頼データ受付処理の詳細を示す。ＯＰ８１では、サーバ装置２ａは、依頼データの受信を待機する。次に処理がＯＰ８２に進む。
【０１６３】
ＯＰ８２では、サーバ装置２ａは、依頼データを受信したか否かを判定する。依頼データを受信した場合には（ＯＰ８２：Ｙｅｓ）、処理がＯＰ８３に進む。依頼データを受信しない場合には（ＯＰ８２：Ｎｏ）、処理がＯＰ８４に進む。
【０１６４】
ＯＰ８３では、サーバ装置２ａは、依頼データ処理を行う。次に処理がＯＰ８４に進む。ＯＰ８４では、サーバ装置２ａは、「プロセス停止フラグ」が“ＯＮ”であるか否かを判定する。「プロセス停止フラグ」が“ＯＮ”である場合には（ＯＰ８４：Ｙｅｓ）、依頼データ受付処理が終了する。「プロセス停止フラグ」が“ＯＮ”でない場合には（ＯＰ８４：Ｎｏ）、処理がＯＰ８１に戻る。
【０１６５】
図３６Ａおよび図３６Ｂは、依頼データ処理のフローチャートの一例である。図３６Ａおよび図３６Ｂは、図３５のＯＰ８３の依頼データ処理の詳細を示す。図３６Ａは、依頼データの操作対象であるデータ集合が、移行先サーバに移行されていない場合の処理を示す。
【０１６６】
ＯＰ９１では、サーバ装置２ａは、現在時刻を取得し、「受付時刻」に設定する。次に処理がＯＰ９２に進む。ＯＰ９２では、サーバ装置２ａは、「移行元サーバフラグ」が“ＯＮ”であるか否かを判定する。「移行元サーバフラグ」が“ＯＮ”である場合には（Ｏ
Ｐ９２：Ｙｅｓ）、処理がＯＰ９３に進む。「移行元サーバフラグ」が“ＯＮ”でない場合には（ＯＰ９２：Ｎｏ）、処理がＯＰ９４に進む。
【０１６７】
ＯＰ９３では、サーバ装置２ａは、データ移行リストにおいて、依頼データの操作対象のデータ集合が"移行未"であるか否かを判定する。操作対象のデータ集合が"移行未"である場合には（ＯＰ９３：Ｙｅｓ）、処理がＯＰ９４に進む。操作対象のデータ集合が"移
行未"でない場合には（ＯＰ９３：Ｎｏ）、処理が図３６ＢのＳ１に進む。
【０１６８】
ＯＰ９４では、サーバ装置２ａは、依頼データを送信したクライアント装置２ｂとのコネクションが確立されているか否かを判定する。コネクションが確立されている場合には（ＯＰ９４：Ｙｅｓ）、処理がＯＰ９９に進む。コネクションが確立されていない場合には（ＯＰ９４：Ｎｏ）、処理がＯＰ９５に進む。
【０１６９】
ＯＰ９５では、サーバ装置２ａは、依頼データを送信したクライアント装置２ｂに対するコネクション情報を作成する。次に処理がＯＰ９６に進む。ＯＰ９６では、サーバ装置２ａは、「自サーバ」が「移行先サーバ」であるか否かを判定する。即ち、サーバ装置２ａは、自身が移行先サーバであるか否かを判定する。自身が移行先サーバである場合には（ＯＰ９６：Ｙｅｓ）、処理がＯＰ９７に進む。自身が移行先サーバでない場合には（ＯＰ９６：Ｎｏ）、処理がＯＰ９９に進む。
【０１７０】
ＯＰ９７では、サーバ装置２ａは、被データ移行リストにおいて、操作対象のデータ集合の「トランＩＤ」が“０”であるか否かを判定する。操作対象のデータ集合の「トランＩＤ」が“０”である場合には（ＯＰ９７：Ｙｅｓ）、処理がＯＰ９９に進む。操作対象のデータ集合の「トランＩＤ」が“０”でない場合には（ＯＰ９７：Ｎｏ）、処理がＯＰ９８に進む。
【０１７１】
ＯＰ９８では、サーバ装置２ａは、被データ移行リストの操作対象のデータ集合の「トランＩＤ」をコネクション情報の「トランＩＤ」に設定する。次に処理がＯＰ９９に進む。
【０１７２】
ＯＰ９９では、サーバ装置２ａは、依頼データに基づく処理操作を行う。次に処理がＯＰ１００に進む。ＯＰ１００では、サーバ装置２ａは、依頼データに基づく処理操作の結果データをクライアントに返却し、依頼データ処理を終了する。サーバ装置２ａは、応答部５２により、ＯＰ１００の処理を行う。
【０１７３】
図３６Ｂは、依頼データの操作対象であるデータ集合が、移行先サーバに移行中または移行済の場合の処理を示す。図３６ＡのＳ１の次に処理がＯＰ１１１に進む。ＯＰ１１１では、サーバ装置２ａは、依頼データの操作対象のデータ集合が"移行中"であるか否かを判定する。操作対象のデータ集合が"移行中"である場合には（ＯＰ１１１：Ｙｅｓ）、処理がＯＰ１１２に進む。操作対象のデータ集合が"移行中"でない場合には（ＯＰ１１１：Ｎｏ）、処理がＯＰ１１４に進む。
【０１７４】
ＯＰ１１２では、サーバ装置２ａは、一定時間待機する。一定時間は、例えば１ｍｓである。次に処理がＯＰ１１３に進む。ＯＰ１１３では、サーバ装置２ａは、「受付時刻」から「サーバタイムアウト」に設定された時間が経過したか否かを判定する。「受付時刻」から「サーバタイムアウト」に設定された時間が経過した場合には（ＯＰ１１３：Ｙｅｓ）、処理が図３７ＢのＳ２に進む。「受付時刻」から「サーバタイムアウト」に設定された時間が経過していない場合には（ＯＰ１１３：Ｎｏ）、処理がＯＰ１１１に戻る。
【０１７５】
ＯＰ１１４では、サーバ装置２ａは、依頼データの操作対象のデータ集合は"移行済"で
あるため、依頼データを移行先サーバへ送信する。サーバ装置２ａは、処理依頼送信部５４により、ＯＰ１１４の処理を行う。次に処理がＯＰ１１５に進む。
【０１７６】
ＯＰ１１５では、サーバ装置２ａは、クライアント通知リストの「クライアント通知状態」を“通知済”にする。次に処理がＯＰ１１６に進む。ＯＰ１１６では、サーバ装置２ａは、クライアント通知リストの「クライアント通知状態」が"通知未"のクライアント装置２ｂがあるか否かを判定する。「クライアント通知状態」が"通知未"のクライアント装置２ｂがある場合には（ＯＰ１１６：Ｙｅｓ）、処理がＯＰ１１９に進む。「クライアント通知状態」が"通知未"のクライアント装置２ｂがない場合には（ＯＰ１１６：Ｎｏ）、処理がＯＰ１１７に進む。なお、図３２のＯＰ３２において、クライアント通知リストを作成しない場合は、ＯＰ１１５およびＯＰ１１６の処理は省略される。
【０１７７】
ＯＰ１１７では、サーバ装置２ａは、「スケールアウトフラグ」が“ＯＦＦ”であるか否かを判定する。「スケールアウトフラグ」が“ＯＦＦ”である場合には（ＯＰ１１７：Ｙｅｓ）、処理がＯＰ１１８に進む。「スケールアウトフラグ」が“ＯＦＦ”でない場合には（ＯＰ１１７：Ｎｏ）、処理がＯＰ１１９に進む。
【０１７８】
ＯＰ１１８では、サーバ装置２ａは、「移行元サーバフラグ」に“ＯＦＦ”を設定する。次に処理がＯＰ１１９に進む。ＯＰ１１９では、サーバ装置２ａは、依頼データを送信したクライアント装置２ｂに対するコネクション情報を削除し、依頼データ処理を終了する。
【０１７９】
図３７Ａおよび図３７Ｂは、依頼データに基づく処理操作のフローチャートの一例である。図３７Ａおよび図３７Ｂは、図３６ＡのＯＰ９９の依頼データに基づく処理操作の詳細を示す。サーバ装置２ａは、処理部５１により、図３７ＡのＯＰ１２１からＯＰ１２６までの処理、および図３７ＢのＯＰ１３１からＯＰ１４２までの処理を行う。
【０１８０】
図３７ＡのＯＰ１２１では、サーバ装置２ａは、依頼データに基づく処理操作がコミットであるか否かを判定する。処理操作がコミットである場合には（ＯＰ１２１：Ｙｅｓ）、処理がＯＰ１２３に進む。処理操作がコミットでない場合には（ＯＰ１２１：Ｎｏ）、処理がＯＰ１２２に進む。
【０１８１】
ＯＰ１２２では、サーバ装置２ａは、処理操作がロールバックであるか否かを判定する。処理操作がロールバックである場合には（ＯＰ１２２：Ｙｅｓ）、処理がＯＰ１２５に進む。処理操作がロールバックでない場合には（ＯＰ１２２：Ｎｏ）、処理が図３７ＢのＳ３に進む。
【０１８２】
ＯＰ１２３では、サーバ装置２ａは、処理操作がコミットであり、「トランＩＤ」に対応するトランログを読み込む。次に処理がＯＰ１２４に進む。ＯＰ１２４では、サーバ装置２ａは、「トランＩＤ」に対応する差分データをデータ集合に書き込む。次に処理がＯＰ１２５に進む。
【０１８３】
ＯＰ１２５では、サーバ装置２ａは、「トランＩＤ」に対応するトランログを削除する。次に処理がＯＰ１２６に進む。ＯＰ１２６では、サーバ装置２ａは、データ移行リストから「トランＩＤ」を削除し、依頼データに基づく処理操作を終了する。
【０１８４】
図３７Ｂは、依頼データの処理操作が、コミットでもロールバックでもない場合の処理を示す。図３７ＡのＳ３の次に処理がＯＰ１３１に進む。ＯＰ１３１では、サーバ装置２ａは、「トランＩＤ」に対応するトランログを読み込む。次に処理がＯＰ１３２に進む。
【０１８５】
ＯＰ１３２では、サーバ装置２ａは、依頼データの処理操作を、トランログの差分データを反映したデータ集合に対して実施する。次に処理がＯＰ１３３に進む。ＯＰ１３３では、サーバ装置２ａは、依頼データの処理操作が成功したか否かを判定する。依頼データの処理操作が成功した場合には（ＯＰ１３３：Ｙｅｓ）、処理がＯＰ１３４に進む。依頼データの処理操作が成功しなかった場合には（ＯＰ１３３：Ｎｏ）、処理がＯＰ１４０に進む。
【０１８６】
ＯＰ１３４では、サーバ装置２ａは、新たにトランザクションが発生したか否かを判定する。トランザクションが発生した場合には（ＯＰ１３４：Ｙｅｓ）、処理がＯＰ１３５に進む。トランザクションが発生しない場合には（ＯＰ１３４：Ｎｏ）、処理がＯＰ１３９に進む。
【０１８７】
ＯＰ１３５では、サーバ装置２ａは、ＯＰ１３４で発生したトランザクションに対するトランログを作成する。次に処理がＯＰ１３６に進む。ＯＰ１３６では、サーバ装置２ａは、「トランＩＤ」をコネクション情報に設定する。次に処理がＯＰ１３７に進む。
【０１８８】
ＯＰ１３７では、サーバ装置２ａは、「移行元サーバフラグ」が“ＯＮ”で移行対象のデータ集合でトランザクションが発生しているか否かを判定する。「移行元サーバフラグ」が“ＯＮ”で移行対象のデータ集合でトランザクションが発生している場合には（ＯＰ１３７：Ｙｅｓ）、処理がＯＰ１３８に進む。「移行元サーバフラグ」が“ＯＮ”でないか、または移行対象のデータ集合でトランザクションが発生していない場合には（ＯＰ１３７：Ｎｏ）、処理がＯＰ１３９に進む。
【０１８９】
ＯＰ１３８では、サーバ装置２ａは、データ移行リストの移行対象のデータ集合に対し「トランＩＤ」を設定する。次に処理がＯＰ１３９に進む。ＯＰ１３９では、サーバ装置２ａは、データ集合の更新差分をトランログに反映し、依頼データに基づく処理操作を終了する。
【０１９０】
ＯＰ１３３において、依頼データの処理操作が成功しなかった場合には、処理がＯＰ１４０に進む。また、図３６ＢのＯＰ１１３において、依頼データの「受付時刻」から「サーバタイムアウト」に設定された時間が経過した場合には、処理がＯＰ１４０に進む。ＯＰ１４０では、サーバ装置２ａは、トランザクションのロールバックを行うか否かを判定する。トランザクションのロールバックを行う場合には（ＯＰ１４０：Ｙｅｓ）、処理がＯＰ１４１に進む。トランザクションのロールバックを行わない場合には（ＯＰ１４０：Ｎｏ）、依頼データに基づく処理操作が終了する。
【０１９１】
ＯＰ１４１では、サーバ装置２ａは、「トランＩＤ」に対応するトランログを削除する。次に処理がＯＰ１４２に進む。ＯＰ１４２では、サーバ装置２ａは、データ移行リストから「トランＩＤ」を削除し、依頼データに基づく処理操作を終了する。
【０１９２】
図３８Ａおよび図３８Ｂは、クライアント制御処理のフローチャートの一例である。クライアント制御処理は、依頼データを作成してサーバ装置２ａに送信し、結果データを受信してデータ集合の接続先情報を更新する処理を含む。クライアント制御処理は、例えば、クライアントアプリケーションの起動により開始される。ＯＰ１５１では、クライアント装置２ｂは、クライアントアプリケーションから処理依頼を受け付ける。次に処理がＯＰ１５２に進む。
【０１９３】
ＯＰ１５２では、クライアント装置２ｂは、サーバ接続先リストおよびデータ集合接続先リストが作成されているか否かを判定する。サーバ接続先リストおよびデータ集合接続先リストが作成されている場合には（ＯＰ１５２：Ｙｅｓ）、処理がＯＰ１５７に進む。
サーバ接続先リストおよびデータ集合接続先リストが作成されていない場合には（ＯＰ１５２：Ｎｏ）、処理がＯＰ１５３に進む。
【０１９４】
ＯＰ１５３では、クライアント装置２ｂは、クライアント装置２ｂの定義ファイル４１ｂから定義パラメタの設定値を読み込み、変数に設定する。具体的には、クライアント装置２ｂは、「クライアントタイムアウト」および「クライアントポート番号」に、それぞれClientTimeOutおよびClientPortの設定値を設定する。次に処理がＯＰ１５４に進む。
ＯＰ１５４では、クライアント装置２ｂは、自サーバの"ＩＰアドレス"や"マシン名"を取得し、「クライアント名」に設定する。次に処理がＯＰ１５５に進む。
【０１９５】
ＯＰ１５５では、クライアント装置２ｂは、クライアント装置２ｂの定義ファイル４１ｂを読み込み、サーバ接続先リストを作成する。具体的には、クライアント装置２ｂは、サーバ接続先リストにおいて、サーバ接続先情報の「サーバ名」および「ポート番号」に、それぞれServerNameおよびServerPortの設定値を設定する。クライアント装置２ｂの定義ファイル４１ｂに複数のサーバが定義されている場合、クライアント装置２ｂは、各サーバに対し、サーバ接続先情報の「サーバ名」および「ポート番号」にそれぞれ対応する設定値を設定する。次に処理がＯＰ１５６に進む。
【０１９６】
ＯＰ１５６では、クライアント装置２ｂは、クライアント装置２ｂの定義ファイル４１ｂを読み込み、データ集合接続先リストを作成する。具体的には、クライアント装置２ｂは、データ集合接続先リストにおいて、データ集合と接続先組み合わせの「データ集合名」および「接続先サーバ名」を、DataLocatedServerの設定値に基づいて設定する。クラ
イアント装置２ｂの定義ファイル４１ｂに複数のデータ集合が定義されている場合、クライアント装置２ｂは、各データ集合に対し、データ集合と接続先組み合わせの「データ集合名」および「接続先サーバ名」にそれぞれ対応する設定値を設定する。次に処理がＯＰ１５７に進む。
【０１９７】
ＯＰ１５７では、クライアント装置２ｂは、現在時刻を取得し変数「依頼開始時刻」に設定する。次に処理がＯＰ１５８に進む。ＯＰ１５８では、クライアント装置２ｂは、処理依頼から操作対象のデータ集合を抽出する。次に処理がＯＰ１５９に進む。
【０１９８】
ＯＰ１５９では、クライアント装置２ｂは、データ集合接続先リストから抽出したデータ集合が存在する接続先サーバのサーバ名とポート番号を、依頼データの「サーバ名」および「サーバポート番号」に設定する。次に処理がＯＰ１６０に進む。
【０１９９】
ＯＰ１６０では、クライアント装置２ｂは、ＯＰ１５９における接続先サーバを「依頼先サーバ」に設定する。次に処理がＯＰ１６１に進む。ＯＰ１６１では、クライアント装置２ｂは、ＯＰ１５９におけるデータ集合を「依頼データ集合」に設定し、処理が図３８ＢのＳ４に進む。
【０２００】
図３８ＢのＳ４の次に処理がＯＰ１７１に進む。ＯＰ１７１では、クライアント装置２ｂは、クライアントアプリケーションから受け付けた処理依頼に、制御情報を追加した依頼データを、サーバ装置２ａへ送信する。制御情報は、依頼データの「サーバ名」、「サーバポート番号」、「クライアント名」、「クライアントポート番号」および「依頼データ番号」等である。次に処理がＯＰ１７２に進む。
【０２０１】
ＯＰ１７２では、クライアント装置２ｂは、一定時間経過するか、結果データを受信するまで待機する。一定時間は、例えば、「クライアントタイムアウト」の１／１０の時間である。次に処理がＯＰ１７３に進む。
【０２０２】
ＯＰ１７３では、クライアント装置２ｂは、サーバ装置２ａから結果データを受信したか否かを判定する。結果データを受信した場合には（ＯＰ１７３：Ｙｅｓ）、処理がＯＰ１７４に進む。結果データを受信していない場合には（ＯＰ１７３：Ｎｏ）、処理がＯＰ１７５に進む。
【０２０３】
ＯＰ１７４では、クライアント装置２ｂは、結果データ受信処理を行う。次に処理がＯＰ１７８に進む。ＯＰ１７５では、クライアント装置２ｂは、現在時刻を取得し変数「現在時刻」に設定する。次に処理がＯＰ１７６に進む。
【０２０４】
ＯＰ１７６では、クライアント装置２ｂは、「クライアントタイムアウト」＞「現在時刻」−「依頼開始時刻」であるか否かを判定する。即ち、クライアント装置２ｂは、サーバ装置２ａからの結果データの受信待ち時間が所定時間より短いか否かを判定する。受信待ち時間が所定時間より短い場合には（ＯＰ１７６：Ｙｅｓ）、処理がＯＰ１７２に戻る。受信待ち時間が所定時間以上である場合には、（ＯＰ１７６：Ｎｏ）、処理がＯＰ１７７に進む。
【０２０５】
ＯＰ１７７では、クライアント装置２ｂは、復帰値にタイムアウトであることを示す値を設定する。次に処理がＯＰ１７８に進む。ＯＰ１７８では、クライアント装置２ｂは、クライアントアプリケーションに復帰し、クライアント制御処理を終了する。
【０２０６】
図３９は、結果データ受信処理のフローチャートの一例である。図３９は、図３８ＢのＯＰ１７４の結果データ受信処理の詳細を示す。ＯＰ１８１では、クライアント装置２ｂは、サーバ装置２ａから受信した結果データから制御情報を取り出す。制御情報は、結果データの「依頼先サーバ名」および「結果送信サーバ名」等である。次に処理がＯＰ１８２に進む。
【０２０７】
ＯＰ１８２では、クライアント装置２ｂは、依頼データを送信した「依頼先サーバ」と結果データを送信した「結果送信サーバ」とが異なるか否かを判定する。具体的には、クライアント装置２ｂは、図３８ＡのＯＰ１６０で設定された「依頼先サーバ」と、サーバ装置２ａから受信した結果データの「結果送信サーバ名」とが異なるか否かを判定すればよい。「依頼先サーバ」と「結果送信サーバ」とが異なる場合には（ＯＰ１８２：Ｙｅｓ）、処理がＯＰ１８３に進む。「依頼先サーバ」と「結果送信サーバ」とが同じ場合には（ＯＰ１８２：Ｎｏ）、処理がＯＰ１８４に進む。
【０２０８】
ＯＰ１８３では、クライアント装置２ｂは、「依頼先サーバ」と「結果送信サーバ」とが異なるため、データ集合の接続先サーバが変更されたと判断し、データ集合接続先リストを更新する。即ち、クライアント装置２ｂは、データ集合接続先リストにおいて、データ集合に対する接続先サーバを「依頼先サーバ」から「結果送信サーバ」に更新する。次に処理がＯＰ１８４に進む。
【０２０９】
ＯＰ１８４では、クライアント装置２ｂは、サーバ装置２ａから受信した結果データから「処理結果」を取り出す。次に処理がＯＰ１８５に進む。ＯＰ１８５では、クライアント装置２ｂは、アプリケーションの返却域に「処理結果」を設定する。次に処理がＯＰ１８６に進む。ＯＰ１８６では、クライアント装置２ｂは、復帰値に「処理結果」に応じた値を設定し、結果データ受信処理を終了する。
【０２１０】
＜実施形態の作用効果＞
情報処理システム１において、スケールアウトによりシステム規模を拡充する場合、移行元サーバは、移行対象のデータ集合を、増設された移行先サーバに移行する。移行元サーバは、クライアントからの処理依頼を受信し、操作対象のデータ集合が移行先サーバに
移行されている場合、処理依頼を移行先サーバに送信する。移行先サーバは、受信した処理依頼に基づいて、移行済のデータ集合に対する処理を行う。
【０２１１】
移行先サーバは、処理依頼に基づいて行った処理の結果をクライアントに送信する。処理結果は、操作対象のデータ集合が、移行先サーバに配置されている旨の情報を含む。このため、クライアントは、操作対象のデータ集合が移行先サーバに移行されたことを認識し、クライアント自身が保持するデータ集合の配置情報を更新することができる。したがって、情報処理システム１は、クライアントからサーバへの処理依頼の停止を回避して、スケールアウトすることができる。
【０２１２】
また、移行先サーバは、移行対象のデータ集合が移行元サーバから移行中である場合、移行完了後に、移行元サーバから受信した処理依頼に基づく処理を行う。このとき移行先サーバは、移行元サーバで行う場合と変わらない待ち時間で、操作対象のデータ集合に対する処理を行うことができる。この場合も、移行先サーバは、データ集合の配置情報を含む処理結果をクライアントに送信する。したがって、情報処理システム１は、クライアントからサーバへの処理依頼の停止を回避して、スケールアウトすることができる。
【０２１３】
さらに、移行元サーバは、操作対象のデータ集合が更新中である場合、当該データ集合に対する更新内容を含む差分データを、当該データ集合とともに移行先サーバに移行する。移行先サーバは、移行された差分データを当該データ集合に反映し、クライアントからの処理依頼に基づく処理を行う。このため、操作対象のデータ集合が更新中であっても、差分データとともに移行先サーバに送信することで、更新中のデータ集合の移行が可能となる。また、移行先サーバは、処理結果をデータ集合の配置情報とともにクライアントに送信する。したがって、情報処理システム１は、クライアントからサーバへの処理依頼の停止を回避して、スケールアウトすることができる。
【０２１４】
なお、操作対象のデータ集合が更新中であるか否かの判断は、次のように行うことができる。操作対象のデータ集合に対してトランザクションが発生すると、移行元サーバは、データ移行リストの当該データ集合に対して「トランＩＤ」を記録する。そして、トランザクションが終了すると、移行元サーバは、データ移行リストの当該データ集合に対する「トランＩＤ」を削除する。移行元サーバは、操作対象のデータ集合に対して「トランＩＤ」が記録されているか否かにより、当該データ集合が更新中であるか否かを判断することができる。
【０２１５】
またさらに、移行元サーバは、更新中でないデータ集合を優先して移行先サーバに移行する。したがって、情報処理システム１は、クライアントからサーバへの処理依頼の停止を回避し、業務への影響を抑制しながら、スケールアウトすることができる。
【０２１６】
情報処理システム１が、移行元の現用系サーバおよび待機系サーバを含むクラスタシステムを構築する場合、スケールアウトによりデータ集合が移行先の現用系サーバに移行されると、移行先の現用系サーバは、移行先の待機系サーバと同期を取る。移行先の現用系サーバは、クライアントからの処理依頼を受信すると、処理依頼に基づく処理を行い、データ集合の配置情報を含む処理結果をクライアントに送信する。したがって、クラスタシステムを構築する情報処理システム１は、クライアントからサーバへの処理依頼の停止を回避し、スケールアウトすることができる。
【０２１７】
＜記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させること
により、その機能を提供させることができる。
【０２１８】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ（リードオンリーメモリ）等がある。さらに、Solid State Drive（ＳＳＤ）はコンピュータ等から取り外し可能な記録媒体としても、コンピュータ等
に固定された記録媒体としても利用可能である。
【０２１９】
＜その他＞
上述した実施形態は、以下の付記を開示する。以下の付記は適宜組み合わせることが可能である。
【０２２０】
（付記１）
移行元の情報処理装置からデータの移行を受け付ける情報処理装置において、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行する処理部と、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知する応答部と、
を備える情報処理装置。
【０２２１】
（付記２）
前記処理部は、前記操作対象データが、前記移行元の情報処理装置から移行中である場合には、移行完了後に前記処理を実行する、
付記１に記載の情報処理装置。
【０２２２】
（付記３）
前記処理部は、前記操作対象データが更新中である場合、前記移行元の情報処理装置における前記操作対象データの更新内容を含む差分データとともに、前記操作対象データの移行を受け付け、前記操作対象データおよび前記差分データに基づいて前記処理を行う、付記１又は２に記載の情報処理装置。
【０２２３】
（付記４）
移行先の情報処理装置にデータを移行する移行部と、
クライアント装置からの処理依頼の対象である操作対象データを、前記移行先の情報処理装置に移行し、前記処理依頼を前記移行先の情報処理装置に送信する処理依頼送信部と、
を備える情報処理装置。
【０２２４】
（付記５）
前記処理依頼を受信してトランザクションが発生した場合、前記操作対象データが更新中であることを記録し、前記トランザクションが終了すると、前記記録を消去する記憶部、
をさらに備える付記４に記載の情報処理装置。
【０２２５】
（付記６）
前記移行部は、前記操作対象データが複数ある場合、更新中でない操作対象データを優先して、前記移行先の情報処理装置に移行する、
付記４又は５に記載の情報処理装置。
【０２２６】
（付記７）
前記移行部は、前記操作対象データが更新中である場合、前記操作対象データの更新内容を含む差分データとともに、前記操作対象データを前記移行先の情報処理装置に移行する、
付記４から６のいずれか一項に記載の情報処理装置。
【０２２７】
（付記８）
移行元の情報処理装置と、前記移行元の情報処理装置からデータの移行を受け付ける移行先の情報処理装置とを有する情報処理システムにおいて、
前記移行先の情報処理装置は、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行する処理部と、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知する応答部と、を備える、
情報処理システム。
【０２２８】
（付記９）
前記移行元の情報処理装置は、前記処理依頼を受信してトランザクションが発生した場合、前記操作対象データが更新中であることを記録し、前記トランザクションが終了すると、前記記録を消去する記憶部、をさらに備える、
付記８に記載の情報処理システム。
【０２２９】
（付記１０）
前記クライアント装置は、前記処理の結果に基づいて、前記クライアント装置で保持しているデータの配置情報を更新する、
付記８又は９に記載の情報処理システム。
【０２３０】
（付記１１）
前記移行元の情報処理装置が、移行元の待機系情報処理装置と共にクラスタシステムを構築する場合に、前記移行先の情報処理装置は、前記データを受信すると、移行先の待機系情報処理装置との間で同期を取る、
付記８から１０のいずれか一項に記載の情報処理システム。
【０２３１】
（付記１２）
移行元の情報処理装置からデータの移行を受け付ける移行先の情報処理装置に、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行させ、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知させる、
ための制御プログラム。
【０２３２】
（付記１３）
移行元の情報処理装置に処理依頼を送信し、前記処理依頼の対象である操作対象データが前記移行元の情報処理装置から移行先の情報処理装置に移行され、前記移行元の情報処
理装置から前記処理依頼を受信した前記移行先の情報処理装置により前記操作対象データに対する処理が実行された場合に、前記操作対象データの配置情報を含む前記処理の結果を受信し、前記結果に基づいて前記操作対象データの配置情報を更新する処理制御部、
を備えるクライアント装置。
【符号の説明】
【０２３３】
１        情報処理システム
２        情報処理装置
２ａ      サーバ装置
２ｂ      クライアント装置
３        プロセッサ
４        主記憶装置
５        補助記憶装置
６        画像信号処理部
７        入力信号処理部
８        可搬記憶媒体駆動装置
９        通信インタフェース
１０      バス
２０ａ    サーバ制御部
２０ｂ    クライアント制御部
３０ａ、３０ｂ    通信制御部
４０ａ、４０ｂ    記憶部
４１ａ、４１ｂ    定義ファイル
５０ａ、５０ｂ    処理制御部
５１      処理部
５２      応答部
５３      移行部
５４      処理依頼送信部
６０      アプリケーションソフトウェア
【図１】
0006439475.tif 000002
【図２】
0006439475.tif 000003
【図３】
0006439475.tif 000004
【図４】
0006439475.tif 000005
【図５】
0006439475.tif 000006
【図６】
0006439475.tif 000007
【図７】
0006439475.tif 000008
【図８】
0006439475.tif 000009
【図９Ａ】
0006439475.tif 000010
【図９Ｂ】
0006439475.tif 000011
【図９Ｃ】
0006439475.tif 000012
【図１０】
0006439475.tif 000013
【図１１】
0006439475.tif 000014
【図１２】
0006439475.tif 000015
【図１３】
0006439475.tif 000016
【図１４】
0006439475.tif 000017
【図１５】
0006439475.tif 000018
【図１６】
0006439475.tif 000019
【図１７】
0006439475.tif 000020
【図１８】
0006439475.tif 000021
【図１９】
0006439475.tif 000022
【図２０】
0006439475.tif 000023
【図２１】
0006439475.tif 000024
【図２２】
0006439475.tif 000025
【図２３】
0006439475.tif 000026
【図２４】
0006439475.tif 000027
【図２５】
0006439475.tif 000028
【図２６】
0006439475.tif 000029
【図２７】
0006439475.tif 000030
【図２８】
0006439475.tif 000031
【図２９】
0006439475.tif 000032
【図３０】
0006439475.tif 000033
【図３１】
0006439475.tif 000034
【図３２】
0006439475.tif 000035
【図３３】
0006439475.tif 000036
【図３４】
0006439475.tif 000037
【図３５】
0006439475.tif 000038
【図３６Ａ】
0006439475.tif 000039
【図３６Ｂ】
0006439475.tif 000040
【図３７Ａ】
0006439475.tif 000041
【図３７Ｂ】
0006439475.tif 000042
【図３８Ａ】
0006439475.tif 000043
【図３８Ｂ】
0006439475.tif 000044
【図３９】
0006439475.tif 000045