以下に図面を参照して、本発明にかかる処理プログラム、処理システムおよび処理方法の実施の形態を詳細に説明する。
(実施の形態1)
図1は、実施の形態1にかかる処理方法の一実施例を示す説明図である。図1において、処理システム100は、処理装置101と、処理装置102と、管理装置103と、を含む。処理システム100は、処理装置間でデータをやり取りして、複合イベント処理などを行うシステムである。
複合イベント処理とは、センサ等の機器から発生するデータを短時間で判断、分析するために、メモリ上に条件を展開しておき、次々と到着するデータに対して条件を当てはめて判断、分析する処理である。複合イベント処理によれば、短時間で膨大なデータを処理することができるようになる。
ここで、処理装置101は、処理装置102からデータを受信して、データを処理する受信側のコンピュータである。処理装置102は、処理装置101にデータを送信する送信側のコンピュータである。管理装置103は、処理装置101と処理装置102とを管理するコンピュータである。
データは、該データの種類を識別する識別子を含む。データの種類とは、コンピュータにおける扱いが共通するデータを分類し、それぞれのまとまりとしたものである。例えば、データの種類として、オブジェクト型、配列型、リスト型等が挙げられる。
以下の説明では、データの種類として「オブジェクト型」を例に挙げ、データとしてオブジェクト通信で送受信される「メッセージ」を例に挙げて説明する。
ソフトウェア開発では、例えば、Java、C++のようなオブジェクト指向言語が採用されることが多い。オブジェクト指向言語とは、オブジェクトと呼ばれる機能の部品でソフトウェアを構成させるプログラミングに適した言語のことである。
オブジェクトとは、現実世界に存在する物理的あるいは抽象的な実体を、属性と操作の集合としてモデル化し、コンピュータ上に再現したデータである。また、オブジェクトは、項目名により識別される項目(メンバ)を有する。メンバは、例えば、変数であるフィールドや関数であるメソッドなどである。
また、オブジェクト指向言語で開発されたソフトウェアの通信では、開発効率を重視して、オブジェクト通信が使用されることが多い。オブジェクト通信とは、通常バイト列しか送受信できないネットワークにおいてオブジェクトの送受信を可能にする技術で、送信側のコンピュータが、シリアライズによりオブジェクトをバイト列に変換してメッセージに載せ、受信側のコンピュータが、メッセージ上のバイト列をデシリアライズによりオブジェクトに逆変換することによりオブジェクトを送受信する通信である。
ここで、メッセージとは、送受信されるデータであり、例えば、データを送受信するためのアプリケーション層での最小の送受信単位である。シリアライズとは、データを符号化(直列化)する処理である。具体的には、例えば、シリアライズは、ネットワークを介してオブジェクトを送受信するために、オブジェクト型、オブジェクトのフィールドの型、およびフィールドの値を、バイト列に直列化してメッセージに配置する処理である。
また、シリアライズでは、あるオブジェクトがフィールドの値として別のオブジェクトを格納している場合、そのオブジェクトのフィールドを再帰的に格納する。また、シリアライズでは、オブジェクトのメソッド、フィールド内のスタティック変数と定数値は、バイト列に直列化して配置しない。
デシリアライズとは、符号化(直列化)されたデータを復元する処理である。具体的には、例えば、デシリアライズは、バイト列からオブジェクト型、オブジェクトのフィールドの型、およびフィールドの値を復元する処理である。オブジェクト型、フィールドの型はリフレクションにより復元する。リフレクションとは、Javaのような静的型付け言語において動的に型付けをする技術で、ここではデータ内のオブジェクト型を示す文字列もしくは固有値から、データベース等を参照して、オブジェクトの型定義を復元することである。
ここで、図2を用いて、オブジェクトのシリアライズおよびデシリアライズの処理例について説明する。
図2は、オブジェクトのシリアライズおよびデシリアライズの処理例を示す説明図である。図2において、オブジェクト201は、オブジェクト型Wのオブジェクトであり、メンバとしてフィールドとメソッドを有する。オブジェクト型Wは、フィールドとして、int A、int B、double Cを有し、メソッドとして、F(int x)、G(int x,int y)、H(int x,Object z)を有する。
ここで、A、B、Cはフィールドを識別するためのフィールド名であり、F、G、Hはメソッドを識別するためのメソッド名である。また、フィールドのint、doubleは、フィールドの型である。フィールドの型とは、コンピュータにおけるデータの扱いに関する形式のことである。オブジェクト201は、フィールドの値として、A=1、B=10、C=64を持つ。
バイト列202は、オブジェクト201をシリアライズしたものである。シリアライズ時に、オブジェクト型、オブジェクトのフィールドの型、フィールド名、およびフィールドの値が数値に変換され、バイト列202が生成される。一方、メソッドは全てのオブジェクト型Wで共通であるので、バイト列202に含まれない。
また、バイト列202では、オブジェクト型“W”は文字列を数値化したもの、または予め取り決めた数値に置き換える。バイト列202は、デシリアライズ時に、数値に変換された値から、オブジェクト型“W”は文字列を数値化したもの、または予め取り決めた数値からリフレクションにより復元される。これに伴い、オブジェクトのフィールドの型、メソッドも復元される(オブジェクト型から自動的に決まる)。さらにバイト列202に格納されたフィールドの値が復元される。
メッセージ203は、バイト列202にヘッダをつけたものである。ここで、ヘッダとは、メッセージに関する情報を格納する部分であり、メッセージの送信者、受信者、経由したサーバおよび件名等、メッセージの送受信に用いる情報を格納する。メッセージ203は、送信時にバイト列202から組み立てられ、受信時にバイト列202が取り出される。
受信側のコンピュータは、メッセージ203を受信して、メッセージ203からバイト列202を取り出し、バイト列202に存在するオブジェクトとそのフィールドをすべてデシリアライズする。この後、受信側のコンピュータは、デシリアライズされたバイト列202、すなわち、オブジェクト201のフィールドの値を参照して、条件に一致するか否かの判断が行われる。
ここで、条件とは、受信側のコンピュータが受信したデータに対して所定の処理を実行するか否かを判定するためのものである。所定の処理とは、例えば、データに対する分析処理である。具体的には、例えば、受信側のコンピュータは、前処理と後処理とからなるクエリを実行する。前処理は、受信したデータが条件を満たしているか否かを判定する処理である。後処理は、前処理で条件を満たすと判定されたデータに対して分析等の所定の処理を実行する処理である。
ところが、受信側のコンピュータは、受信したバイト列202をデシリアライズしてオブジェクト201を復元したとしても、その一部分だけを参照して、条件に一致しない場合は何もせず、デシリアライズして生成したオブジェクト201を破棄する場合がある。また、受信側のコンピュータは、受信したバイト列202をデシリアライズしてオブジェクト201を生成したとしても、全くフィールドを参照しないで、受信したバイト列202を他のコンピュータに送信する場合がある。
すなわち、受信側のコンピュータにおいて、一部のフィールドだけを参照する、あるいは、全くフィールドを参照しない場合であっても、受信したバイト列202をデシリアライズしてオブジェクト201を生成すると、受信したバイト列202をデシリアライズしてオブジェクト201を生成するためにCPUを使用することになる。このため、受信側のコンピュータのCPUにかかる負荷が増加して、オブジェクト通信のスループットが低下する要因となる。
そこで、実施の形態1では、処理装置101は、受信したデータ(例えば、メッセージ122)が、該データの種類を識別する識別子と関連付けて記憶された所定の処理を実行する条件を満たすか否かに応じて、データを復元する。これにより、所定の処理に用いられる値を含まないデータに対する無駄な復元処理を削減する。以下、実施の形態1にかかる処理システム100のデータ処理例について説明する。
(1)管理装置103は、処理装置101と処理装置102に定義情報121を送信する。ここで、定義情報121は、オブジェクト型を識別する識別子と、当該オブジェクト型の前処理で使う値を埋め込むためのメッセージ(例えば、メッセージ122)内の所定領域を示す情報とを含む。
前処理で使う値とは、オブジェクトに含まれる前処理で使うフィールドの値である。また、前処理で使う値は、1つのメッセージに複数個存在する場合がある。定義情報121には、例えば、オブジェクトのすべてのフィールドの値について、メッセージ内の所定領域を示す情報が含まれていてもよい。また、所定領域を示す情報とは、メッセージにおける、フィールドの値の位置と、フィールドの値のデータサイズとを示す情報である。
処理装置101は、受信した定義情報121に含まれるオブジェクト型を識別する識別子を、所定の処理を実行する条件と関連付けて、定義情報123として記憶装置に保存する。また、受信した定義情報121に含まれる所定領域を示す情報は、所定の処理を実行する条件の一つとして記憶装置に記憶される。
所定の処理は、定義情報121に含まれる識別子により識別されるオブジェクト型のオブジェクトに対して実行される分析処理などの処理である。例えば、処理装置101がクエリを実行するコンピュータである場合、所定の処理は、クエリにおける後処理である。処理装置102は、受信した定義情報121を記憶装置に保存する。
図1の例では、定義情報121は、オブジェクト型を識別する識別子として“W”と、“W”により識別されるオブジェクト型の前処理で使う値を埋め込むためのメッセージ122内の所定領域を示す情報として“X:Long”とが関連付けられた情報である。ここで、“X”は埋め込まれる前処理で使う値の位置を示す情報であり、“Long”は埋め込まれる前処理で使う値のデータサイズを示す情報である。
(2)処理装置102は、オブジェクトを処理装置101に送信する場合に、オブジェクトをシリアライズする。この際、当該オブジェクトが定義情報121に記憶された識別子により識別されるオブジェクト型のオブジェクトである場合、処理装置102は、オブジェクト型を識別する識別子と、シリアライズしたオブジェクトとを含むメッセージ122を処理装置101に送信する。
図1の例では、処理装置102は、送信するオブジェクトのオブジェクト型が“W”である場合、オブジェクト型を識別する“W”と、前処理で使う値“a”を、メッセージ122内の、位置が“X”でデータサイズが“Long”である所定領域に埋め込む。そして、処理装置102は、“W”と、“a”と、直列化データとを含むメッセージ122を処理装置101に送信する。直列化データは、送信するオブジェクトをシリアライズしたデータである。
(3)処理装置101は、処理装置102からメッセージ122を受信する。
(4)処理装置101は、受信したメッセージ122に含まれるオブジェクト型を識別する識別子が定義情報123に記憶されているか否かを判断する。処理装置101は、定義情報123に記憶されている場合、メッセージ122の所定領域の情報が、メッセージ122に含まれる識別子に関連付けられた所定の処理を実行する条件を満たすか否かを判断する。
図1の例では、受信したメッセージ122に含まれるオブジェクト型を識別する“W”は、定義情報123に記憶されている。このため、処理装置101は、位置が“X”でデータサイズが“Long”である所定領域の値“a”が、“W”に関連付けられた所定の処理を実行する条件を満たすか否かを判断する。
(5)処理装置101は、判断した結果に応じて、メッセージ122内の直列化データを復元する。例えば、処理装置101は、条件を満たすと判断した場合、メッセージ122内の直列化データを復元する。また、処理装置101は、条件を満たさないと判断した場合、メッセージ122内の直列化データをデシリアライズしてオブジェクトを生成することなく、メッセージ122を破棄する。
このように、処理装置101によれば、受信したデータ(例えば、メッセージ122)に含まれる識別子が定義情報123に記憶されている場合に、データの所定領域の情報が、データに含まれる識別子に関連付けられた所定の処理を実行する条件を満たすか否かを判断し、判断した結果に応じて受信したデータを復元することができる。
これにより、処理装置101は、分析処理などで使用される値を含まずデシリアライズしてオブジェクトが生成されても破棄されるデータに対しては、デシリアライズしてオブジェクトを生成することを行わないようにすることができ、不要なデシリアライズしてオブジェクトを生成することを削減することができる。例えば、複合イベント処理では、多くのデータは所定の処理を実行する条件を満たさず破棄されるため、処理装置101は、不要なデシリアライズしてオブジェクトを生成することを大幅に削減することができる。
なお、処理装置101における、所定の処理を実行する条件を満たすか否かの判断では、オブジェクトのすべてのフィールドの値を参照するのではなく、一部のフィールドの値しか参照しない場合がある。このため、定義情報121には、条件を満たすか否かの判断で参照される一部のフィールドの値についてのみ、メッセージ内の所定領域を示す情報が含まれることにしてもよい。
(処理システム100のシステム構成例)
図3は、実施の形態1にかかる処理システム100のシステム構成例を示す説明図である。図3において、処理システム100は、ノードN1〜Nn(n:2以上の自然数)と、管理装置103と、を含む。ノードN1〜Nnおよび管理装置103は、有線または無線のネットワーク300を介して接続される。ネットワーク300は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
ノードN1〜Nnは、データの送受信を行うコンピュータである。ノードN1〜Nnおよび管理装置103は、例えば、サーバ、PC(パーソナル・コンピュータ)などである。以下の説明では、ノードN1〜Nnのうち、データを受信する受信側のノードを「受信ノードNi」と表記し(i=1,2,…,n)、データを送信する送信側のノードを「送信ノードNj」と表記する場合がある(j≠i、j=1,2,…,n)。
図1に示した処理装置101は、受信ノードNiに対応する。また、図1に示した処理装置102は、送信ノードNjに対応する。なお、各ノードN1〜Nnは、受信ノードNiおよび送信ノードNjのいずれのノードにもなり得る。
(ノードN1〜Nnのハードウェア構成例)
次に、図3に示したノードN1〜Nnのハードウェア構成例について説明する。ここでは、各ノードN1〜Nnを、単に「ノードN」と表記する。
図4は、ノードN1〜Nnのハードウェア構成例を示すブロック図である。図4において、ノードNは、CPU401と、メモリ402と、I/F(Interface)403と、磁気ディスクドライブ404と、磁気ディスク405とを有する。また、各構成部は、バス400によってそれぞれ接続される。
ここで、CPU401は、ノードNの全体の制御を司る。メモリ402は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU401のワークエリアとして使用される。メモリ402に記憶されるプログラムは、CPU401にロードされることで、コーディングされている処理をCPU401に実行させる。
I/F403は、通信回線を通じてネットワーク300に接続され、ネットワーク300を介して他のコンピュータ(例えば、他のノードNや管理装置103)に接続される。そして、I/F403は、ネットワーク300と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。I/F403には、例えば、モデムやLANアダプタなどを採用することができる。
磁気ディスクドライブ404は、CPU401の制御にしたがって磁気ディスク405に対するデータのリード/ライトを制御する。磁気ディスク405は、磁気ディスクドライブ404の制御で書き込まれたデータを記憶する。
なお、ノードNは、上述した構成部のほか、例えば、SSD(Solid State Drive)、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、図3に示した管理装置103についても、上述したノードNと同様のハードウェア構成例により実現することができる。
(定義情報テーブル500の一例)
図5は、受信ノードNiの定義情報テーブル500の一例を示す説明図である。図5において、受信ノードNiの定義情報テーブル500は、例えば、後述する受信ノードNiの更新部1305によって作成、更新され、受信ノードNiのメモリ402または磁気ディスク405に記憶される。
定義情報テーブル500は、オブジェクト型、バージョン番号、フィールド名、位置、フォーマットおよび条件の項目を有する。定義情報テーブル500は、各項目に情報を設定することで、定義情報(例えば、定義情報500−1〜500−8)をレコードとして記憶する。
ここで、オブジェクト型は、オブジェクトの種類を識別する識別子である。バージョン番号は、定義情報のバージョンを示す番号である。バージョン番号は、オブジェクト型ごとに定義され、定義が更新されるとインクリメントされる。フィールド名は、オブジェクト型のフィールドを識別する識別子である。オブジェクト型のフィールドの中で、メッセージ内に埋め込むフィールドのフィールド名が記憶される。位置は、当該レコードのフィールド名のフィールドがメッセージ内で格納される順番を示す。フォーマットは、当該レコードのフィールド名のフィールドがメッセージ内で格納される形式を示す。条件は、オブジェクト型のフィールドの値に対する条件である。
定義情報テーブル500に記憶された、「フィールド名」の情報は、「オブジェクト型」のオブジェクトをシリアライズしたバイト列とは異なる、メッセージ内の所定領域に埋め込まれる。以下の説明では、メッセージ内の所定領域に埋め込まれるフィールド名を、「高速化フィールド名」と表記し、高速化フィールド名を有するオブジェクト型を、「高速化オブジェクト型」と表記する場合がある。また、高速化オブジェクト型で識別されるオブジェクトを載せたメッセージを、「高速化メッセージ」と表記する場合がある。
図5の例では、CarPosition、PersonPositionがメッセージ内に高速化オブジェクト型として定義されている。CarPositionのバージョン番号は2であり、PersonPositionのバージョン番号は4である。CarPositionの中で、PositionX、PositionY、CarName、CarType、CarModelが高速化フィールド名として定義されている。PersonPositionの中で、PositionX、PositionY、PositionHが高速化フィールド名として定義されている。
これらのフィールド名のメッセージ上の位置とフォーマットが、定義情報テーブル500内の位置とフォーマットの項目で示されている。図5の例では、Longは8バイト、Integerは4バイトの固定長フィールドで、Stringは可変長フィールドである。例えば、可変長フィールドはメッセージのフィールド記憶領域の先頭にその長さが記述されている。また、メッセージにフィールドの値を埋め込む際、固定長フィールド、可変長フィールドの順で記録してもよい。この場合、固定長フィールドは位置が一定であるため、メッセージ上で固定長フィールドの位置は容易に特定できる。
可変長フィールドは、メッセージごとにメッセージ上での位置が異なる。このため、可変長フィールドの位置の特定は、可変長フィールドを順に先頭の長さの記述を解析して次の可変長フィールドの位置を特定することを繰り返せばよい。
例えば、CarNameの長さが10、CarTypeの長さが14、CarModelの長さが16である場合を想定する。この場合、これらのメッセージ上での格納位置は、CarNameが可変長フィールドの先頭に記述されているのでフィールド格納位置の先頭から8+8=16バイト目である。CarTypeはCarNameの長さを読み取ってそれを加えて16+10=26バイト目であり、CarModelも同様に26+14=40バイト目となる。
また、図5の例では、CarPosition内のフィールド名PositionXと、PositionYと、CarTypeとに条件が定義されている。なお、受信ノードNiの定義情報テーブル500のフィールド名に対して条件が定義されない場合は、条件フィールドは空白にしてもよい。
(定義情報テーブル600の一例)
図6は、送信ノードNjの定義情報テーブル600の一例を示す説明図である。図6において、送信ノードNjの定義情報テーブル600は、例えば、後述する送信ノードNjの更新部1206によって作成、更新され、送信ノードNjのメモリ402または磁気ディスク405に記憶される。
定義情報テーブル600は、オブジェクト型、バージョン番号、フィールド名、位置およびフォーマットの項目を有する。定義情報テーブル600は、各項目に情報を設定することで、定義情報(例えば、定義情報600−1〜600−8)をレコードとして記憶する。
ここで、オブジェクト型、バージョン番号、フィールド名、位置およびフォーマットは、それぞれの定義情報テーブル500の同じ名前の項目と同じ情報を保存する。
(統計情報700の一例)
ここで、送信ノードNjが管理装置103に送信する統計情報700の一例について説明する。
図7は、送信ノードNjが管理装置103に送信する統計情報700の一例を示す説明図である。図7において、送信ノードNjが管理装置103に送信する統計情報700は、例えば、送信ノードNjの算出部1205によって算出され、送信ノードNjの通信部1204によって管理装置103に送信される。
統計情報700は、CPU負荷、コネクション識別子、測定期間、オブジェクト型、送信回数およびシリアライズコストを記録する。ここで、CPU負荷は、送信ノードNjのCPU負荷を示す。例えば、CPU負荷は、測定期間でのCPU使用率の平均値を使用してもよい。コネクション識別子とは、送信ノードNjと受信ノードNiとの間のコネクションを識別するためのものである。コネクション識別子は、コネクションごとに異なるオブジェクト型およびフィールド名を使用する場合に、コネクションを区別するために使用される。全コネクションで共通の定義を使用する場合、送信ノードNjはコネクション識別子を管理装置103に送信しなくてもよい。コネクション識別子は、受信ノードNiが管理装置103に送信するコネクション識別子と同じであるため、省略してもよい。
測定期間は、オブジェクト型ごとの送信回数を測定する期間である。例えば、管理装置103が、測定期間を送信ノードNjに予め通知しておく。オブジェクト型ごとの送信回数は、測定期間において、オブジェクト型で識別されるオブジェクトを送信ノードNjが送信した回数である。オブジェクト型ごとの送信回数は、受信ノードNiが管理装置103に送信するオブジェクト型ごとの受信回数と同じであるため、省略してもよい。オブジェクト型ごとのシリアライズコストは、オブジェクト型で識別されるオブジェクトのシリアライズにかかるコストである。オブジェクト型で識別されるオブジェクトのシリアライズにかかるCPU時間であってもよい。このシリアライズコストは、静的に決定される場合、省略してもよい。シリアライズコストが、動的に変化する場合、一定時間ごとの平均値を使用してもよい。
送信ノードNjは、例えば、以下の第1から第3の方法によりシリアライズコストを算出することができる。
第1の方法:実測による方法。送信ノードNjは、所定回数に1回の割合で、実際にシリアライズに要したCPU時間を測定し、平均をシリアライズコストとする。ただし、CPU時間の測定は、CPUにとって、負荷が高いので、シミュレーション等で行ってもよい。
第2の方法:モデルによる方法(1)。送信ノードNjは、オブジェクトまたはフィールドを内包するフィールドの個数を数え、数えた個数をシリアライズコストとする。リフレクションが最も高コストであるため、この方法は、リフレクションの回数をシリアライズコストとする。
例えば、以下のJavaクラスのシリアライズコストを求める。
Class CarPosition {
long PositionX
long PositionY
int PositionH
String CarName
String CarType
String CarModel
}
CarPositionクラス自身のリフレクションと、フィールドのうちJavaプリミティブでなくて復元にリフレクションを行うものが3つ(CarName,CarType,CarModel)あるため、シリアライズコストは1+3=4となる。Stringの長さが小さい場合に、第2の方法によるシリアライズコストの算出は有効に機能する。
第3の方法:モデルによる方法(2)。送信ノードNjは、オブジェクトのサイズを測り、測ったサイズをシリアライズコストとする。ここで、オブジェクトのサイズとは、オブジェクトのすべてのフィールドのデータサイズを合計したサイズである。動画ファイルなど極めて巨大なオブジェクトの場合、オブジェクトのサイズによりシリアライズ時間が決定されるため、この方法が効果的である。
(統計情報800の一例)
ここで、受信ノードNiが管理装置103に送信する統計情報800の一例について説明する。
図8は、受信ノードNiが管理装置103に送信する統計情報800の一例を示す説明図である。受信ノードNiが管理装置103に送信する統計情報800は、例えば、受信ノードNiの算出部1304によって作成され、受信ノードNiの通信部1301によって管理装置103に送信される。
受信ノードNiが管理装置103に送信する統計情報800は、CPU負荷、コネクション識別子、測定期間、オブジェクト型、受信回数、フィールド名、参照回数およびデシリアライズコストを記録する。
ここで、CPU負荷は、受信ノードNiのCPU負荷を示す。例えば、CPU負荷は、測定期間でのCPU使用率の平均値を使用してもよい。コネクション識別子は、コネクションごとに異なるオブジェクト型およびフィールド名を使用する場合に、コネクションを区別するために使用される。 全コネクションで共通の定義を使用する場合、受信ノードNiはコネクション識別子を管理装置103に送信しなくてもよい。
測定期間は、オブジェクト型ごとの受信回数とフィールド名ごとの参照回数とを測定する期間である。例えば、管理装置103が、測定期間を受信ノードNiに予め通知しておく。オブジェクト型ごとの受信回数は、測定期間において、オブジェクト型で識別されるオブジェクトを受信ノードNiが受信した回数である。フィールド名ごとの参照回数は、測定期間において、オブジェクト内のフィールド名を受信ノードNiの判断部1302が参照した回数である。オブジェクト型ごとの受信回数は、すべてのオブジェクト型に対して測定してもよく、受信回数が一定数より多いオブジェクト型についてのみ測定してもよい。すべてのオブジェクト型に対して測定しても、受信回数が一定数より多いオブジェクト型についてのみ管理装置103に送信してもよい。フィールド名ごとの参照回数も、すべてのフィールド名に対して測定してもよく、参照回数が一定数より多いフィールド名についてのみ測定してもよい。すべてのフィールド名に対して測定しても、参照回数が一定数より多いフィールド名についてのみ管理装置103に送信してもよい。オブジェクト型ごとのデシリアライズコストは、オブジェクト型で識別されるオブジェクトをデシリアライズして生成することにかかるコストである。オブジェクト型で識別されるオブジェクトをデシリアライズして生成することにかかるCPU時間であってよい。このデシリアライズコストは、静的に決定される場合、省略してもよい。デシリアライズコストが、動的に変化する場合、一定時間ごとの平均値を使用してもよい。
(定義情報900の一例)
ここで、管理装置103が送信ノードNjと受信ノードNiに送信する定義情報900の一例について説明する。
図9は、管理装置103が送信ノードNjと受信ノードNiに送信する定義情報900の一例を示す説明図である。管理装置103が送信ノードNjと受信ノードNiに送信する定義情報900は、例えば、管理装置103の決定部1102によって作成され、管理装置103のメモリ402または磁気ディスク405に記憶される。また、定義情報900は、例えば、管理装置103の通知部1103によって、送信ノードNjと受信ノードNiに送信される。
管理装置103が送信ノードNjと受信ノードNiに送信する定義情報900は、オブジェクト型と、オブジェクト型ごとのバージョン番号と、フィールド名と、フィールド名で識別されるフィールドの位置と格納フォーマットと、を関連付けて記憶する。
ここでオブジェクト型は、オブジェクトの種類を識別する識別子である。バージョン番号は、定義のバージョンを示す番号である。バージョン番号は、オブジェクト型ごとに定義され、定義が更新されると増加される。フィールド名は、オブジェクト型のフィールドを識別する識別子である。オブジェクト型のフィールドの中で、メッセージ内に埋め込むフィールドが記憶される。位置は、当該レコードのフィールド名のフィールドがメッセージ内で格納される順番を示す。フォーマットは、当該レコードのフィールド名のフィールドがメッセージ内で格納される形式を示す。また、フィールド名、位置およびフォーマットがすべてヌルのオブジェクト型は、メッセージに埋め込むオブジェクトとして扱わないことを示す。
管理装置103が送信した定義情報900を受信した受信ノードNiは、受信ノードNiの定義情報テーブル500を更新する。また、管理装置103が送信した定義情報900を受信した送信ノードNjは、送信ノードNjの定義情報テーブル600を更新する。
図9の例では、送信ノードNjと受信ノードNiは、オブジェクト型CarPosition、PersonPositionのレコードを、作成または更新し、オブジェクト型TrainPositionのレコードを削除する。
(高速化メッセージ1000の一例)
ここで、送信ノードNjと受信ノードNiが送受信する高速化フィールドを含む高速化メッセージ1000の一例について説明する。
図10は、送信ノードNjと受信ノードNiが送受信する高速化フィールドを含む高速化メッセージ1000の一例を示す説明図である。送信ノードNjと受信ノードNiが送受信する高速化フィールドを含む高速化メッセージ1000は、例えば、送信ノードNjの埋込部1203によって作成され、通信部1204によって送信され、受信ノードNiの通信部1301で受信される。
送信ノードNjと受信ノードNiが送受信する高速化フィールドを含む高速化メッセージ1000は、ヘッダとボディを有し、ヘッダは、一般ヘッダ情報と高速化フィールド情報とを有する。ここで、ヘッダは、メッセージの先頭に格納され、メッセージに関する情報を格納する。ボディは、データ本体を格納する。一般ヘッダ情報は、メッセージの送信者、受信者、経由したサーバおよび題名等、メッセージの送受信に不可欠な情報を記憶する。例えば、一般ヘッダ情報は、IPヘッダ、TCPヘッダ等を格納する。高速化フィールド情報は、高速化フィールドに関する情報を格納する。
高速化フィールド情報は、高速化オブジェクトの有無の識別子、オブジェクト型識別子、バージョン番号および高速化フィールドを有する。オブジェクト型識別子は、複数存在することができる。バージョン番号および高速化フィールドは、オブジェクト型識別子ごとに存在し、複数存在することができる。ボディは、高速化フィールド情報のオブジェクト型識別子で識別されるオブジェクトをシリアライズしたバイト列を有する。
高速化オブジェクトの有無の識別子は、高速化オブジェクトを含むメッセージであるかどうかを示す識別子である。受信ノードNiは、高速化オブジェクトの有無の識別子により、高速化フィールドを含むメッセージであるか、高速化フィールドを含まないメッセージであるかを判別することができる。例えば、当該識別子が存在する場合、受信ノードNiは、受信したメッセージが高速化オブジェクトを含むメッセージであると判別することができる。この場合、高速化フィールドを含まないメッセージは、従来通りのメッセージ形式でそのまま送信することができる。また、当該識別子は、高速化オブジェクトが存在する、または、しないを示すフラグであってもよい。
(管理装置103の機能的構成例)
図11は、実施の形態1にかかる管理装置103の機能的構成例を示すブロック図である。図11において、管理装置103は、受信部1101と、決定部1102と、通知部1103とを含む構成である。各機能部は、具体的には、例えば、図4に示したメモリ402などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。各機能部の処理結果は、例えば、図4に示したメモリ402などの記憶装置に記憶される。
受信部1101は、送信ノードNjと受信ノードNiから統計情報700、800を受信する機能を有する。受信部1101は、受信した統計情報700、800を決定部1102に渡す。
決定部1102は、受信した統計情報700、800から高速化オブジェクト型および高速化フィールド名を定義する定義情報900を決定する機能を有する。決定部1102は、決定した定義情報900を通知部1103に渡す。決定部1102は、例えば、次のようにして、定義情報900を決定する。
決定部1102は、例えば、受信した統計情報700から、統計情報700を送信した送信ノードNjを区別せずに、オブジェクト型ごとに、送信頻度とシリアライズコストの積を算出する。送信頻度とは、単位時間での送信回数のことである。例えば、送信回数を測定期間で割ることにより求められる。また、送信頻度として、送信回数を使用することも可能である。決定部1102は、算出した積の値が大きいものから順に所定数のオブジェクト型を高速化オブジェクト型として決定する。また、算出した積の値が、所定の閾値以上のオブジェクト型を高速化オブジェクト型として決定することもできる。また、算出した積の値の全体のうち所定の割合をカバーするまで、算出した積の値が大きいものから順に高速化オブジェクト型を決定することができる。所定数、所定の閾値および所定の割合は、シミュレーション等で事前に決定しておき、管理装置103に設定しておくことができる。
また、決定部1102は、例えば、受信した統計情報800から、統計情報800を送信した受信ノードNiを区別せずに、オブジェクト型ごとに、受信頻度とデシリアライズコストの積を算出する。受信頻度とは、単位時間での受信回数のことである。例えば、受信回数を測定期間で割ることにより求められる。また、受信頻度として、受信回数を使用することも可能である。決定部1102は、受信した統計情報700と同様に高速化オブジェクト型を決定することができる。さらに、決定部1102は、統計情報800から決定した高速化オブジェクト型の中で、参照頻度が所定の閾値以上のフィールド名を抽出して、高速化フィールド名を決定することもできる。この所定の閾値も、シミュレーション等で事前に決定しておき、管理装置103に設定しておくことができる。
さらに、決定部1102は、次のようにして、定義情報900を決定することもできる。決定部1102は、受信した統計情報700から、統計情報700を送信した送信ノードNjのCPU負荷が最も高い送信ノードNjから受信した統計情報700を選択する。決定部1102は、選択した統計情報700からオブジェクト型ごとに、送信頻度とシリアライズコストの積を算出する。決定部1102は、算出した積の値が大きいものから順に所定数のオブジェクト型を高速化オブジェクト型として決定する。また、算出した積の値が、所定の閾値以上のオブジェクト型を高速化オブジェクト型として決定することもできる。また、算出した積の値の全体のうち所定の割合をカバーするまで、算出した積の値が大きいものから順に高速化オブジェクト型を決定することができる。ここでの所定数、所定の閾値および所定の割合も、シミュレーション等で事前に決定しておき、管理装置103に設定しておくことができる。
また、決定部1102は、受信した統計情報800から、統計情報800を送信した受信ノードNiのCPU負荷が最も高い受信ノードNiから受信した統計情報800を選択する。決定部1102は、選択した統計情報800からオブジェクト型ごとに、受信頻度とデシリアライズコストの積を算出する。決定部1102は、受信した統計情報700と同様に高速化オブジェクト型を決定することができる。さらに、決定部1102は、統計情報800から決定した高速化オブジェクト型の中で、参照頻度が所定の閾値以上のフィールド名を抽出して、高速化フィールド名を決定することもできる。この所定の閾値も、シミュレーション等で事前に決定しておき、管理装置103に設定しておくことができる。
また、決定部1102は、受信ノードNi、送信ノードNjを区別せずに、受信頻度とデシリアライズコストの積および送信頻度とシリアライズコストの積の値が大きいものから順に所定数のオブジェクト型を高速化オブジェクト型として決定することもできる。また、受信ノードNi、送信ノードNjを区別せずに、算出した積の値が、所定の閾値以上のオブジェクト型を高速化オブジェクト型として決定することもできる。また、受信ノードNi、送信ノードNjを区別せずに、算出した積の値の全体のうち所定の割合をカバーするまで、算出した積の値が大きいものから順に高速化オブジェクト型を決定することができる。
決定部1102は、決定した高速化オブジェクト型を、定義情報900に登録して、バージョン番号を定義する。決定部1102は、決定した高速化オブジェクト型が、定義情報900にすでに登録されている場合は新しいバージョン番号を定義する。例えば、バージョン番号を増加する。
決定部1102は、高速化オブジェクト型ごとに、フィールド名で識別されるフィールドのメッセージ内での位置とフォーマットを決定して、定義情報900に登録する。
また、決定部1102は、受信ノードNiから受信した統計情報800および送信ノードNjから受信した統計情報700を記憶装置に保存することもできる。この場合、決定部1102は、統計情報800および統計情報700を受信した場合、記憶装置に保存した統計情報を更新する。決定部1102は、記憶装置に保存した統計情報に基づいて、高速化オブジェクト型、高速化フィールド名を決定することもできる。
決定部1102は、受信ノードNiから受信した統計情報800および送信ノードNjから受信した統計情報700の両方だけでなく、一方の統計情報に基づいて、高速化オブジェクト型、高速化フィールド名を決定することもできる。例えば、ボトルネックが明確に受信ノードNiだけの場合、受信ノードNiから受信した統計情報800から高速化オブジェクト型、高速化フィールド名を決定してもよい。
決定部1102は、すべての送信ノードNjの性能が同じならば、オブジェクト型ごとのシリアライズコストは同じになるので、この場合は別表とし、オブジェクト型ごとのシリアライズコストを持ってもよい。同様に、決定部1102は、すべての受信ノードNiの性能が同じならば、オブジェクト型ごとのデシリアライズコストは同じになるので、この場合は別表とし、オブジェクト型ごとのデシリアライズコストを持ってもよい。これらの場合、送信ノードNj、受信ノードNiは、それぞれシリアライズコスト、デシリアライズコストを算出して、管理装置103に送信しなくてもよい。
通知部1103は、定義情報900を送信ノードNjと受信ノードNiに通知する機能を有する。
(送信ノードNjの機能的構成例)
図12は、実施の形態1にかかる送信ノードNjの機能的構成例を示すブロック図である。図12において、送信ノードNjは、直列化部1201と、判断部1202と、埋込部1203と、通信部1204と、算出部1205と、更新部1206と、定義情報データベース1207とを含む構成である。各機能部は、具体的には、例えば、図4に示したメモリ402などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。各機能部の処理結果は、例えば、図4に示したメモリ402などの記憶装置に記憶される。
直列化部1201は、送信するオブジェクトをシリアライズしたバイト列に変換する機能を有する。直列化部1201は、変換したバイト列を判断部1202に渡す。
判断部1202は、送信するオブジェクトを識別するオブジェクト型が、定義情報900に登録されているか判断する機能を有する。判断部1202は、上記オブジェクト型が定義情報900に登録されている場合、埋込部1203に上記オブジェクト型が登録されていることを通知し、判断部1202から渡されたバイト列を埋込部1203に渡す。判断部1202は、上記オブジェクト型が定義情報900に登録されていない場合、直列化部1201から渡されたバイト列を含むメッセージを作成し、作成したメッセージを通信部1204に渡す。
埋込部1203は、定義情報900に記載される位置とフォーマットに従いメッセージに高速化フィールドを埋め込み、オブジェクト型および直列化部1201から渡されたバイト列を含む高速化メッセージ1000を作成する。埋込部1203は、作成した高速化メッセージ1000を通信部1204に渡す。
通信部1204は、判断部1202から渡されたメッセージおよび埋込部1203から渡された高速化メッセージ1000を受信ノードNiに送信する機能を有する。また、通信部1204は、算出部1205が算出した統計情報700を管理装置103に送信する機能を有する。また、通信部1204は、管理装置103が送信した定義情報900を受信する機能を有する。通信部1204は、受信した定義情報900を更新部1206に渡す。
通信部1204は、算出部1205が算出した統計情報700を一定の期間ごとに管理装置103に送信してもよい。また、通信部1204は、統計情報700の内容が前回送信した内容から大きな変動が生じたとき、管理装置103に送信してもよい。例えば、送信頻度とシリアライズコストとの積の大きさの順番が変動したとき、管理装置103に統計情報700を送信する。また、管理装置103は、その他の統計情報の収集や受信ノードNiと送信ノードNjの管理処理を兼ねている場合があるため、通信部1204は、その他の統計情報や管理情報とともに管理装置103に統計情報700を送信してもよい。また、通信部1204は、送信ノードNjが高負荷になったときに統計情報700を管理装置103に送信してもよい。送信ノードNjは、緊急リクエストのような意味合いで、負荷の適正化を管理装置103に要求することもできる。管理装置103は、高負荷の通知を受けて負荷の適正化のために高速化オブジェクト型、高速化フィールド名の再決定を行う。また、通信部1204は、管理装置103が要求したタイミングで管理装置103に統計情報700を送信してもよい。例えば、受信ノードNiまたは送信ノードNjから、負荷の適正化要求があった場合、管理装置103は、すべて受信ノードNiまたは送信ノードNjに対して統計情報700、800を要求する。管理装置103は、受信した統計情報700、800に基づいて、高速化オブジェクト型、高速化フィールド名の再決定を行う。
算出部1205は、統計情報700を算出する機能を有する。算出部1205は、算出した統計情報700を通信部1204に渡す。
更新部1206は、通信部1204から渡された定義情報900に基づいて、定義情報データベース1207に記憶される定義情報テーブル600を更新する機能を有する。更新部1206は、定義情報900からオブジェクト型とバージョン番号を取得する。更新部1206は、フィールド名、位置およびフォーマットがヌルである場合、当該オブジェクト型を定義情報テーブル600から削除する。更新部1206は、フィールド名、位置およびフォーマットがヌルでない場合、当該オブジェクト型で定義情報テーブル600を更新する。
(受信ノードNiの機能的構成例)
図13は、実施の形態1にかかる受信ノードNiの機能的構成例を示すブロック図である。図13において、受信ノードNiは、通信部1301と、判断部1302と、復元部1303と、算出部1304と、更新部1305と、定義情報データベース1306とを含む構成である。各機能部は、具体的には、例えば、図4に示したメモリ402などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。各機能部の処理結果は、例えば、図4に示したメモリ402などの記憶装置に記憶される。
通信部1301は、送信ノードNjから送信されたメッセージを受信する機能を有する。通信部1301は、受信したメッセージを判断部1302に渡す。また、通信部1301は、算出部1304が算出した統計情報800を管理装置103に送信する機能を有する。また、通信部1301は、管理装置103が送信した定義情報900を受信する機能を有する。通信部1301は、受信した定義情報900を更新部1305に渡す。
また、通信部1301は、送信ノードNjの通信部1204と同じタイミングで、算出した統計情報800を管理装置103に送信してもよい。
判断部1302は、通信部1301から渡されたメッセージが高速化メッセージ1000である場合、所定の条件を満たすか否かの判断を行う機能を有する。また、判断部1302は、通信部1301から渡されたメッセージが高速化メッセージ1000でない場合、メッセージを復元部1303に渡す機能を有する。
判断部1302は、例えば、高速化オブジェクトの有無を示す識別子より、通信部1301から渡されたメッセージが高速化メッセージ1000であるか否かの判断を行う。判断部1302は、高速化メッセージ1000である場合、高速化メッセージ1000からオブジェクト型とバージョン番号を取得する。判断部1302は、取得したオブジェクト型とバージョン番号が定義情報テーブル500に定義されているか判断する。判断部1302は、定義されたオブジェクト型である場合、定義情報テーブル500に定義された位置とフォーマットに基づき高速化フィールドの値を取り出す。判断部1302は、取り出した値が、定義情報テーブル500の条件を満たすか否か判断する。判断部1302は、条件を満たさないと判断した場合、高速化メッセージ1000を破棄する。判断部1302は、条件を満たすと判断した場合、当該オブジェクト型に関係した定義情報テーブル500の他の高速化フィールドの値が条件を満たすか否か判断する。判断部1302は、1つでも条件を満たさないと判断した場合、高速化メッセージ1000を破棄する。判断部1302は、すべてのフィールドの値が条件を満たす場合、高速化メッセージ1000の他の高速化オブジェクトに対しても同様の判断を行う。判断部1302は、高速化メッセージ1000のすべての高速化オブジェクトの高速化フィールドの値が条件を満たす場合、高速化メッセージ1000を復元部1303に渡す。
復元部1303は、判断部1302から渡されたメッセージおよび高速化メッセージ1000のバイト列からオブジェクトを復元する機能を有する。復元部1303は、例えば、復元したオブジェクトを受信ノードNiで分析等の処理を行うプログラムに渡す。
算出部1304は、統計情報800を算出する機能を有する。算出部1304は、算出した統計情報800を通信部1301に渡す。
更新部1305は、通信部1301から渡された定義情報900に基づいて、定義情報データベース1306に記憶される定義情報テーブル500を更新する機能を有する。更新部1305は、定義情報900からオブジェクト型とバージョン番号を取得する。更新部1305は、フィールド名、位置およびフォーマットがヌルである場合、当該オブジェクト型を定義情報テーブル500から削除する。更新部1305は、フィールド名、位置およびフォーマットがヌルでない場合、当該オブジェクト型で定義情報テーブル500を登録する。
(受信ノードNiのデータ処理)
図14は、実施の形態1にかかる受信ノードNiのデータ受信処理手順の一例を示すフローチャートである。図14のフローチャートにおいて、まず、通信部1301は、送信ノードNjから送信されたメッセージを受信する(ステップS1401)。次に、判断部1302は、受信したメッセージが高速化メッセージ1000であるか否かの判断を行う(ステップS1402)。
受信したメッセージが高速化メッセージ1000である場合(ステップS1402:Yes)、判断部1302は、高速化メッセージ1000からオブジェクト型とバージョン番号を取得する(ステップS1403)。次に、判断部1302は、取得したオブジェクト型とバージョン番号が定義情報テーブル500に定義されているか否かを判断する(ステップS1404)。取得したオブジェクト型とバージョン番号が定義情報テーブル500に定義されている場合(ステップS1404:Yes)、判断部1302は、定義情報テーブル500に定義された位置とフォーマットに基づき高速化フィールドの値を取り出す(ステップS1405)。判断部1302は、取り出した値が、定義情報テーブル500の条件を満たすか否か判断する(ステップS1406)。定義情報テーブル500の条件を満たさない場合(ステップS1406:No)、判断部1302は、受信したメッセージを破棄する(ステップS1411)。
定義情報テーブル500の条件を満たす場合(ステップS1406:Yes)、判断部1302は、次の高速化フィールドがあるか否か判断する(ステップS1407)。次の高速化フィールドがある場合(ステップS1407:Yes)、ステップS1405に移行して、判断部1302は、次の高速化フィールドに対する処理を行う。次の高速化フィールドがない場合(ステップS1407:No)、判断部1302は、次のオブジェクト型があるか否か判断する(ステップS1408)。次のオブジェクト型がある場合(ステップS1408:Yes)、ステップS1403に移行して、判断部1302は、次のオブジェクト型に対する処理を行う。
次のオブジェクト型がない場合(ステップS1408:No)、復元部1303は、受信したメッセージのバイト列からオブジェクトを復元する(ステップS1409)。受信したメッセージが高速化メッセージ1000でない場合(ステップS1402:No)および取得したオブジェクト型とバージョン番号が定義情報テーブル500に定義されていない場合(ステップS1404:No)も、復元部1303は、同様の処理を行う。
その後、受信ノードNiが復元したオブジェクトを分析等の処理をする(ステップS1410)。受信ノードNiは、分析等の処理終了後、受信したメッセージを破棄する(ステップS1411)。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、受信ノードNiが受信したメッセージが高速化メッセージ1000である場合、受信ノードNiは、オブジェクトを復元することなく、オブジェクトのフィールドの値が条件を満たすか判断することができる。
(送信ノードNjのデータ処理)
図15は、実施の形態1にかかる送信ノードNjのデータ送信処理手順の一例を示すフローチャートである。図15のフローチャートにおいて、まず、直列化部1201は、送信するオブジェクトをシリアライズしたバイト列に変換する(ステップS1501)。次に、判断部1202は、送信するオブジェクトを識別するオブジェクト型が、定義情報900に登録されているか否かを判断する(ステップS1502)。
定義情報900に登録されている場合(ステップS1502:Yes)、埋込部1203は、定義情報900に記載される位置とフォーマットに従いメッセージに高速化フィールドを埋め込み、オブジェクト型および直列化部1201から渡されたバイト列を含む高速化メッセージ1000を作成する(ステップS1503)。この後、ステップS1505に移行する。
定義情報900に登録されていない場合(ステップS1502:No)、判断部1202は、直列化部1201から渡されたバイト列を含むメッセージを作成する(ステップS1504)。
通信部1204は、メッセージおよび高速化メッセージ1000を受信ノードNiに送信する(ステップS1505)。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、送信ノードNjが送信するオブジェクトのオブジェクト型が定義情報900に登録されている場合、高速化メッセージ1000が作成され、受信ノードNiに送信される。
(受信ノードNiの定義情報テーブル500更新処理)
図16は、実施の形態1にかかる受信ノードNiの定義情報テーブル500の更新処理手順の一例を示すフローチャートである。図16のフローチャートにおいて、まず、通信部1301は、管理装置103が送信した定義情報900を受信する(ステップS1601)。次に、更新部1305は、定義情報900からオブジェクト型とバージョン番号を取得する(ステップS1602)。更新部1305は、取得したオブジェクト型とバージョン番号のレコードが、無効指示、つまりフィールド名、位置およびフォーマットがヌルであるか否か判断する(ステップS1603)。
更新部1305は、フィールド名、位置およびフォーマットがヌルでない場合(ステップS1603:No)、当該オブジェクト型、バージョン番号、フィールド名、位置およびフォーマットを定義情報テーブル500を更新する(ステップS1604)。この後、ステップS1606に移行する。更新部1305は、フィールド名、位置およびフォーマットがヌルである場合(ステップS1603:Yes)、当該オブジェクト型を定義情報テーブル500から削除する(ステップS1605)。
更新部1305は、定義情報900に次のオブジェクト型があるか否かを判断する(ステップS1606)。次のオブジェクト型がある場合(ステップS1606:Yes)、更新部1305は、ステップS1602に戻り、次のオブジェクト型に対する処理を行う。次のオブジェクト型がない場合(ステップS1606:No)、更新部1305は、処理を終了する。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、受信ノードNiの定義情報テーブル500が更新される。
また、送信ノードNjの定義情報テーブル600の更新処理も、受信ノードNiの定義情報テーブル500の更新処理と同様の手順で行うことができる。
(管理装置103の高速化オブジェクト決定処理)
図17は、実施の形態1にかかる管理装置103の高速化オブジェクト決定処理手順の一例を示すフローチャートである。図17に示すフローチャートは、管理装置103が受信ノードNiから統計情報800を受信した場合のフローチャートである。図17のフローチャートにおいて、まず、受信部1101は、受信ノードNiから統計情報800を受信する(ステップS1701)。
次に、決定部1102は、受信した統計情報800から、統計情報800を送信した受信ノードNiのCPU負荷が最も高い受信ノードNiから受信した統計情報800を抽出する(ステップS1702)。決定部1102は、抽出した統計情報800からオブジェクト型ごとに、受信頻度とデシリアライズコストの積を算出し、算出した積の値が大きいものから順に所定数のオブジェクト型を高速化オブジェクト型として決定する(ステップS1703)。
決定部1102は、統計情報800から決定した高速化オブジェクト型の中で、参照頻度の高いフィールド名を抽出して、高速化フィールド名を決定する(ステップS1704)。決定部1102は、決定した高速化オブジェクト型と高速化フィールド名を、定義情報900に登録して、バージョン番号を定義する(ステップS1705)。通知部1103は、定義情報900を送信ノードNjと受信ノードNiに通知する(ステップS1706)。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、管理装置103が高速化オブジェクトを決定する。
また、管理装置103が送信ノードNjから統計情報700を受信した場合の高速化オブジェクト決定処理も、管理装置103が受信ノードNiから統計情報800を受信した場合の高速化オブジェクト決定処理と同様の手順で行うことができる。
(受信ノードNiの統計情報800の算出処理)
図18は、実施の形態1にかかる受信ノードNiの統計情報800の算出処理手順の一例を示すフローチャートである。図18のフローチャートにおいて、まず、通信部1301は、送信ノードNjからメッセージを受信する(ステップS1801)。
次に、算出部1304は、メッセージに含まれるオブジェクト型に対応する統計情報800のオブジェクト型の受信回数を増加させる(ステップS1802)。算出部1304は、判断部1302が参照した当該オブジェクト型のフィールド名に対応する統計情報800のフィールド名の参照回数を増加させる(ステップS1803)。算出部1304は、メッセージに含まれるオブジェクト型のデシリアライズコストを算出する(ステップS1804)。
算出部1304は、測定期間が終了したか判断する(ステップS1805)。測定期間が終了しない場合(ステップS1805:No)、ステップS1801に戻り、次のメッセージを処理する。測定期間が終了した場合(ステップS1805:Yes)、通信部1301は、統計情報800を管理装置103に送信する(ステップS1806)。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、受信ノードNiが統計情報800を算出し、統計情報800を管理装置103に送信する。
また、送信ノードNjが統計情報700を算出し、統計情報700を管理装置103に送信する処理も、受信ノードNiの統計情報800の算出処理手順と同様の手順で行うことができる。
(高速化オブジェクト決定処理の第1の実施例)
図19は、実施の形態1にかかる管理装置103の高速化オブジェクト決定処理の第1の実施例を示す説明図である。
図19(a)は、管理装置103が送信ノードNjから受信した統計情報1901の一部の例を示す。図19(b)は、管理装置103が受信ノードNiから受信した統計情報1902の一部の例を示す。図19(a)および図19(b)は、受信した統計情報1901、統計情報1902の一部であり、図19(a)および図19(b)に記載されるnode1〜node3以外のノードの統計情報も含む。図19(a)では、送信頻度として送信回数を使用し、シリアライズコストとしてシリアライズに要したCPU時間を使用する。図19(b)では、受信頻度として受信回数を使用し、デシリアライズコストとしてデシリアライズしてオブジェクトの生成に要したCPU時間を使用する。
決定部1102は、統計情報1901からオブジェクト型ごとに、送信頻度とシリアライズコストの積を算出し、算出した積の値が大きいものから順に並べ替える。図19(c)は、送信頻度とシリアライズコストの積が上位3つのオブジェクト型を示す表である。
決定部1102は、統計情報1902からオブジェクト型ごとに、受信頻度とデシリアライズコストの積を算出し、算出した積の値が大きいものから順に並べ替える。図19(d)は、受信頻度とデシリアライズコストの積が上位3つのオブジェクト型を示す表である。
決定部1102は、受信ノードNi、送信ノードNjを区別することなく、算出した積から、上位3つのオブジェクト型を高速オブジェクト型として決定する。図19の例では、図19(c)からCarPositionEventBeanとPersonPositionEventBeanが高速オブジェクト型として決定される。また、図19(d)からCarPositionEventBeanが高速オブジェクト型として決定される。
(高速化オブジェクト決定処理の第2の実施例)
図20は、実施の形態1にかかる管理装置103の高速化オブジェクト決定処理の第2の実施例を示す説明図である。
図20(a)は、管理装置103が送信ノードNjから受信した統計情報2001の一部の例を示す。図20(b)は、管理装置103が受信ノードNiから受信した統計情報2002の一部の例を示す。図20(a)および図20(b)は、受信した統計情報2001、統計情報2002の一部であり、図20(a)および図20(b)に記載されるnode1〜node3以外のノードの統計情報も含む。図20(a)では、送信頻度として送信回数を使用し、シリアライズコストとしてシリアライズに要したCPU時間を使用する。図20(b)では、受信頻度として受信回数を使用し、デシリアライズコストとしてデシリアライズしてオブジェクトの生成に要したCPU時間を使用する。
決定部1102は、統計情報2001からCPU負荷が最も高いnode2を取り出し、オブジェクト型ごとに、送信頻度とシリアライズコストの積を算出し、算出した積の値が大きいものから順に並べ替える。図20(c)は、node2の送信頻度とシリアライズコストの積が上位3つのオブジェクト型を示す表である。
決定部1102は、統計情報2002からCPU負荷が最も高いnode2を取り出し、オブジェクト型ごとに、受信頻度とデシリアライズコストの積を算出し、算出した積の値が大きいものから順に並べ替える。図20(d)は、node2の受信頻度とデシリアライズコストの積が上位3つのオブジェクト型を示す表である。
決定部1102は、受信ノードNi、送信ノードNjを区別することなく、算出した積から、上位3つのオブジェクト型を高速オブジェクト型として決定する。図20の例では、図20(c)からCarPositionEventBeanが高速オブジェクト型として決定される。また、図20(d)からCarPositionEventBeanとPersonPositionEventBeanが高速オブジェクト型として決定される。
以上説明したように、実施の形態1にかかる受信ノードNiによれば、受信したメッセージに含まれる識別子が定義情報テーブル500に記憶されている場合に、メッセージの所定領域の情報が、当該識別子に関連付けられた定義情報テーブル500の条件を満たすか否かを判断し、判断した結果に応じて受信したメッセージを復元することができる。これにより、受信ノードNiは、分析処理などで使用される値を含まずデシリアライズしてオブジェクトが生成されても破棄されるデータに対しては、デシリアライズしてオブジェクトを生成することを行わないようにすることができ、不要なデシリアライズしてオブジェクトを生成することを削減することができる。
また、処理システム100では、受信ノードNiと送信ノードNjと独立した管理装置103が、処理システム100を管理する。これにより、管理装置103は、複数の通信コネクションの送受信の統計情報700、800を利用し、コネクションごとに高速化オブジェクト型、高速化フィールド名を決定することができる。管理装置103は、処理システム100を管理するため、処理システム100全体で同一の高速化オブジェクト型、高速化フィールド名を決定することができる。
また、管理装置103は、送信ノードNjと受信ノードNiから受信した統計情報700、800に基づいて、高速化オブジェクト型および高速化フィールド名を決定することができる。これにより、実際の通信内容に基づいて、高速化オブジェクト型および高速化フィールド名を決定し、受信ノードNiでデシリアライズしてオブジェクトを生成することにかかるCPUの処理コストを軽減することができる。
また、管理装置103は、受信ノードNiから受信した統計情報700、800の受信頻度とデシリアライズコストの積の中で積の値が大きいものから高速化オブジェクト型および高速化フィールド名を決定することができる。これにより、受信ノードNiの負荷を高めているオブジェクト型およびフィールド名に対するデシリアライズしてオブジェクトを生成することを低減させ、受信ノードNiでデシリアライズしてオブジェクトを生成することにかかるCPUの処理コストを軽減することができる。
(実施の形態2)
次に、実施の形態2にかかる処理方法について説明する。実施の形態2では、ノードN1〜Nn(n:2以上の自然数)の少なくとも1つのノードが、データを受信する受信側のノードと実施の形態1の管理装置103との機能を有する。実施の形態1と同様に、データを受信する受信側のノードを「受信ノードNi」と表記し、データを送信する送信側のノードを「送信ノードNj」と表記する場合がある。なお、実施の形態1で説明した箇所と同一箇所については、図示および説明を省略する。
(処理システム2100のシステム構成例)
図21は、実施の形態2にかかる処理システム2100のシステム構成例を示す説明図である。図21において、処理システム2100は、ノードN1〜Nnを有する。ノードN1〜Nnは、有線または無線のネットワーク300を介して接続される。また、図21において、ノードNnは、受信ノードNiの機能と、実施の形態1の管理装置103の機能とを有するノードである。
(ノードNnの機能的構成例)
図22は、実施の形態2にかかるノードNnの機能的構成例を示すブロック図である。図22において、ノードNnは、通信部2201と、判断部2202と、復元部2203と、算出部2204と、更新部2205と、定義情報データベース2206と、決定部2207とを含む構成である。各機能部は、具体的には、例えば、図4に示したメモリ402などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。各機能部の処理結果は、例えば、図4に示したメモリ402などの記憶装置に記憶される。
通信部2201は、送信ノードNjから送信されたメッセージを受信する機能を有する。通信部2201は、受信したメッセージを判断部2202に渡す。また、通信部2201は、送信ノードNjから統計情報700を受信する機能を有する。通信部2201は、受信した統計情報700を決定部2207に渡す。また、通信部2201は、決定部2207が決定した定義情報900を送信ノードNjに通知する機能を有する。
判断部2202、復元部2203、更新部2205は、それぞれ、実施の形態1の判断部1302、復元部1303、更新部1305と同じ機能を有する。
算出部2204は、統計情報800を算出する機能を有する。算出部2204は、算出した統計情報800を決定部2207に渡す。
決定部2207は、実施の形態1の管理装置103の決定部1102と同じ機能を有する。決定部2207は、決定した定義情報900を通信部2201に渡す。
なお、実施の形態2にかかるノードNnのデータ受信処理手順は、実施の形態1にかかる受信ノードNiのデータ受信処理手順と同様のため、ここでは図示および説明を省略する。また、実施の形態2にかかるノードNnの定義情報テーブル500の更新処理手順は、実施の形態1にかかる受信ノードNiの定義情報テーブル500の更新処理手順と同様のため、ここでは図示および説明を省略する。また、実施の形態2にかかる受信ノードNnの高速化オブジェクト決定処理手順は、実施の形態1にかかる管理装置103の高速化オブジェクト決定処理手順と同様のため、ここでは図示および説明を省略する。また、実施の形態2にかかるノードNnの統計情報800の算出処理手順は、実施の形態1にかかる受信ノードNiの統計情報800の算出処理手順と同様のため、ここでは図示および説明を省略する。
以上説明したように、実施の形態2にかかる処理システム2100では、ノードNnが受信機能と管理機能の両方の機能を有する。これにより、ノードNnは、送信ノードNjと受信ノードNiの通信のコネクションごとに高速化オブジェクト型および高速化フィールド名を決定することができる。また、ノードNnが統計情報800を算出するため、ノードNnのみで高速化オブジェクト型および高速化フィールド名を決定することができる。
なお、本実施の形態で説明した処理プログラムは、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本処理プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本処理プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
データの種類を識別する識別子と所定の処理を実行する条件とが関連付けられた定義情報を記憶し、
データの種類を識別する識別子を含む前記データを受信し、
受信した前記データに含まれる識別子が前記定義情報に記憶されている場合に、前記データの所定領域の情報が、前記データに含まれる識別子に関連付けられた所定の処理を実行する条件を満たすか否かを判断し、
判断した結果に応じて前記データを復元する、
処理を実行させることを特徴とする処理プログラム。
(付記2)前記コンピュータに、
各識別子により識別される種類のデータの受信頻度と該データの復元にかかる処理時間とに基づいて、所定の処理を実行する条件を満たすか否かを判断する対象となるデータの種類を決定し、
決定した前記種類を識別する識別子を所定の処理を実行する条件と関連付けて前記定義情報に登録する、
処理を実行させることを特徴とする付記1に記載の処理プログラム。
(付記3)前記決定する処理は、
前記各識別子により識別される種類のデータの受信頻度と該データの復元にかかる処理時間との積のうち、該積の値が大きいものから順に所定数の識別子、または、該積の値が閾値以上の識別子により識別されるデータの種類を、前記対象となるデータの種類に決定することを特徴とする付記2に記載の処理プログラム。
(付記4)前記コンピュータに、
各識別子により識別される種類のデータの送信頻度と該データの符号化にかかる処理時間とに基づいて、所定の処理を実行する条件を満たすか否かを判断する対象となるデータの種類を決定する、
処理を実行させることを特徴とする付記2に記載の処理プログラム。
(付記5)前記コンピュータに、
各識別子により識別される種類のデータの受信頻度と該データの復元にかかる処理時間を、所定の処理を実行する条件を満たすか否かを判断する対象となるデータの種類を決定する他のコンピュータに送信し、
前記他のコンピュータから前記対象となるデータの種類を識別する識別子を受信したことに応じて、受信した前記識別子を所定の処理を実行する条件と関連付けて前記定義情報に登録する、
処理を実行させることを特徴とする付記1に記載の処理プログラム。
(付記6)各識別子により識別される種類のデータは、項目名により識別される項目を有し、
前記定義情報には、データの種類を識別する識別子と、該識別子により識別される種類のデータの項目名と、所定の処理を実行する条件とが関連付けられて記憶され、
前記判断する処理は、受信した前記データに含まれる識別子が前記定義情報に記憶されている場合に、前記データの所定領域の情報が、前記データに含まれる識別子により識別されるデータの項目名に関連付けられた所定の処理を実行する条件を満たすか否かを判断することを特徴とする付記1に記載の処理プログラム。
(付記7)前記コンピュータに、
各識別子により識別される種類のデータの各項目の参照頻度と該データの復元にかかる処理時間とに基づいて、所定の処理を実行する条件を満たすか否かを判断する対象となるデータの項目名を決定し、
決定した前記データの項目名を所定の処理を実行する条件と関連付けて前記定義情報に登録する、
処理を実行させることを特徴とする付記6に記載の処理プログラム。
(付記8)前記復元する処理は、
前記データの所定領域の情報が、前記データに含まれる識別子に関連付けられた所定の処理を実行する条件を満たすと判断された場合に、前記データを復元することを特徴とする付記1〜7のいずれか一つに記載の処理プログラム。
(付記9)前記コンピュータに、
前記データの所定領域の情報が、前記データに含まれる識別子に関連付けられた所定の処理を実行する条件を満たさないと判断された場合は、前記データを破棄する、
処理を実行させることを特徴とする付記8に記載の処理プログラム。
(付記10)第1処理装置と第2処理装置とを含む処理システムにおいて、
前記第1処理装置は、
データの種類を識別する識別子と所定の処理を実行する条件とが関連付けられた定義情報に記憶された前記識別子を前記第2処理装置に送信し、データの種類を識別する識別子を含む前記データを前記第2処理装置から受信し、受信した前記データに含まれる識別子が前記定義情報に記憶されている場合に、前記データの所定領域の情報が、前記データに含まれる識別子に関連付けられた所定の処理を実行する条件を満たすか否かを判断し、判断した結果に応じて前記データを復元する制御部を有し、
前記第2処理装置は、
前記定義情報に記憶された前記識別子を前記第1処理装置から受信し、受信した前記定義情報に記憶された前記識別子により識別されるデータを前記第1処理装置に送信する場合に、前記識別子を含む前記データを前記第1処理装置に送信する制御部を有する、
ことを特徴とする処理システム。
(付記11)第1処理装置が、
データの種類を識別する識別子と所定の処理を実行する条件とが関連付けられた定義情報に記憶された前記識別子を第2処理装置に送信し、
データの種類を識別する識別子を含む前記データを前記第2処理装置から受信し、
受信した前記データに含まれる識別子が前記定義情報に記憶されている場合に、前記データの所定領域の情報が、前記データに含まれる識別子に関連付けられた所定の処理を実行する条件を満たすか否かを判断し、
判断した結果に応じて前記データを復元し、
前記第2処理装置が、
前記定義情報に記憶された前記識別子を前記第1処理装置から受信し、
受信した前記定義情報に記憶された前記識別子により識別されるデータを前記第1処理装置に送信する場合に、前記識別子を含む前記データを前記第1処理装置に送信する、
ことを特徴とする処理方法。
(付記12)コンピュータに、
データの種類を識別する識別子と所定の処理を実行する条件とが関連付けられた定義情報を記憶し、
データの種類を識別する識別子を含む前記データを受信し、
受信した前記データに含まれる識別子が前記定義情報に記憶されている場合に、前記データの所定領域の情報が、前記データに含まれる識別子に関連付けられた所定の処理を実行する条件を満たすか否かを判断し、
判断した結果に応じて前記データを復元する、
処理を実行させる処理プログラムを記録したことを特徴とする前記コンピュータに読み取り可能な記録媒体。