(57)【要約】【課題】実行結果の同期に要する時間を短縮できる情報処理システムを提供する。【解決手段】情報処理システムは、複数のノードでトリガ処理の実行結果を同期する情報処理システムであって、複数のノードの各々は、アプリが登録したトリガ処理を受け付け、受け付けたトリガ処理の内容に基づいて、複数のノードの中からトリガ処理を実行するいずれかのノードを選択する、処理を行う処理部を有する。特に、処理部は、選択したいずれかのノードにトリガ処理を送信することを特徴とする。【選択図】図３
2018151947.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードでトリガ処理の実行結果を同期する情報処理システムであって、
前記複数のノードの各々は、
アプリが登録した前記トリガ処理を受け付け、
受け付けた前記トリガ処理の内容に基づいて、前記複数のノードの中から前記トリガ処理を実行するいずれかのノードを選択する、
処理を行う処理部を有する情報処理システム。
【請求項２】
前記処理部は、選択した前記いずれかのノードに前記トリガ処理を送信する、
ことを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記処理部は、さらに、前記いずれかのノードの処理状況を表すノード状況情報に基づいて、前記いずれかのノードを選択する、
ことを特徴とする請求項１又は２に記載の情報処理システム。
【請求項４】
前記ノード状況情報は、前記トリガ処理に要する処理時間予測とＣＰＵの性能とＣＰＵの負荷とに基づいて算出した時間である、
ことを特徴とする請求項３に記載の情報処理システム。
【請求項５】
前記処理部は、前記時間が所定の閾値時間以下の前記トリガ処理を実行し、実行結果を前記いずれかのノードと同期しない記憶部に格納する、
請求項４に記載の情報処理システム。
【請求項６】
前記処理部は、さらに、前記実行結果の同期に要する転送量を表す転送量情報に基づいて、前記いずれかのノードを選択する、
ことを特徴とする請求項１から５のいずれか１項に記載の情報処理システム。
【請求項７】
前記転送量情報は、前記実行結果の前記複数のノード間の同期に要する通信量予測と回線速度と通信負荷とに基づいて算出した時間である、
ことを特徴とする請求項６に記載の情報処理システム。
【請求項８】
前記処理部は、前記トリガ処理が更新するキーの更新頻度に応じて、前記トリガ処理の実行を抑制する、
ことを特徴とする請求項１から７のいずれか１項に記載の情報処理システム。
【請求項９】
前記トリガ処理は、データベーストリガ及びストアドプロシージャである、
ことを特徴とする請求項１から８のいずれか１項に記載の情報処理システム。
【請求項１０】
複数のコンピュータでトリガ処理の実行結果を同期する情報処理方法であって、
前記複数のコンピュータの各々が、
アプリが登録した前記トリガ処理を受け付け、
受け付けた前記トリガ処理の内容に基づいて、前記複数のコンピュータの中から前記トリガ処理を実行するいずれかのコンピュータを選択する、
処理を実行する情報処理方法。
【請求項１１】
少なくとも１つの情報処理装置とトリガ処理の実行結果を同期する情報処理装置であって、
アプリが登録した前記トリガ処理を受け付け、
受け付けた前記トリガ処理の内容に基づいて、前記少なくとも１つの情報処理装置の中から前記トリガ処理を実行するいずれかの情報処理装置を選択する、
処理を行う処理部を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、情報処理システム、情報処理方法、及び情報処理装置に関する。
【背景技術】
【０００２】
複数のノード間でデータを同期するシステムが知られている（例えば特許文献１参照）。また、複数のノード間でファイルを分散共有するシステムも知られている（例えば特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２９９２７８号公報
【特許文献２】特開２００８−３０４９８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、Database（ＤＢ）サーバ内でデータ処理を実行するデータベーストリガやストアドプロシージャ（以下、併せてトリガ処理という）相当を上述したシステムで実現する場合、上述した複数のノード（以下、手元ノードという）とは異なる固定ノードをシステムに別途に配備し、その固定ノードでトリガ処理を実行することが想定される。
【０００５】
この場合、手元ノードのいずれかの画面上で特定の操作（例えばドラッグ操作）が行われると、操作が行われた手元ノードはその操作の対象と内容を固定ノードに通知し、固定ノードはその操作に対するトリガ処理を実行する。そして、固定ノードがトリガ処理の実行を終えると、固定ノードは実行結果を複数の手元ノードのそれぞれに転送する。これにより、複数の手元ノードで実行結果が反映され、実行結果が同期する。
【０００６】
しかしながら、上述したように操作が行われてから実行結果が同期するまでに実行結果の転送が入るため、実行結果が複数の手元ノードで同期するまでに時間がかかるという問題点がある。また、固定ノードには複数の手元ノードからの通知が集中するため負荷がかかり、実行結果が複数の手元ノードで同期するまで時間がかかるという問題点もある。
【０００７】
そこで、１つの側面では、実行結果の同期に要する時間を短縮できる情報処理システム、情報処理方法、及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの実施態様では、情報処理システムは、複数のノードでトリガ処理の実行結果を同期する情報処理システムであって、前記複数のノードの各々は、アプリが登録した前記トリガ処理を受け付け、受け付けた前記トリガ処理の内容に基づいて、前記複数のノードの中から前記トリガ処理を実行するいずれかのノードを選択する、処理を行う処理部を有する。
【発明の効果】
【０００９】
実行結果の同期に要する時間を短縮することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は情報処理システムの一例を説明するための図である。
【図２】図２はノードのハードウェア構成の一例である。
【図３】図３は第１実施形態に係るノードのブロック図の一例である。
【図４】図４は第１実施形態に係るトリガ処理記憶部の一例である。
【図５】図５は第１データ記憶部の一例である。
【図６】図６は配布責任記憶部の一例である。
【図７】図７は第１実施形態に係るノードの処理シーケンス（その１）の一例である。
【図８】図８は実行ノード選択処理の一例を示すフローチャートである。
【図９】図９は第１実施形態に係るノードの処理シーケンス（その２）の一例である。
【図１０】図１０は第１実施形態に係るノードの処理シーケンス（その３）の一例である。
【図１１】図１１は第２実施形態に係るノードのブロック図の一例である。
【図１２】図１２は第２実施形態に係るトリガ処理記憶部の一例である。
【図１３】図１３は第２実施形態に係るノード状況記憶部の一例である。
【図１４】図１４は第２実施形態に係るノードの処理シーケンス（その１）の一例である。
【図１５】図１５は第２実施形態に係るノードの処理シーケンス（その２）の一例である。
【図１６】図１６は第２実施形態に係る条件Ｃ２を表すフローチャートである。
【図１７】図１７は第２実施形態に係る条件Ｃ３を表すフローチャートである。
【図１８】図１８は第２実施形態に係るノード状況同期部の動作の一例を示すフローチャートである。
【図１９】図１９は第３実施形態に係るトリガ処理記憶部の一例である。
【図２０】図２０は第３実施形態に係るノード状況記憶部の一例である。
【図２１】図２１は第３実施形態に係る条件Ｃ２を表すフローチャートである。
【図２２】図２２は第３実施形態に係るノード状況同期部の動作の一例を示すフローチャートである。
【図２３】図２３は第４実施形態に係るノードのブロック図の一例である。
【図２４】図２４は第４実施形態に係るトリガ処理記憶部の一例である。
【図２５】図２５は更新頻度記憶部の一例である。
【図２６】図２６は第４実施形態に係るノードの処理シーケンスの一例である。
【図２７】図２７は第４実施形態に係る条件Ｃ４を表すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本件を実施するための形態について図面を参照して説明する。
【００１２】
（第１実施形態）
図１は情報処理システムＳの一例を説明するための図である。情報処理システムＳはEventual Consistency（結果整合性）を実現するコンピュータシステムである。情報処理システムＳはそれぞれ情報処理装置としての複数のノード１００，２００，３００を含んでいる。特に、ノード３００は表示装置３１０と表示装置３１０を制御する制御装置３２０を含んでいる。
【００１３】
ノード１００，２００，３００は無線基地局（例えばアクセスポイント）ＡＰを含む通信ネットワークＮＷを介して互いに接続されている。図１に示すように、通信ネットワークＮＷは無線ネットワークＮＷ１及び有線ネットワークＮＷ２を含んでいる。このため、ノード１００，２００，３００は互いに無線や有線を利用して通信することができる。したがって、例えばノード１００，２００，３００のそれぞれの画面上に表示されたドキュメントや設計図をノード１００，２００，３００のいずれかから操作により編集する場合、その操作の対象と編集内容をノード１００，２００，３００の他のいずれかに転送し合うことによりその対象に対する編集内容が反映される。すなわち、情報処理システムＳにより共同編集することができる。尚、ノード１００，２００間では無線基地局ＡＰを介さないアドホックネットワークが利用されていてもよい。
【００１４】
ここで、ノード１００，２００，３００としては例えば端末装置やスマートデバイスなどがある。端末装置としては、例えば携帯型（モバイルタイプ）のPersonal Computer（ＰＣ）や据置型（デスクトップタイプ）のＰＣなどがある。スマートデバイスとしては、例えばスマートフォン、スマートウォッチ、タブレット端末、ウェアラブルコンピュータなどがある。尚、ノード１００，２００，３００は端末装置やスマートデバイスに限定されず、表示機能及び通信機能を備えていれば、例えばスマートテレビ、電子レンジ、ヘルスケア用品といった家庭用の電気機器のほか、デジタルカメラや携帯ゲーム機などであってもよい。
【００１５】
次に、図２を参照して、ノード１００のハードウェア構成について説明する。尚、上述したノード２００，３００については基本的にノード１００と同様のハードウェア構成であるため説明を省略する。
【００１６】
図２はノード１００のハードウェア構成の一例である。図２に示すように、ノード１００は、少なくともCentral Processing Unit（ＣＰＵ）１００Ａ、Random Access Memory（ＲＡＭ）１００Ｂ、Read Only Memory（ＲＯＭ）１００Ｃ、ネットワークＩ／Ｆ（インタフェース）１００Ｄ、及び通信回路１００Ｋを含んでいる。通信回路１００Ｋにはアンテナ１００Ｋ´が接続されている。通信回路１００Ｋに代えて通信機能を実現するＣＰＵが利用されてもよい。ノード１００は、通信回路１００Ｋ及びアンテナ１００Ｋ´を介してノード２００，３００と接続される。
【００１７】
また、ノード１００は、入力部１００Ｆ及び表示部１００Ｇも含んでいる。入力部１００Ｆとしては、例えばキーボード、ポインティングデバイス、タッチパネルなどがある。表示部１００Ｇとしては、例えば液晶ディスプレイがある。さらに、ノード１００は、必要に応じて、Hard Disk Drive（ＨＤＤ）１００Ｅ、入出力Ｉ／Ｆ１００Ｈ、ドライブ装置１００Ｉの少なくとも１つを含んでいてもよい。ＣＰＵ１００Ａからドライブ装置１００Ｉ及び通信回路１００Ｋは、内部バス１００Ｊによって互いに接続されている。少なくともＣＰＵ１００ＡとＲＡＭ１００Ｂとが協働することによってコンピュータが実現される。
【００１８】
入出力Ｉ／Ｆ１００Ｈには、半導体メモリ７３０が接続される。半導体メモリ７３０としては、例えばUniversal Serial Bus（ＵＳＢ）メモリやフラッシュメモリなどがある。入出力Ｉ／Ｆ１００Ｈは、半導体メモリ７３０に記憶されたプログラムやデータを読み取る。入出力Ｉ／Ｆ１００Ｈは、例えばＵＳＢポートを備えている。
【００１９】
ドライブ装置１００Ｉには、可搬型記録媒体７４０が挿入される。可搬型記録媒体７４０としては、例えばCompact Disc（ＣＤ）−ＲＯＭ、Digital Versatile Disc（ＤＶＤ）といったリムーバブルディスクがある。ドライブ装置１００Ｉは、可搬型記録媒体７４０に記録されたプログラムやデータを読み込む。
ネットワークＩ／Ｆ１００Ｄは、例えばLocal Area Network（ＬＡＮ）ポートを備えている。
【００２０】
上述したＲＡＭ１００Ｂには、ＨＤＤ１００Ｅに記憶されたプログラムがＣＰＵ１００Ａによって格納される。ＲＡＭ１００Ｂには、可搬型記録媒体７４０に記録されたプログラムがＣＰＵ１００Ａによって格納される。格納されたプログラムをＣＰＵ１００Ａが実行することにより、後述する各種の機能が実現され、また、後述する各種の動作が実行される。尚、プログラムは後述するフローチャートに応じたものとすればよい。
【００２１】
次に、図３を参照して、ノード１００が備える機能について説明する。尚、上述したノード２００，３００については基本的にノード１００と同様の機能を備えるため説明を省略する。
【００２２】
図３は第１実施形態に係るノード１００のブロック図の一例である。図４は第１実施形態に係るトリガ処理記憶部１２３の一例である。図５は第１データ記憶部１２５の一例である。図６は配布責任記憶部１２６の一例である。図３に示すように、ノード１００はＨＴＭＬアプリ１１０、及びDistributed Shared Memory（ＤＳＭ：分散共有メモリ）１２０を備えている。
【００２３】
ＨＴＭＬアプリ１１０は、ノード１００で動作する分散アプリケーションである。分散アプリケーションは例えばHyper Text Markup Language（ＨＴＭＬ）といった特定のマークアップ言語で記述されている。分散アプリケーションとしては例えば画面共有アプリなどがある。
【００２４】
ＤＳＭ１２０はＨＴＭＬアプリ１１０に対する操作が行われると、その操作の対象と内容をノード２００，３００が備えるＤＳＭ（不図示）と通知するミドルウェアである。例えば、ユーザがノード１００の画面上に表示された付箋を表す画像に対してドラッグ操作を行うと、ドラッグ操作によって変化する画像の位置を更新し、ドラッグ操作の対象となる画像を識別する情報と画像の位置の更新とをノード２００，３００のＤＳＭに通知する。
【００２５】
ＤＳＭ１２０は、図３に示すように、トリガ処理受付部１２１、トリガ処理同期部１２２、トリガ処理記憶部１２３、及びトリガ処理実行部１２４を含んでいる。また、ＤＳＭ１２０は、第１データ記憶部１２５、配布責任記憶部１２６、同期制御部１２７を含んでいる。特に、トリガ処理同期部１２２は実行ノード選択部１２２Ａを含んでいる。
【００２６】
トリガ処理受付部１２１はＨＴＭＬアプリ１１０が登録したトリガ処理を受け付ける。トリガ処理としては、例えば、ＨＴＭＬアプリ１１０が操作対象を識別する特定のキー（例えば付箋の画像を識別する情報）のバリュー（例えば画像の位置）を更新すると、その特定のキーのバリューの更新に基づいて特定のキーと異なる別のキーのバリューを更新する処理などがある。トリガ処理受付部１２１はトリガ処理を受け付けると、トリガ処理をトリガ処理同期部１２２に出力する。
【００２７】
トリガ処理同期部１２２はノード１００，２００，３００間のトリガ処理を同期する。詳細は後述するが、トリガ処理同期部１２２はトリガ処理受付部１２１から出力されたトリガ処理を受け付けてトリガ処理記憶部１２３に格納する。これにより、トリガ処理記憶部１２３はトリガ処理を記憶する。また、トリガ処理同期部１２２はノード２００，３００にトリガ処理を送信する。
【００２８】
ここで、トリガ処理記憶部１２３は、図４に示すように、トリガ処理同期部１２２が格納したトリガ処理をトリガ処理テーブルＴ１により管理する。トリガ処理テーブルＴ１はトリガ処理、更新キーリスト、及び処理責任ノードを構成要素として含んでいる。トリガ処理テーブルＴ１におけるトリガ処理はトリガ処理の内容を表している。更新キーリストはトリガ処理が更新するキーの一覧を表している。処理責任ノードはトリガ処理を実行する責任を負うノードの識別情報を表している。
【００２９】
また、トリガ処理同期部１２２は実行ノード選択部１２２Ａを含んでいる。実行ノード選択部１２２Ａはトリガ処理同期部１２２が受け付けたトリガ処理の内容に基づいて、ノード１００，２００，３００の中からトリガ処理を実行するノード１００，２００，３００のいずれかを実行ノードとして選択する。例えば、実行ノード選択部１２２Ａはトリガ処理が更新するキーに基づいて、トリガ処理が更新するキー（より詳しくはキーを含むデータ）の配布責任を有するノード１００，２００，３００の一又は複数を、トリガ処理を実行する実行ノードとして決定する。
【００３０】
トリガ処理実行部１２４はトリガ処理記憶部１２３が記憶するトリガ処理を抽出し、抽出したトリガ処理を実行する。例えば、トリガ処理実行部１２４はキー「ｘ」を更新するトリガ処理「ＴＲ１」を抽出し、抽出したトリガ処理「ＴＲ１」を実行する。これにより、キー「ｘ」のバリューが更新され、更新されたバリューがキー「ｘ」の実行結果としてキー「ｘ」と併せて第１データ記憶部１２５に格納される。
【００３１】
ここで、第１データ記憶部１２５は、図５に示すように、Key（キー）とValue（バリュー：値）をデータとしてデータテーブルＴ２により管理する。キーは操作対象や操作対象に対する処理内容を識別する識別情報である。例えば、ＨＴＭＬアプリ１１０がキー「ｙ」のバリュー「Ｖ２」を更新すると、トリガ処理実行部１２４はバリュー「Ｖ２」の更新に基づいて別のキー「ｘ」のバリュー「Ｖ１」を更新するトリガ処理を実行し、更新されたバリュー（例えばバリュー「Ｖ１´」）を実行結果としてキー「ｘ」と併せて第１データ記憶部１２５に格納する。
【００３２】
配布責任記憶部１２６は、図６に示すように、配布責任ノード情報を配布責任テーブルＴ３により管理する。配布責任ノード情報はキー及び配布責任ノードを構成要素として含んでいる。配布責任ノードはトリガ処理やＨＴＭＬアプリが更新するキーの配布に責任を負うノードの識別情報を表している。
同期制御部１２７は第１データ記憶部１２５が記憶するキーの更新をノード２００，３００に配信したり、ノード２００やノード３００から配信されたキーの更新を受信して第１データ記憶部１２５に格納したりする。
【００３３】
続いて、図７から図１３を参照して、第１実施形態に係るノード１００の動作について説明する。尚、ノード２００，３００もノード１００の動作と同様であるため、説明を省略する。
【００３４】
図７は第１実施形態に係るノード１００，２００，３００の処理シーケンス（その１）の一例である。より詳しくは、図７はＨＴＭＬアプリ１１０がトリガ処理を登録した際に実行される処理シーケンスの一例を表している。
【００３５】
まず、ＨＴＭＬアプリ１１０がトリガ処理を登録すると、トリガ処理受付部１２１はトリガ処理を受け付ける（ステップＳ１０１）。ステップＳ１０１の処理が完了すると、トリガ処理同期部１２２はトリガ処理をトリガ処理記憶部１２３に格納する（ステップＳ１０２）。より詳しくは、トリガ処理受付部１２１は受け付けたトリガ処理をトリガ処理同期部１２２に出力し、トリガ処理同期部１２２はトリガ処理受付部１２１から出力されたトリガ処理をトリガ処理記憶部１２３に格納する。
【００３６】
ステップＳ１０２の処理が完了すると、次いで、トリガ処理同期部１２２は情報処理システムＳに参加する全ノード（第１実施形態ではノード２００，３００）に対してトリガ処理を送信する（ステップＳ１０３）。これにより、ノード２００及びノード３００がそれぞれ備えるトリガ処理同期部（不図示）はトリガ処理同期部１２２から送信されたトリガ処理を受信する（ステップＳ２０１，Ｓ３０１）。ノード２００，３００のトリガ処理同期部はトリガ処理を受信すると、自身が備えるトリガ処理記憶部（不図示）にトリガ処理を格納する（ステップＳ２０２，Ｓ３０２）。これにより、ノード１００，２００，３００間でトリガ処理が同期する。
【００３７】
ステップＳ１０３の処理が完了すると、次いで、実行ノード選択部１２２Ａは実行ノード選択処理を実行する（ステップＳ１０４）。実行ノード選択処理はトリガ処理の内容によって実行ノードを選択する処理である。尚、実行ノード選択処理の詳細については後述する。
【００３８】
ステップＳ１０４の処理が完了すると、トリガ処理同期部１２２は実行ノード選択部１２２Ａが選択した実行ノードに対して処理責任ノードとなることを送信する（ステップＳ１０５）。例えば実行ノード選択部１２２Ａが実行ノードとしてノード２００を選択した場合、トリガ処理同期部１２２はノード２００に対して処理責任ノードとなることを送信する。これにより、ノード２００のトリガ処理同期部（不図示）は処理責任ノードとなることを受信し（ステップＳ２０３）、自ノードの識別情報を自身のトリガ処理記憶部に格納する（ステップＳ２０４）。より詳しくは、ノード２００のトリガ処理同期部はステップＳ２０１の処理で受信したトリガ処理の処理責任ノードに自ノードの識別情報を格納する。このように、トリガ処理の実行に責任を負うノードが決定される。尚、実行ノード選択部１２２Ａが実行ノードとしてノード３００を選択した場合もノード２００の場合と同様である。一方、実行ノード選択部１２２Ａが実行ノードとしてノード１００を選択した場合、トリガ処理同期部１２２はトリガ処理記憶部１２３が記憶するトリガ処理の処理責任ノードに自身のノードを識別する識別情報を格納する。
【００３９】
続いて、図８を参照して、上述した実行ノード選択処理を説明する。
【００４０】
図８は実行ノード選択処理の一例を示すフローチャートである。実行ノード選択部１２２Ａは実行ノード選択処理を開始すると、まず、対象のトリガ処理が更新する更新キーのリストを取得する（ステップＳ１０４−１）。より詳しくは、実行ノード選択部１２２Ａはトリガ処理記憶部１２３にアクセスし、トリガ処理記憶部１２３から対象のトリガ処理が更新する更新キーのリストを取得する。
【００４１】
ステップＳ１０４−１の処理が完了すると、次いで、実行ノード選択部１２２Ａはリスト内の最初の更新キーに対する配布責任ノードを取得する（ステップＳ１０４−２）。より詳しくは、実行ノード選択部１２２Ａはリスト内の最初の更新キーを特定し、特定したキーに対する配布責任ノードを配布責任記憶部１２６から取得する。ステップＳ１０４−２の処理が完了すると、実行ノード選択部１２２Ａは取得した配布責任ノードを実行ノードと決定する（ステップＳ１０４−３）。
【００４２】
ここで、実行ノード選択処理がない場合のデメリットと実行ノード選択処理がある場合のメリットを簡単に説明する。例えばノード１００とノード２００の両方が同じタイミングで特定の同じキーを更新するトリガ処理を実行すると、ノード３００ではノード１００が実行したトリガ処理とノード２００が実行したトリガ処理のそれぞれに基づいて特定のキーの更新が行われ、更新が競合するおそれがある。しかしながら、実行ノード選択処理により、トリガ処理が対象とする特定のキーの更新は、トリガ処理が更新するキーの配布責任を有するノードで行われるため、更新の競合発生頻度を抑えることができる。
【００４３】
図９は第１実施形態に係るノード１００，２００，３００の処理シーケンス（その２）の一例である。より詳しくは、図９は配布責任が変化した際に実行される処理シーケンスの一例を表している。
【００４４】
例えばノード２００がトリガ処理の対象である特定のキーの配布責任を保持している状態で、ノード１００のＨＴＭＬアプリ１１０がその特定のキーと同じキーを更新すると、ノード１００の同期制御部１２７はそのキーの配布責任を取得する（ステップＳ１１１）。具体的には、同期制御部１２７は配布責任記憶部１２６にアクセスし、配布責任ノード情報におけるそのキーの配布責任ノードを自ノードに更新する。
【００４５】
ステップＳ１１１の処理が完了すると、同期制御部１２７はキーの更新をノード２００，３００に送信する（ステップＳ１１２）。これにより、ノード２００，３００の同期制御部（不図示）はキーの更新を受信する（ステップＳ２１１，Ｓ３１１）。ノード２００，３００の同期制御部はキーの更新を受信することにより、そのキーの配布責任をノード１００が取得したと判断することができる。
【００４６】
ステップＳ２１１，Ｓ３１１の処理が完了すると、次いで、ノード２００，３００の実行ノード選択部（不図示）は条件Ｃ１を満足するか否かを判断する（ステップＳ２１２，Ｓ３１２）。より詳しくは、ノード２００，３００の各実行ノード選択部はそのキーを変更するトリガ処理を記憶しているか否か、及びそのキーの処理責任ノードが自ノードであるか否かを判断する。
【００４７】
例えば、ノード２００の実行ノード選択部は条件Ｃ１を満足すると判断した場合（ステップＳ２１２：ＹＥＳ）、実行ノード選択部は実行ノード選択処理を実行する（ステップＳ２１３）。ノード２００の実行ノード選択部が仮に実行ノードとしてノード１００を選択した場合、ノード２００のトリガ処理同期部はノード１００に対して処理責任ノードとなることを送信する（ステップＳ２１４）。ステップＳ２１４の処理が完了すると、ノード２００のトリガ処理同期部はトリガ処理記憶部の処理責任ノードを更新する（ステップＳ２１５）。したがって、実行ノードとしてノード１００が選択された場合、ノード１００を識別する識別情報が該当キーの処理責任ノードに格納される。一方、ノード３００の実行ノード選択部は条件Ｃ１を満足しないと判断した場合（ステップＳ３１２：ＮＯ）、上述したステップＳ２１３からＳ２１５に相当する処理をスキップする。
【００４８】
ノード１００のトリガ処理同期部１２２はノード２００から処理責任ノードとなることを受信すると（ステップＳ１１３）、自ノードの識別情報を自身のトリガ処理記憶部１２３に格納する（ステップＳ１１４）。より詳しくは、トリガ処理同期部１２２はトリガ処理記憶部１２３の処理責任ノードに自ノードの識別情報を格納する。これにより、該当のキーのトリガ処理の処理責任ノードが配布責任の変化に伴いノード２００からノード１００に移行する。
【００４９】
図１０は第１実施形態に係るノード１００，２００，３００の処理シーケンス（その３）の一例である。より詳しくは、図１０はトリガ処理を実行する際の処理シーケンスの一例を表している。
【００５０】
まず、ノード１００のＨＴＭＬアプリ１１０がトリガ処理の対象であるキーを更新すると（ステップＳ１２１）、同期制御部１２７はキーの更新をノード２００，３００に送信する（ステップＳ１２２）。これにより、ノード２００，３００の各同期制御部はそれぞれキーの更新を受信する（ステップＳ２２０，Ｓ３２０）。受信後、ノード２００，３００の各同期制御部はそれぞれ自身の第１データ記憶部にキーの更新を格納する。
【００５１】
ステップＳ１２２の処理が完了すると、実行ノード選択部１２２Ａは上述した条件Ｃ１を満足するか否かを判断する（ステップＳ１２３）。また、ノード２００，３００の各実行ノード選択部も上述した条件Ｃ１を満足するか否かを判断する（ステップＳ２２１，Ｓ３２１）。
【００５２】
例えば、ノード２００の実行ノード選択部が条件Ｃ１を満足すると判断した場合（ステップＳ２２１：ＹＥＳ）、ノード２００のトリガ処理実行部（不図示）はトリガ処理を実行する（ステップＳ２２２）。ステップＳ２２２の処理が完了すると、ノード２００のトリガ処理実行部は実行結果を自身の第１データ記憶部に格納する（ステップＳ２２３）。ステップＳ２２３の処理が完了すると、ノード２００の同期制御部はキーの更新をノード１００，３００に送信する（ステップＳ２２４）。これにより、ノード１００の同期制御部１２７及びノード３００の同期制御部はそれぞれノード２００から送信されたキーの更新を受信する（ステップＳ１２４，Ｓ３２２）。受信後、ノード１００の同期制御部１２７はキーの更新に応じた実行結果を第１データ記憶部１２５に格納する。同様に、ノード３００の同期制御部はキーの更新に応じた実行結果を自身の第１データ記憶部に格納する。
【００５３】
尚、ノード１００の実行ノード選択部１２２Ａが条件Ｃ１を満足しないと判断した場合（ステップＳ１２３：ＮＯ）、ノード１００のトリガ処理実行部１２４及び同期制御部１２７は上述したステップＳ２２２からＳ２２４に相当する処理を実行しない。同様に、ノード３００の実行ノード選択部が条件Ｃ１を満足しないと判断した場合（ステップＳ３２１：ＮＯ）、ノード３００のトリガ処理実行部及び同期制御部は上述したステップＳ２２２からＳ２２４に相当する処理を実行しない。
【００５４】
このように、第１実施形態によれば、例えば、ＤＳＭ１２０は、ＨＴＭＬアプリ１１０が登録したトリガ処理を受け付け、受け付けたトリガ処理の内容に基づいて、複数のノード１００，２００，３００の中からトリガ処理を実行するノード１００，２００，３００のいずれかを選択する。これにより、ＨＴＭＬアプリ１１０が登録したトリガ処理が、固定ノードではなく、選択されたノード１００，２００，３００のいずれかで実行されるため、実行結果の同期に要する時間を短縮することができる。
【００５５】
（第２実施形態）
続いて、図１１から図１８を参照して、本件の第２実施形態について説明する。
図１１は第２実施形態に係るノード１００のブロック図の一例である。図１２は第２実施形態に係るトリガ処理記憶部１２３の一例である。図１３は第２実施形態に係るノード状況記憶部１２８の一例である。尚、第２実施形態に係るノード１００において、図３に示すノード１００の各部と同様の構成には同一符号を付し、その説明を省略する。
【００５６】
第２実施形態に係るノード１００のＤＳＭ１２０は、ノード状況記憶部１２８及び第２データ記憶部１２９を備える点で第１実施形態に係るノード１００のＤＳＭ１２０と相違する。また、トリガ処理同期部１２２がノード状況同期部１２２Ｂを備える点で第１実施形態に係るトリガ処理同期部１２２と相違する。さらに、図１２に示すように、トリガ処理テーブルＴ１が処理時間予測を構成要素として含む点で第１実施形態に係るトリガ処理テーブルＴ１と相違する。処理時間予測はトリガ処理に要する時間の予測を表している。第２実施形態は、ノード１００，２００，３００の状況（例えばＣＰＵの性能やＣＰＵの負荷など）に基づいて実行ノードが選択される点で上述した第１実施形態と相違する。
【００５７】
ノード状況記憶部１２８はノード状況情報を記憶する。より詳しくは、図１３に示すように、ノード状況記憶部１２８はノード状況情報をノード状況テーブルＴ４により管理する。ノード状況情報はノード、ＣＰＵ性能、及びＣＰＵ負荷を構成要素として含んでいる。ノードはそのノードを識別する情報を表している。ＣＰＵ性能及びＣＰＵ負荷は、そのノードが備えるＣＰＵの性能及び負荷を表している。尚、ＣＰＵの性能は性能を特定可能な数値（例えば最大周波数など）によって表されており、数値が高いほど、ＣＰＵの性能が高いことを表している。
【００５８】
第２データ記憶部１２９は第１実施形態で説明したデータを記憶する。ただし、第２データ記憶部１２９が記憶するデータはノード２００，３００と同期しない。第２データ記憶部１２９の詳細については後述する。
【００５９】
ノード状況同期部１２２Ｂはトリガ処理に含まれる処理時間予測、ノード状況情報に含まれるＣＰＵ性能及びＣＰＵ負荷に基づいて、定期的に処理責任ノードを決定し、ノード２００，３００に送信する。尚、ノード状況同期部１２２Ｂの詳細については後述する。
【００６０】
続いて、図１４から図１８を参照して、第２実施形態に係るノード１００の動作について説明する。尚、ノード２００，３００もノード１００の動作と同様であるため、説明を省略する。
【００６１】
図１４は第２実施形態に係るノード１００，２００，３００の処理シーケンス（その１）の一例である。より詳しくは、図１４はＨＴＭＬアプリ１１０がトリガ処理を登録した際に実行される処理シーケンスの一例を表している。
【００６２】
まず、ＨＴＭＬアプリがトリガ処理を登録すると、トリガ処理受付部１２１はトリガ処理を受け付ける（ステップＳ１３１）。ステップＳ１３１の処理が完了すると、トリガ処理同期部１２２はトリガ処理受付部１２１が受け付けたトリガ処理をトリガ処理記憶部１２３に格納する（ステップＳ１３２）。
【００６３】
ステップＳ１３２の処理が完了すると、次いで、トリガ処理同期部１２２は情報処理システムＳに参加する全ノードに対してトリガ処理を送信する（ステップＳ１３３）。これにより、ノード２００及びノード３００がそれぞれ備えるトリガ処理同期部はトリガ処理同期部１２２から送信されたトリガ処理を受信する（ステップＳ２３１，Ｓ３３１）。ノード２００，３００のトリガ処理同期部はトリガ処理を受信すると、自身が備えるトリガ処理記憶部にトリガ処理を格納する（ステップＳ２３２，Ｓ３３２）。これにより、ノード１００，２００，３００間でトリガ処理が同期する。
【００６４】
図１５は第２実施形態に係るノード１００，２００，３００の処理シーケンス（その２）の一例である。より詳しくは、図１５はトリガ処理を実行する際の処理シーケンスの一例を表している。
【００６５】
まず、ノード１００のＨＴＭＬアプリ１１０がトリガ処理の対象であるキーを更新すると（ステップＳ１４１）、同期制御部１２７はキーの更新をノード２００，３００に送信する（ステップＳ１４２）。これにより、ノード２００，３００の各同期制御部はそれぞれキーの更新を受信する（ステップＳ２４０，Ｓ３４０）。受信後、ノード２００，３００の各同期制御部はそれぞれ自身の第１データ記憶部にキーの更新をデータとして格納する。
【００６６】
ステップＳ１４２の処理が完了すると、実行ノード選択部１２２Ａは後述する条件Ｃ２を満足するか否かを判断する（ステップＳ１４３）。同様に、ノード２００，３００の各実行ノード選択部も条件Ｃ２を満足するか否かを判断する（ステップＳ２４１，Ｓ３４１）。
【００６７】
例えば、ノード１００の実行ノード選択部１２２Ａが条件Ｃ２を満足すると判断した場合（ステップＳ１４３：ＹＥＳ）、トリガ処理実行部１２４はトリガ処理を実行する（ステップＳ１４４）。ステップＳ１４４の処理が完了すると、さらに、実行ノード選択部１２２Ａは後述する条件Ｃ３を満足するか否かを判断する（ステップＳ１４５）。
【００６８】
例えば、ノード１００の実行ノード選択部１２２Ａが条件Ｃ３を満足すると判断した場合（ステップＳ１４５：ＹＥＳ）、トリガ処理実行部１２４は第１データ記憶部１２５にトリガ処理の結果を格納する（ステップＳ１４６）。より詳しくは、トリガ処理実行部１２４は第１データ記憶部１２５にトリガ処理の実行結果をデータとして格納する。ステップＳ１４６の処理が完了すると、同期制御部１２７はキーの更新をノード２００，３００に送信する（ステップＳ１４７）。
【００６９】
一方、例えば、ノード３００の実行ノード選択部が条件Ｃ２を満足すると判断した場合（ステップＳ３４１：ＹＥＳ）、ノード３００のトリガ処理実行部はトリガ処理を実行する（ステップＳ３４２）。ステップ３４２の処理が完了すると、さらに、ノード３００の実行ノード選択部は後述する条件Ｃ３を満足するか否かを判断する（ステップＳ３４３）。
【００７０】
例えば、ノード３００の実行ノード選択部が条件Ｃ３を満足しないと判断した場合（ステップＳ３４３：ＮＯ）、ノード３００のトリガ処理実行部は自身の第２データ記憶部にトリガ処理の結果を格納する（ステップＳ３４４）。より詳しくは、ノード３００のトリガ処理実行部は第２データ記憶部にトリガ処理の実行結果をデータとして格納する。ステップＳ３４４の処理が完了すると、ノード３００の同期制御部はキーの更新をノード１００から受信する（ステップＳ３４５）。尚、ノード２００の実行ノード選択部が条件Ｃ２を満足しないと判断した場合（ステップＳ２４１：ＮＯ）、ノード２００の同期制御部はキーの更新をノード１００から受信する（ステップＳ２４２）。
【００７１】
続いて、図１６を参照して、上述した条件Ｃ２について説明する。
【００７２】
図１６は第２実施形態に係る条件Ｃ２を表すフローチャートである。尚、条件Ｃ２はノード１００，２００，３００で同じであるため、一例として、ノード１００について説明する。例えば同期制御部１２７が図１５を参照して説明したステップＳ１４２の処理を終えると、図１６に示すように、実行ノード選択部１２２Ａは対象のトリガ処理の処理時間予測を取得する（ステップＳ１４３−１）。より詳しくは、実行ノード選択部１２２Ａはトリガ処理記憶部１２３にアクセスし、対象のトリガ処理の処理時間予測を取得する。
【００７３】
ステップＳ１４３−１の処理が完了すると、次いで、実行ノード選択部１２２Ａは自ノードの実行時間予測Ｔ１を算出する（ステップＳ１４３−２）。自ノードの実行時間予測Ｔ１は以下の数式により算出される。
自ノードの実行時間予測Ｔ１
＝処理時間予測×（係数ａ×ＣＰＵ負荷）／（係数ｂ×ＣＰＵ性能）
【００７４】
ステップＳ１４３−２の処理が完了すると、次いで、実行ノード選択部１２２Ａは自ノードの実行時間予測Ｔ１がしきい値以下か否かを判断する（ステップＳ１４３−３）。実行ノード選択部１２２Ａは自ノードの実行時間予測Ｔ１がしきい値以下であると判断すると（ステップＳ１４３−３：ＹＥＳ）、自ノードを実行ノードと決定し、条件Ｃ２を満足すると判断する。一方、実行ノード選択部１２２Ａは自ノードの実行時間予測Ｔ１がしきい値より大きいと判断すると（ステップＳ１４３−３：ＮＯ）、他ノードを実行ノードと決定し、条件Ｃ２を満足しないと判断する。
【００７５】
続いて、図１７を参照して、上述した条件Ｃ３について説明する。
【００７６】
図１７は第２実施形態に係る条件Ｃ３を表すフローチャートである。尚、条件Ｃ３はノード１００，２００，３００で同じであるため、一例として、ノード１００について説明する。例えばトリガ処理実行部１２４が図１５を参照して説明したステップＳ１４４の処理を終えると、図１７に示すように、実行ノード選択部１２２Ａは対象のトリガ処理の処理責任ノードを取得する（ステップＳ１４５−１）。より詳しくは、実行ノード選択部１２２Ａはトリガ処理記憶部１２３にアクセスし、対象のトリガ処理の処理責任ノードを取得する。
【００７７】
ステップＳ１４５−１の処理が完了すると、次いで、実行ノード選択部１２２Ａは処理責任ノードが自ノードであるか否かを判断する（ステップＳ１４５−２）。実行ノード選択部１２２Ａは処理責任ノードが自ノードであると判断すると（ステップＳ１４５−２：ＹＥＳ）、条件Ｃ３を満足すると判断する。実行ノード選択部１２２Ａは処理責任ノードが自ノードでないと判断すると（ステップＳ１４５−２：ＮＯ）、条件Ｃ３を満足しないと判断する。これにより、トリガ処理実行部１２４は、図１５に示すように、ステップＳ１４６´の処理を実行する。
【００７８】
続いて、図１８を参照して、ノード状況同期部１２２Ｂの動作について説明する。
【００７９】
図１８は第２実施形態に係るノード状況同期部１２２Ｂの動作の一例を示すフローチャートである。尚、ノード２００，３００がそれぞれ備えるノード状況同期部の動作についてもノード状況同期部１２２Ｂと同様の動作であるため、その説明を省略する。ノード状況同期部１２２Ｂはノード１００で定期的に実行される。したがって、トリガ処理の処理責任ノードはノード１００，２００，３００のＣＰＵ性能及びＣＰＵ負荷などの状況に基づいて、ノード１００，２００，３００のいずれかに流動的に移行する。
【００８０】
まず、ノード状況同期部１２２Ｂは予め定めたタイミングでいずれかのトリガ処理を特定し、対象のトリガ処理に関してループ処理を開始する（ステップＳ１５１）。ステップＳ１５１の処理が完了すると、次いで、ノード状況同期部１２２Ｂは対象のトリガ処理の処理時間予測を取得する（ステップＳ１５２）。より詳しくは、ノード状況同期部１２２Ｂはトリガ処理記憶部１２３から対象のトリガ処理の処理時間予測を取得する。
【００８１】
ステップＳ１５２の処理が完了すると、次いで、ノード状況同期部１２２Ｂはノード１００，２００，３００のいずれかを特定し、対象ノードに関してループ処理を開始する（ステップＳ１５３）。ステップＳ１５３の処理が完了すると、次いで、ノード状況同期部１２２Ｂは対象ノードのＣＰＵ性能とＣＰＵ負荷を取得する（ステップＳ１５４）。より詳しくは、ノード状況同期部１２２Ｂはノード状況記憶部１２８から対象ノードのＣＰＵ性能とＣＰＵ負荷を取得する。
【００８２】
ステップＳ１５４の処理が完了すると、次いで、ノード状況同期部１２２Ｂは対象ノードのトリガ処理実行時間予測Ｔ２を算出する（ステップＳ１５５）。より詳しくは、対象ノードのトリガ処理実行時間予測Ｔ２は以下の数式により算出される。
対象ノードのトリガ処理実行時間予測Ｔ２
＝処理時間予測×（係数ａ×ＣＰＵ負荷）／（係数ｂ×ＣＰＵ性能）
【００８３】
ステップＳ１５５の処理が完了すると、次いで、ノード状況同期部１２２Ｂはノードに関するループ処理を終了する（ステップＳ１５６）。したがって、ノード状況同期部１２２Ｂはノード１００，２００，３００の別のいずれかを特定し、対象ノードに関してループ処理を開始する。
【００８４】
一方、ノード状況同期部１２２Ｂはノード１００，２００，３００の全てに関してループ処理を終えると、次いで、ノード状況同期部１２２Ｂはトリガ処理実行時間予測Ｔ２が最短となるノードを処理責任ノードと決定する（ステップＳ１５７）。ステップＳ１５７の処理が完了すると、次いで、ノード状況同期部１２２Ｂはトリガ処理に関するループ処理を終了する（ステップＳ１５８）。したがって、ノード状況同期部１２２Ｂは別のトリガ処理を特定し、対象のトリガ処理に関してループ処理を開始する。
【００８５】
一方、ノード状況同期部１２２Ｂは全てのトリガ処理に関してループ処理を終えると、次いで、ノード状況同期部１２２ＢはＣＰＵ性能とＣＰＵ負荷と処理責任ノードを各ノードに送信する（ステップＳ１５９）。より詳しくは、ノード状況同期部１２２Ｂは自ノードのＣＰＵ性能とＣＰＵ負荷と決定した処理責任ノードをノード２００，３００に送信する。これにより、ノード２００，３００の各ノード状況同期部は自ノードのＣＰＵ性能とＣＰＵ負荷と決定した処理責任ノードを受信する。受信後、ノード２００，３００の各ノード状況同期部はＣＰＵ性能とＣＰＵ負荷をそれぞれ自身のノード状況記憶部に格納し、処理責任ノードをそれぞれトリガ処理記憶部に格納する。
【００８６】
このように、第２実施形態によれば、トリガ処理の処理時間が各ノードの状況も考慮して最短となる実行ノードが選択され、実行結果の同期に要する時間を短縮することができる。
【００８７】
（第３実施形態）
続いて、図１９から図２２を参照して、本件の第３実施形態について説明する。
図１９は第３実施形態に係るトリガ処理記憶部１２３の一例である。図２０は第３実施形態に係るノード状況記憶部１２８の一例である。尚、第３実施形態に係るノード１００が備える機能の構成は第２実施形態に係るノード１００が備える機能の構成と同一であるため、その説明を省略する。
【００８８】
第３実施形態に係るトリガ処理テーブルＴ１は、図１９に示すように、同期通信量予測を構成要素として含む点で第２実施形態に係るトリガ処理テーブルＴ１と相違する。同期通信量予測は実行結果の同期に要する通信量の予測を表している。また、第３実施形態に係るノード状況テーブルＴ４は、図２０に示すように、回線速度及び通信負荷を構成要素として含む点で第２実施形態に係るノード状況テーブルＴ４と相違する。回線速度及び通信負荷は、そのノードと実行結果を同期する際の速度と負荷を表している。
【００８９】
続いて、図２１及び図２２を参照して、第３実施形態に係るノード１００の動作について説明する。尚、ノード２００，３００もノード１００の動作と同様であるため、説明を省略する。
【００９０】
図２１は第３実施形態に係る条件Ｃ２を表すフローチャートである。尚、第３実施形態に係るノード１００，２００，３００の処理シーケンスは図１４及び図１５を参照して説明した第２実施形態に係る処理シーケンスと同一であるため、その説明を省略する。第３実施形態に係る条件Ｃ３についても図１７を参照して説明した第２実施形態に係る処理シーケンスと同一であるため、その説明を省略する。
【００９１】
例えば同期制御部１２７が図１５を参照して説明したステップＳ１４２の処理を終えると、図２１に示すように、実行ノード選択部１２２Ａは対象のトリガ処理の処理時間予測、同期通信量予測、及び処理責任ノードを取得する（ステップＳ１４３−１１）。より詳しくは、実行ノード選択部１２２Ａはトリガ処理記憶部１２３にアクセスし、対象のトリガ処理の処理時間予測、同期通信量予測、及び処理責任ノードを取得する。
【００９２】
ステップＳ１４３−１１の処理が完了すると、次いで、実行ノード選択部１２２Ａは自ノードの実行時間予測Ｔ３を算出する（ステップＳ１４３−１２）。自ノードの実行時間予測Ｔ３は以下の数式により算出される。
自ノードの実行時間予測Ｔ３
＝処理時間予測×（係数ａ×ＣＰＵ負荷）／（係数ｂ×ＣＰＵ性能）
【００９３】
ステップＳ１４３−１２の処理が完了すると、次いで、実行ノード選択部１２２Ａは処理責任ノードのＣＰＵ性能、ＣＰＵ負荷、回線速度、及び通信負荷を取得する（ステップＳ１４３−１３）。より詳しくは、実行ノード選択部１２２Ａはノード状況記憶部１２８にアクセスし、処理責任ノードのＣＰＵ性能、ＣＰＵ負荷、回線速度、及び通信負荷を取得する。
【００９４】
ステップＳ１４３−１３の処理が完了すると、次いで、実行ノード選択部１２２Ａは処理責任ノードの実行時間予測Ｔ４を算出する（ステップＳ１４３−１４）。処理責任ノードの実行時間予測Ｔ４は以下の数式により算出される。
自ノードの実行時間予測Ｔ４
＝処理時間予測×（係数ａ×ＣＰＵ負荷）／（係数ｂ×ＣＰＵ性能）
【００９５】
ステップＳ１４３−１４の処理が完了すると、次いで、実行ノード選択部１２２Ａは転送時間予測Ｔ５を算出する（ステップＳ１４３−１５）。転送時間予測Ｔ５は以下の数式により算出される。
転送時間予測Ｔ５
＝同期通信量予測／
ＭＩＮ（係数ｃ×自ノードの回線速度／自ノードの通信負荷，
係数ｄ×処理責任ノードの回線速度／処理責任ノードの通信負荷）
【００９６】
ステップＳ１４３−１５の処理が完了すると、次いで、実行ノード選択部１２２Ａは結果受信時間予測Ｔ６を算出する（ステップＳ１４３−１６）。結果受信時間予測Ｔ６は以下の数式により算出される。
結果受信時間予測Ｔ６
＝処理責任ノードの実行時間予測Ｔ４＋転送時間予測Ｔ５
【００９７】
ステップＳ１４３−１６の処理が完了すると、次いで、実行ノード選択部１２２Ａは自ノードの実行時間予測Ｔ３が結果受信時間予測Ｔ６以下か否かを判断する（ステップＳ１４３−１７）。実行ノード選択部１２２Ａは自ノードの実行時間予測Ｔ３が結果受信時間予測Ｔ６以下であると判断すると（ステップＳ１４３−１７：ＹＥＳ）、自ノードを実行ノードと決定し、条件Ｃ２を満足すると判断する。一方、実行ノード選択部１２２Ａは自ノードの実行時間予測Ｔ３が結果受信時間予測Ｔ６より大きいと判断すると（ステップＳ１４３−１７：ＮＯ）、他ノードを実行ノードと決定し、条件Ｃ２を満足しないと判断する。
【００９８】
続いて、図２２を参照して、第３実施形態に係るノード状況同期部１２２Ｂの動作について説明する。
【００９９】
図２２は第３実施形態に係るノード状況同期部１２２Ｂの動作の一例を示すフローチャートである。尚、ノード２００，３００がそれぞれ備えるノード状況同期部の動作についてもノード状況同期部１２２Ｂと同様の動作であるため、その説明を省略する。ノード状況同期部１２２Ｂはノード１００で定期的に実行される。したがって、トリガ処理の処理責任ノードはノード１００，２００，３００のＣＰＵ性能、ＣＰＵ負荷、回線速度、及び通信負荷などの状況に基づいて、ノード１００，２００，３００のいずれかに流動的に移行する。
【０１００】
まず、ノード状況同期部１２２Ｂは予め定めたタイミングでいずれかのトリガ処理を特定し、対象のトリガ処理に関してループ処理を開始する（ステップＳ１６１）。ステップＳ１６１の処理が完了すると、次いで、ノード状況同期部１２２Ｂは対象のトリガ処理の処理時間予測と同期通信量予測を取得する（ステップＳ１６２）。より詳しくは、ノード状況同期部１２２Ｂはトリガ処理記憶部１２３から対象のトリガ処理の処理時間予測と同期通信量予測を取得する。
【０１０１】
ステップＳ１６２の処理が完了すると、次いで、ノード状況同期部１２２Ｂはノード１００，２００，３００のいずれかを特定し、対象ノードに関してループ処理を開始する（ステップＳ１６３）。ステップＳ１６３の処理が完了すると、次いで、ノード状況同期部１２２Ｂは対象ノードのＣＰＵ性能とＣＰＵ負荷と回線速度と通信負荷を取得する（ステップＳ１６４）。より詳しくは、ノード状況同期部１２２Ｂはノード状況記憶部１２８から対象ノードのＣＰＵ性能とＣＰＵ負荷と回線速度と通信負荷を取得する。
【０１０２】
ステップＳ１６４の処理が完了すると、次いで、ノード状況同期部１２２Ｂは対象ノードのトリガ処理実行時間予測Ｔ７を算出する（ステップＳ１６５）。より詳しくは、対象ノードのトリガ処理実行時間予測Ｔ７は以下の数式により算出される。
対象ノードのトリガ処理実行時間予測Ｔ７
＝処理時間予測×（係数ａ×ＣＰＵ負荷）／（係数ｂ×ＣＰＵ性能）
【０１０３】
ステップＳ１６５の処理が完了すると、次いで、ノード状況同期部１２２Ｂは転送時間予測Ｔ８を算出する（ステップＳ１６６）。転送時間予測Ｔ８は以下の数式により算出される。
転送時間予測Ｔ８
＝同期通信量予測／
（係数ｄ×処理責任ノードの回線速度／処理責任ノードの通信負荷）
【０１０４】
ステップＳ１６６の処理が完了すると、次いで、ノード状況同期部１２２Ｂは結果受信時間予測Ｔ９を算出する（ステップＳ１６７）。結果受信時間予測Ｔ９は以下の数式により算出される。
結果受信時間予測Ｔ９
＝対象ノードのトリガ処理実行時間予測Ｔ７＋転送時間予測Ｔ８
【０１０５】
ステップＳ１６７の処理が完了すると、次いで、ノード状況同期部１２２Ｂはノードに関するループ処理を終了する（ステップＳ１６８）。したがって、ノード状況同期部１２２Ｂはノード１００，２００，３００の別のいずれかを特定し、対象ノードに関してループ処理を開始する。
【０１０６】
一方、ノード状況同期部１２２Ｂはノード１００，２００，３００の全てに関してループ処理を終えると、次いで、ノード状況同期部１２２Ｂは結果受信時間予測Ｔ９が最短となるノードを処理責任ノードと決定する（ステップＳ１６９）。ステップＳ１６９の処理が完了すると、次いで、ノード状況同期部１２２Ｂはトリガ処理に関するループ処理を終了する（ステップＳ１７０）。したがって、ノード状況同期部１２２Ｂは別のトリガ処理を特定し、対象のトリガ処理に関してループ処理を開始する。
【０１０７】
一方、ノード状況同期部１２２Ｂは全てのトリガ処理に関してループ処理を終えると、次いで、ノード状況同期部１２２ＢはＣＰＵ性能とＣＰＵ負荷と回線速度と通信負荷と処理責任ノードを各ノードに送信する（ステップＳ１７１）。より詳しくは、ノード状況同期部１２２Ｂは自ノードのＣＰＵ性能とＣＰＵ負荷と回線速度と通信負荷と決定した処理責任ノードをノード２００，３００に送信する。これにより、ノード２００，３００の各ノード状況同期部は自ノードのＣＰＵ性能とＣＰＵ負荷と回線速度と通信負荷と決定した処理責任ノードを受信する。受信後、ノード２００，３００の各ノード状況同期部はＣＰＵ性能とＣＰＵ負荷と回線速度と通信負荷をそれぞれ自身のノード状況記憶部に格納し、処理責任ノードをそれぞれトリガ処理記憶部に格納する。
【０１０８】
このように、第３実施形態によれば、各ノードの処理状況及び実行結果の同期に要する転送量も考慮されて、トリガ処理の実行ノードが決定され、実行結果の同期に要する時間を短縮することができる。
【０１０９】
（第４実施形態）
続いて、図２３から図２７を参照して、本件の第４実施形態について説明する。
図２３は第４実施形態に係るノード１００のブロック図の一例である。図２４は第４実施形態に係るトリガ処理記憶部１２３の一例である。図２５は更新頻度記憶部１２２Ｃの一例である。尚、第４実施形態に係るノード１００において、図３に示すノード１００の各部と同様の構成には同一符号を付し、その説明を省略する。
【０１１０】
第４実施形態に係るトリガ処理同期部１２２は更新頻度記憶部１２２Ｃを備える点で第１実施形態に係るトリガ処理同期部１２２と相違する。さらに、図２４に示すように、トリガ処理テーブルＴ１が前回トリガ実行日時を構成要素として含む点で第１実施形態に係るトリガ処理テーブルＴ１と相違する。前回トリガ実行日時は前回トリガ処理が実行された日時を表している。
【０１１１】
第４実施形態では、トリガ処理の対象であるキーが頻繁に変更されている間はトリガ処理を実行しない点で、上述した第１実施形態から第３実施形態と相違する。これは、キーが頻繁に上書きされるため、トリガ処理を実行しても無駄になる可能性が高いためである。これにより、トリガ処理による通信爆発が抑制される。すなわち、トリガ処理によるキーの更新によりノード１００，２００，３００間の実行結果の送信が発生してネットワークＮＷに負荷がかかるので、通信の発生を抑えて、通信爆発を回避する。
【０１１２】
ここで、更新頻度記憶部１２２Ｃは更新頻度情報を記憶する。より詳しくは、図２５に示すように、更新頻度記憶部１２２Ｃは更新頻度情報を更新頻度テーブルＴ５により管理する。更新頻度情報は、キー、更新頻度、及びＴ秒前更新頻度を構成要素として含んでいる。更新頻度は、そのキーが更新された頻度を表している。更新頻度は直近Ｕ秒内の更新回数に基づいて算出される。尚、Ｔ秒（例えば５秒などの数秒）は、情報処理システムＳの導入時に設定されるパラメータである。
【０１１３】
続いて、図２６を参照して、第４実施形態に係るノード１００の動作について説明する。尚、ノード２００，３００もノード１００の動作と同様であるため、説明を省略する。
【０１１４】
図２６は第４実施形態に係るノード１００，２００，３００の処理シーケンスの一例である。より詳しくは、図２６はトリガ処理を実行する際の処理シーケンスの一例を表している。
【０１１５】
まず、ノード１００のＨＴＭＬアプリ１１０がトリガ処理の対象であるキーを更新すると（ステップＳ１７１）、同期制御部１２７はキーの更新をノード２００，３００に送信する（ステップＳ１７２）。これにより、ノード２００，３００の各同期制御部はそれぞれキーの更新を受信する（ステップＳ２７０，Ｓ３７０）。受信後、ノード２００，３００の各同期制御部はそれぞれ自身の第１データ記憶部にキーの更新をデータとして格納する。
【０１１６】
ステップＳ１７２の処理が完了すると、実行ノード選択部１２２Ａはキーの更新頻度を算出する（ステップＳ１７３）。より詳しくは、実行ノード選択部１２２Ａは上述したＵ秒間の更新回数に基づいてキーの更新頻度を算出し、算出した更新頻度に基づいて更新情報記憶部１２２Ｃを更新する。同様に、ノード２００，３００が備える各実行ノード選択部もキーの更新頻度を算出し、算出した更新頻度に基づいて自身の更新情報記憶部を更新する（ステップＳ２７１，Ｓ３７１）。
【０１１７】
ステップＳ１７３の処理が完了すると、実行ノード選択部１２２Ａは後述する条件Ｃ４を満足するか否かを判断する（ステップＳ１７４）。同様に、ノード２００，３００の各実行ノード選択部も条件Ｃ４を満足するか否かを判断する（ステップＳ２７２，Ｓ３７２）。
【０１１８】
例えば、ノード２００の実行ノード選択部が条件Ｃ４を満足すると判断した場合（ステップＳ２７２：ＹＥＳ）、ノード２００のトリガ処理実行部はトリガ処理を実行する（ステップＳ２７３）。ステップＳ２７３の処理が完了すると、実行結果を第１データ記憶部１２５に格納する（ステップＳ２７４）。ステップＳ２７４の処理が完了すると、ノード２００の同期制御部はキーの更新をノード１００，３００に送信する（ステップＳ２７５）。これにより、ノード１００の同期制御部１２７及びノード３００の同期制御部はそれぞれノード２００から送信されたキーの更新を受信する（ステップＳ１７５，Ｓ３７３）。受信後、ノード１００の同期制御部１２７はキーの更新をデータとして第１データ記憶部１２５に格納し、ノード３００の同期制御部はキーの更新をデータとして自身の第１データ記憶部に格納する。格納後、ノード２００の実行ノード選択部は前回トリガ実行日時を更新し（ステップＳ２７６）、再びステップＳ２７１の処理を実行する。
【０１１９】
尚、ノード１００の実行ノード選択部１２２Ａが条件Ｃ４を満足しないと判断した場合（ステップＳ１７４：ＮＯ）、ノード１００のトリガ処理実行部１２４及び同期制御部１２７は上述したステップＳ２７３からＳ２７５及びＳ２７６に相当する処理を実行しない。同様に、ノード３００の実行ノード選択部が条件Ｃ４を満足しないと判断した場合（ステップＳ３７２：ＮＯ）、ノード３００のトリガ処理実行部及び同期制御部は上述したステップＳ２７３からＳ２７５及びＳ２７６に相当する処理を実行しない。
【０１２０】
続いて、図２７を参照して、上述した条件Ｃ４について説明する。
【０１２１】
図２７は第４実施形態に係る条件Ｃ４を表すフローチャートである。尚、条件Ｃ４はノード１００，２００，３００で同じであるため、一例として、ノード１００について説明する。例えば同期制御部１２７が図２６を参照して説明したステップＳ１７３の処理を終えると、図２７に示すように、実行ノード選択部１２２Ａは図１０を参照して説明した条件Ｃ１を満足するか否かを判断する（ステップＳ１７４−１）。
【０１２２】
実行ノード選択部１２２Ａは条件Ｃ１を満足しないと判断した場合（ステップＳ１７４−１：ＮＯ）、条件Ｃ４を満足しないと判断する。一方、実行ノード選択部１２２Ａは条件Ｃ１を満足すると判断した場合（ステップＳ１７４−１：ＹＥＳ）、次いで、条件Ｃ５を満足するか否かを判断する（ステップＳ１７４−２）。ここで、条件Ｃ５は更新リストが空いているか否かを判断する条件である。
【０１２３】
実行ノード選択部１２２Ａは条件Ｃ５を満足すると判断した場合（ステップＳ１７４−２：ＹＥＳ）、条件Ｃ４を満足すると判断する。一方、実行ノード選択部１２２Ａは条件Ｃ５を満足しないと判断した場合（ステップＳ１７４−２：ＮＯ）、次いで、条件Ｃ６を満足するか否かを判断する（ステップＳ１７４−３）。ここで、条件Ｃ６はトリガ処理の対象であるキーの更新頻度が、しきい値Ｋｓ未満であるか否かを判断する条件である。
【０１２４】
実行ノード選択部１２２Ａは条件Ｃ６を満足しないと判断した場合（ステップＳ１７４−３：ＮＯ）、さらに、条件Ｃ７を満足するか否かを判断する（ステップＳ１７４−４）。ここで、条件Ｃ７はトリガ処理の対象であるＴ秒前更新頻度が、しきい値Ｋｓ未満かつ前回トリガ実行時刻からＴ秒経過済であるか否かを判断する条件である。
【０１２５】
実行ノード選択部１２２Ａは条件Ｃ７を満足すると判断した場合（ステップＳ１７４−４：ＹＥＳ）、条件Ｃ４を満足しないと判断する。逆に、実行ノード選択部１２２Ａは条件Ｃ７を満足しないと判断した場合（ステップＳ１７４−４：ＮＯ）、条件Ｃ４を満足すると判断する。
【０１２６】
一方、上述したステップＳ１７４−３の処理において、実行ノード選択部１２２Ａは条件Ｃ６を満足すると判断した場合（ステップＳ１７４−３：ＹＥＳ）、次いで、条件Ｃ８を満足するか否かを判断する（ステップＳ１７４−５）。ここで、条件Ｃ８は更新キーリスト内の各キーの更新頻度のうち、しきい値Ｋｘ未満のものがあるか否かを判断する条件である。
【０１２７】
実行ノード選択部１２２Ａは条件Ｃ８を満足すると判断した場合（ステップＳ１７４−５：ＹＥＳ）、条件Ｃ４を満足すると判断する。一方、実行ノード選択部１２２Ａは条件Ｃ８を満足しないと判断した場合（ステップＳ１７４−５：ＮＯ）、次いで、条件Ｃ９を満足するか否かを判断する（ステップＳ１７４−６）。ここで、条件Ｃ９は更新キーリスト内の各キーのＴ秒前更新頻度が全てしきい値Ｋｘ以上であり、かつ、前回トリガ実行時刻からＴ秒経過済であるか否かを判断する条件である。
【０１２８】
実行ノード選択部１２２Ａは条件Ｃ９を満足すると判断した場合（ステップＳ１７４−６：ＹＥＳ）、条件Ｃ４を満足すると判断する。逆に、実行ノード選択部１２２Ａは条件Ｃ９を満足しないと判断した場合（ステップＳ１７４−６：ＮＯ）、条件Ｃ９を満足しないと判断する。
【０１２９】
以上、第４実施形態によれば、トリガ処理による通信爆発が抑えられながら、トリガ処理の実行ノードが決定され、実行結果の同期に要する時間を短縮することができる。
【０１３０】
以上、本発明の好ましい実施形態について詳述したが、本発明に係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１３１】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）複数のノードでトリガ処理の実行結果を同期する情報処理システムであって、前記複数のノードの各々は、アプリが登録した前記トリガ処理を受け付け、受け付けた前記トリガ処理の内容に基づいて、前記複数のノードの中から前記トリガ処理を実行するいずれかのノードを選択する、処理を行う処理部を有する情報処理システム。
（付記２）前記処理部は、選択した前記いずれかのノードに前記トリガ処理を送信する、ことを特徴とする付記１に記載の情報処理システム。
（付記３）前記処理部は、さらに、前記いずれかのノードの処理状況を表すノード状況情報に基づいて、前記いずれかのノードを選択する、ことを特徴とする付記１又は２に記載の情報処理システム。
（付記４）前記ノード状況情報は、前記トリガ処理に要する処理時間予測とＣＰＵの性能とＣＰＵの負荷とに基づいて算出した時間である、ことを特徴とする付記３に記載の情報処理システム。
（付記５）前記処理部は、前記時間が所定の閾値時間以下の前記トリガ処理を実行し、実行結果を前記いずれかのノードと同期しない記憶部に格納する、付記４に記載の情報処理システム。
（付記６）前記処理部は、さらに、前記実行結果の同期に要する転送量を表す転送量情報に基づいて、前記いずれかのノードを選択する、ことを特徴とする付記１から５のいずれか１項に記載の情報処理システム。
（付記７）前記転送量情報は、前記データの前記複数のノード間の同期に要する通信量予測と回線速度と通信負荷とに基づいて算出した時間である、ことを特徴とする付記６に記載の情報処理システム。
（付記８）前記処理部は、前記トリガ処理が更新するキー更新頻度に応じて、前記トリガ処理の実行を抑制する、ことを特徴とする付記１から７のいずれか１項に記載の情報処理システム。
（付記９）前記トリガ処理は、データベーストリガ及びストアドプロシージャである、ことを特徴とする付記１から８のいずれか１項に記載の情報処理システム。
（付記１０）複数のコンピュータでトリガ処理の実行結果を同期する情報処理方法であって、前記複数のコンピュータの各々が、アプリが登録した前記トリガ処理を受け付け、受け付けた前記トリガ処理の内容に基づいて、前記複数のコンピュータの中から前記トリガ処理を実行するいずれかのコンピュータを選択する、処理を実行する情報処理方法。
（付記１１）前記処理は、選択した前記いずれかのコンピュータに前記トリガ処理を送信する、ことを特徴とする付記１０に記載の情報処理方法。
（付記１２）前記処理部は、さらに、前記いずれかのコンピュータの処理状況を表す状況情報に基づいて、前記いずれかのコンピュータを選択する、ことを特徴とする付記１０又は１１に記載の情報処理方法。
（付記１３）前記状況情報は、前記トリガ処理に要する処理時間予測とＣＰＵの性能とＣＰＵの負荷とに基づいて算出した時間である、ことを特徴とする付記１２に記載の情報処理方法。
（付記１４）前記処理部は、前記時間が所定の閾値時間以下の前記トリガ処理を実行し、実行結果を前記いずれかのコンピュータと同期しない記憶部に格納する、付記１３に記載の情報処理方法。
（付記１５）前記処理部は、さらに、前記実行結果の同期に要する転送量を表す転送量情報に基づいて、前記いずれかのコンピュータを選択する、ことを特徴とする付記１０から１４のいずれか１項に記載の情報処理方法。
（付記１６）前記転送量情報は、前記実行結果の前記複数のコンピュータ間の同期に要する通信量予測と回線速度と通信負荷とに基づいて算出した時間である、ことを特徴とする付記１５に記載の情報処理方法。
（付記１７）前記処理部は、前記トリガ処理が更新するキー更新頻度に応じて、前記トリガ処理の実行を抑制する、ことを特徴とする付記１０から１６のいずれか１項に記載の情報処理方法。
（付記１８）前記トリガ処理は、データベーストリガ及びストアドプロシージャである、ことを特徴とする付記１０から１７のいずれか１項に記載の情報処理方法。
（付記１９）少なくとも１つの情報処理装置とトリガ処理の実行結果を同期する情報処理装置であって、アプリが登録した前記トリガ処理を受け付け、受け付けた前記トリガ処理の内容に基づいて、前記少なくとも１つの情報処理装置の中から前記トリガ処理を実行するいずれかの情報処理装置を選択する、処理を行う処理部を有する情報処理装置。
【符号の説明】
【０１３２】
Ｓ  情報処理システム
１００，２００，３００  ノード
１１０  ＨＴＭＬアプリ
１２０  ＤＳＭ
１２１  トリガ処理受付部
１２２  トリガ処理同期部
１２２Ａ  実行ノード選択部
１２２Ｂ  ノード状況同期部
１２２Ｃ  更新頻度記憶部
１２３  トリガ処理記憶部
【図１】
2018151947.tif 000003
【図２】
2018151947.tif 000004
【図３】
2018151947.tif 000005
【図４】
2018151947.tif 000006
【図５】
2018151947.tif 000007
【図６】
2018151947.tif 000008
【図７】
2018151947.tif 000009
【図８】
2018151947.tif 000010
【図９】
2018151947.tif 000011
【図１０】
2018151947.tif 000012
【図１１】
2018151947.tif 000013
【図１２】
2018151947.tif 000014
【図１３】
2018151947.tif 000015
【図１４】
2018151947.tif 000016
【図１５】
2018151947.tif 000017
【図１６】
2018151947.tif 000018
【図１７】
2018151947.tif 000019
【図１８】
2018151947.tif 000020
【図１９】
2018151947.tif 000021
【図２０】
2018151947.tif 000022
【図２１】
2018151947.tif 000023
【図２２】
2018151947.tif 000024
【図２３】
2018151947.tif 000025
【図２４】
2018151947.tif 000026
【図２５】
2018151947.tif 000027
【図２６】
2018151947.tif 000028
【図２７】
2018151947.tif 000029