以下、図面に基づいて第一の実施の形態を説明する。図1は、第一の実施の形態におけるセンサネットワークシステムの構成例を示す図である。図1において、センサネットワークシステム1は、センサノード30a、30b、30c、及び30d等の1以上のセンサノード30、GWノード20a、20b、及び30c等の1以上のGWノード20、及び1つのルートノード10等を含む。これらのノードのうち、センサノード30及びGWノード20は、ビルA内に設置されている。ルートノード10は、クラウドサービスを提供する事業者によって管理されている。但し、各ノードの配置位置は、所定のものに限定されない。
センサノード30は、例えば、センサを内蔵する通信機器又はセンサに接続された通信機器である。センサノード30は、特定の又は専用の通信機器に限定されない。例えば、PC(Personal Computer)、周辺機器、AV機器、携帯端末、家電製品等がセンサノード30であってもよい。センサノード30は、センサによって計測又は検知された1次的なイベントデータ、又は1次的なイベントデータに関して加工処理が実行された2次的なイベントデータを、いずれかのGWノード20に送信する。
イベントデータとは、センサによって計測される計測値、又はセンサによって検知される事象等のイベントを示すデータである。イベントデータには、当該計測値や当該事象を示す値が含まれる。
また、加工処理とは、フィルタリング処理又は集約処理等である。フィルタリング処理とは、例えば、不要なイベントを破棄する処理である。集約処理とは、複数のイベントを集約することにより得られるイベントを出力する処理である。
本実施の形態において、各センサノード30は、各センサノード30に接続される機器の電力を計測する電力センサに接続される。センサノード30は、計測された電力を示すイベントデータ(以下、「電力データ」という。)を、GWノード20に送信する。また、本実施の形態では、集約処理の一例として、1時間分の電力を示すイベントデータに基づいて、機器の種別ごとに電力量を示すイベントデータ(以下、「電力量データ」という。)を生成する処理が実行される。
GWノード20は、センサノード30からのイベントデータを、他のGWノード20又はルートノード10に転送する通信機器である。GWノード20も特定の機器又は専用の通信機器に限定されない。GWノード20は、必要に応じて、受信したイベントデータに対して加工処理を行うことにより得られるイベントデータを転送する。
ルートノード10は、イベントデータが収集されるノードである。ルートノード10に収集されるイベントデータに基づいて、各種のサービスが提供される。ルートノード10は、また、イベントデータに対する加工処理を、各ノードに分散して配備させるための処理(以下、「分散配備処理」という。)をも実行する。分散配備処理が実行される前は、ルートノード10には1次的なイベントデータが収集される。この場合、ルートノード10が、収集されたイベントデータに対して加工処理を実行する。分散配備処理が実行された後は、ルートノード10には、2次的なイベントデータが収集される。ルートノード10は、2次的なイベントデータを利用して、又は2次的なイベントデータに対して更に加工処理を行うことにより得られるデータを利用して、各種のサービスを提供する。
なお、2次的なイベントデータとは、1回以上の加工処理が行われることにより出力されるベントデータをいう。すなわち、2回以上の加工処理が行われたイベントデータについても、2次的なイベントデータという。
また、本実施の形態において、ルートノード10から見て、センサノード30及びGWノード20を区別しない場合、これらのノードを「下位ノード」という。また、センサノード30から見て、GWノード20及びルートノード10を区別しない場合、これらのノードを「上位ノード」という。
また、図1では、イベントデータの転送に関する論理的なネットワーク構成が示されている。イベントデータやその他の通信データを構成するパケット等の転送は、別途配置されるルータ等を介して行われる。したがって、例えば、各センサノード30とルートノード10とがGWノード20を介さずに通信することも可能である。
なお、図1には、各ノードのノードIDが示されている。ノードIDは、ノードごとの識別情報の一例である。本実施の形態において、各ノードのノードIDには、図1に示される値が用いられる。
図2は、第一の実施の形態におけるルートノードのハードウェア構成例を示す図である。図2のルートノード10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、及びインタフェース装置105等を有する。
ルートノード10での処理を実現するプログラムは、記録媒体101によって提供される。プログラムを記録した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってルートノード10に係る機能を実行する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。
なお、記録媒体101の一例としては、CD−ROM、DVDディスク、又はUSBメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置102の一例としては、HDD(Hard Disk Drive)又はフラッシュメモリ等が挙げられる。記録媒体101及び補助記憶装置102のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
なお、センサノード30及びGWノード20も、図2に示されるようなハードウェアを有していてもよい。
図3は、第一の実施の形態におけるルートノードの機能構成例を示す図である。図3において、ルートノード10は、モジュール登録部11、イベント受信部12、モジュール実行部13、イベント発生情報受信部14、配備先決定部15、モジュール送信部16、転送先情報生成部17、及び転送先情報送信部18等を有する。これら各部は、ルートノード10にインストールされたプログラムが、CPU104に実行させる処理により実現される。
ルートノード10は、また、モジュール記憶部111、モジュール定義記憶部112、イベント記憶部113、イベント発生情報記憶部114、配備先情報記憶部115、及び転送先情報記憶部116等を利用する。これら各記憶部は、補助記憶装置102、又はルートノード10にネットワークを介して接続される記憶装置等を用いて実現可能である。
モジュール登録部11は、各ノードに加工処理を実行させるプログラムモジュール(以下、単に「モジュール」という。)に関する情報を、モジュール記憶部111及びモジュール定義記憶部112に登録する。例えば、モジュール登録部11は、モジュールの開発者が利用する端末装置からモジュールのアップロードを受け付け、当該モジュールをモジュール記憶部111に登録する。モジュール登録部11は、また、アップロードされたモジュールに関する定義情報を、モジュールの開発者が利用する端末装置から受け付け、当該定義情報をモジュール定義記憶部112に登録する。
図4は、モジュール記憶部の構成例を示す図である。図4において、モジュール記憶部111は、モジュール識別子に対応付けて、モジュールの実体であるバイナリコードを記憶する。モジュール識別子は、モジュールごとの識別情報である。例えば、C言語でプログラミングされたモジュールについては関数名がモジュール識別子とされてもよい。また、Java(登録商標)言語でプログラミングされたモジュールについてはクラス名がモジュール識別子とされてもよい。本実施の形態において、モジュール識別子が、「電力量集計」であるモジュール(以下、「電力量集計モジュール」という。)は、電力データを集約して、電力量データを生成する処理(以下、「電力量集計処理」という。)を、当該モジュールが配備されたノードに実行させるモジュールである。
なお、モジュール記憶部111には、モジュールに関してバイナリコード以外のデータが記憶されてもよい。例えば、モジュールがスクリプト言語で実装される場合には、スクリプトが記述されたテキストデータが、モジュール識別子に対応付けられて記憶されてもよい。また、コンパイル前のソースコードがモジュール識別子に対応付けられて記憶されてもよい。ソースコードがモジュール記憶部111に記憶される場合、モジュールが配備される段階においてルートノード10又は配備先のノードでコンパイル等が実行されてもよい。
図5は、モジュール定義記憶部の構成例を示す図である。図5において、モジュール定義記憶部112は、モジュール記憶部111に記憶されたモジュールごとに、モジュール識別子、入力イベント型名、出力イベント型名、及び集約属性名等を対応付けて記憶する。
入力イベント型名は、モジュールに対して入力データとなるイベントデータのイベント型の名前である。イベント型とは、イベントデータのデータ型である。又は、イベント型は、イベントデータによって示されるイベントの型若しくは種別であるともいえる。例えば、電力データのイベント型名は、「電力」である。電力量データのイベント型名は、「電力量」である。
出力イベント型名は、モジュールによって出力されるイベントデータのイベント型名である。集約属性名は、モジュールによって実行される処理が集約処理である場合に、イベントデータに含まれる属性項目のうちイベントデータを集約する単位を識別するための属性項目の項目名である。仮に、モジュールによって実行される処理がフィルタリング処理であり、イベントデータを集約する必要が無い場合、当該モジュールに関して、集約属性名の項目は空であってもよい。
図5の例では、電力量集計モジュールは、電力データを入力し、電力量データを出力することが示されている。また、電力データに含まれている機器種別IDが共通する単位で、電力データが集約され、電力量データが生成されることが示されている。
なお、機器種別IDとは、センサノード30によって電力が計測される機器の種別に対する識別子である。本実施の形態では、以下の機器種別IDが有ることとする。
・デスクトップPC
・サーバPC
・ノートPC
・液晶モニタ
・充電器
・プリンタ
・ネットワーク機器
・照明器具
・空調機器
・その他
なお、本実施の形態において、機器種別IDは、各機器の個体(機体)を識別する情報ではない。したがって、例えば、複数台のデスクトップPCがビルAに配置されている場合、各デスクトップPCに係る電力データを区別することなく、電力量集計処理が実行される。
イベント受信部12は、下位ノードからイベントデータを受信する。ルートノード10にいずれかのモジュールが配備されている場合、イベント受信部12によって受信されたイベントデータは、当該モジュールによって処理される。ルートノード10にモジュールが配備されていない場合、イベント受信部12によって受信されたイベントデータは、イベント記憶部113に記憶される。なお、分散配備処理の実行前は、1次的なイベントデータが受信される。分散配備処理の実行後は、2次的なイベントデータも受信される。
モジュール実行部13は、ルートノード10に配備されたモジュールの実行制御を行う。例えば、モジュール実行部13は、イベント受信部12によってイベントデータが受信されると、当該イベントデータのイベント型名を入力イベント型名とするモジュールがルートノード10に配備されているか否かを配備先情報記憶部115を参照して判定する。当該モジュールがルートノード10に配備されている場合、モジュール実行部13は、当該モジュールを実行することによって当該イベントデータに対する加工処理をルートノード10に実行させる。モジュール実行部13は、加工処理によって出力されたイベントデータを、イベント記憶部113に記憶する。
なお、分散配備処理の実行前は、全てのモジュールが、ルートノード10に配備されている。すなわち、必要とされるすべての加工処理が、ルートノード10によって実行される。したがって、モジュール実行部13は、或るイベントデータに対して2以上の加工処理を実行する必要が有る場合は、当該2以上の加工処理に係る2以上のモジュールを、順番に実行する。
図6は、イベント記憶部の構成例を示す図である。図6において、イベント記憶部113は、イベントデータごとに、イベント型名、イベント発生時刻、及びイベント属性等を対応付けて記憶する。イベント発生時刻は、1次的なイベントデータであれば、当該イベントデータに係るイベントが発生又は検知された時刻である。2次的なイベントデータであれば、当該イベントデータが、いずれかのモジュールによって生成された時刻である。イベント属性は、イベントデータの属性項目ごとに、項目名と値との組を含む情報である。
本実施の形態では、センサノード30から送信されるイベントデータは、電力データであり、ルートノード10も含めていずれかのノードにおいて電力量集計処理が実行されることにより電力量データが生成される。したがって、イベント記憶部113には、電力量データが記憶される。電力量集計処理では、機器種別IDごとに電力データが集約されるため、図6では、1時間間隔で、機器種別IDごとの電力量を示す電力量データが記憶された例が示されている。
また、図6には、電力量データの属性項目には、機器種別ID及び電力量が含まれることが示されている。
イベント発生情報受信部14は、各センサノード30及び各GWノード20におけるイベントデータの発生状況を示す統計情報(以下、「イベント発生情報」という。)を、各下位ノードから受信する。イベント発生情報は、例えば、所定時間あたり、又はこれまでの累積のイベントデータの発生回数を示す情報である。したがって、イベント発生情報は、頻繁に発生するイベントデータとは異なり、通信負荷に与える影響は小さい。また、イベント発生情報は、直接的に、各下位ノードからルートノード10に送信されてもよい。すなわち、イベント発生情報は、後述の転送先情報に基づく経路制御は行われなくてよい。イベント発生情報受信部14は、受信されたイベント発生情報を、イベント発生情報記憶部114に記憶する。
なお、本実施の形態では、電力データのみが記憶されるが、複数のイベント型のイベントデータが、イベント記憶部113に記憶されてもよい。すなわち、一つのセンサネットワークシステム1において、複数のイベント型のイベントデータが並行して扱われてもよい。
図7は、イベント発生情報記憶部の構成例を示す図である。図7において、イベント発生情報記憶部114は、イベント発生情報受信部14によって受信されたイベント発生情報を記憶する。図7に示されるように、イベント発生情報は、発生ノードID、発生イベント型名、集約属性、及びイベント発生回数等を含む。
発生ノードIDは、イベント発生情報の送信元のノードIDである。発生イベント型名は、イベント発生情報において集計対象とされているイベントデータのイベント型名である。集約属性は、イベント発生情報の集計単位を示す、集約属性名とその属性値(以下、「集約属性値」という。)との組み合わせである。イベント発生回数は、集約属性に当てはまるイベントデータについて、ノードIDに係るノードにおける発生回数である。発生回数は、当該ノードからのイベントデータの転送回数に該当する。
なお、ルートノード10は、分散配備処理の実行前に、モジュール定義記憶部112に記憶されている各集約属性名を、各下位ノードに通知するようにしてもよい。各下位ノードは、通知された集約属性名に係る属性値ごとに、イベント発生回数を集計してもよい。
配備先決定部15は、分散配備処理を制御する。すなわち、配備先決定部15は、モジュール記憶部111及びモジュール定義記憶部112に記憶されたモジュールの配備先のノードを決定する。配備される単位は、厳密には、モジュールと、当該モジュールの集約属性名に対する集約属性値との組み合わせごととなる。例えば、電力量集計モジュールには電力量集計処理を実行するためのロジックが実装されているが、当該モジュール自体には、いずれの集約属性値ごとに電力量の集計を行うかは特定されていない。電力集計モジュールについて、いずれの集約属性値ごとに集計を行うかが決定されることにより、当該電力集計モジュールが実行すべき具体的な処理内容が決まる。したがって、配備先決定部15は、モジュールと集約属性値との組み合わせごとに、当該組み合わせの配備先を決定する。以下、モジュールと集約属性値との組み合わせを、「インスタンス」という。
最初に分散配備処理が実行される前は、全てのインスタンスの配備先は、ルートノード10である。すなわち、全ての1次的なイベントデータがルートノード10に収集される状態で、センサネットワークシステム1の運用が開始される。センサネットワークシステム1の運用の開始に応じて、各ノードにおけるイベントデータの発生状況が明らかになる。すなわち、イベント発生情報記憶部114に、イベント発生情報が記憶される。そこで、配備先決定部15は、例えば、イベント発生情報記憶部114が記憶するイベント発生情報等に基づいて、インスタンスを配備することによりイベントデータの流通量の削減効果が高いと予測されるノードを、当該インスタンスの配備先として決定する。但し、本実施の形態において、インスタンスの配備先の決定方法は、所定のものに限定されない。例えば、特開2013−47922号公報に記載された方法で、配備先が決定されてもよいし、他の方法で配備先が決定されてもよい。配備先決定部15は、分散配備処理によって得られる情報を、配備先情報記憶部115に記憶する。なお、分散配備処理は、センサネットワークシステム1のトポロジが変化するたびに行われてもよい。
図8は、配備先情報記憶部の構成例を示す図である。図8において、配備先情報記憶部115は、配備先が決定されたインスタンスごとに、モジュール識別子、入力イベント型名、集約属性名、集約属性値、及び配備先ノードID等を記憶する。
モジュール識別子は、当該インスタンスに用いられるモジュールのモジュール識別子である。入力イベント型名は、当該モジュールの入力イベント型名である。集約属性名は、当該モジュールの集約属性名である。集約属性値は、当該インスタンスの集約属性値である。配備先ノードIDは、当該インスタンスの配備先のノードのノードIDである。なお、或るモジュール識別子に対する入力イベント型及び集約属性名は、当該モジュール識別子に対してモジュール定義記憶部112に記憶されている情報に基づいて特定可能である。
例えば、図8の最初のレコードには、ノードIDが「GW−2F」であるGWノード20に対して、集約属性値が「デスクトップPC」である電力集計処理のインスタンスが配備されることが示されている。すなわち、当該GWノード20は、機器種別IDの値が「デスクトップPC」である電力イベントデータに関して、電力集計処理を実行することが示されている。
モジュール送信部16は、配備先情報記憶部115に記憶された配備先情報に基づいて、各イベントに係るモジュールのバイナリコードを、当該イベントの配備先のノード宛に送信する。なお、モジュールのバイナリコードと共に、当該モジュールを用いるインスタンスの集約属性名及び集約属性値も、各ノードに送信される。
転送先情報生成部17は、イベント発生情報記憶部114に記憶されたイベント発生情報と、配備先情報記憶部115に記憶された配備先情報とに基づいて、各ノードの転送先情報を生成する。転送先情報とは、イベント型名及び集約属性ごとに、当該イベント型名及び当該集約属性に係るイベントデータの転送先の判定に利用される情報である。すなわち、或る下位ノードが、イベントデータを受信すると、当該下位ノードは、転送先情報に基づいて、当該イベントデータを次に転送すべきノードを判定する。したがって、本実施の形態では、イベント型名及び集約属性ごとに、イベントデータの転送経路が異なる。転送先情報生成部17による処理は、例えば、配備先情報記憶部115に配備先情報が記憶された後の任意のタイミングで行われる。
転送先情報記憶部116は、転送先情報生成部17によって生成される転送先情報をノードごとに記憶する。転送先情報送信部18は、転送先情報記憶部116に転送先情報が記憶されたノードに対して、当該転送先情報を送信する。
図9は、第一の実施の形態におけるセンサノードの機能構成例を示す図である。図9において、センサノード30は、モジュール受信部31、転送先情報受信部32、センサ情報受信部33、モジュール実行部34、イベント送信部35、及びイベント発生情報送信部36等を有する。これら各部は、センサノード30にインストールされたプログラムが、センサノード30のCPUに実行させる処理により実現される。センサノード30は、また、モジュール情報記憶部311及び転送先情報記憶部312等を有する。これら各記憶部は、例えば、センサノード30が有する補助記憶装置又はメモリ装置等を用いて実現可能である。
モジュール受信部31は、当該センサノード30がインスタンスの配備先として決定された場合にルートノード10から当該センサノード30宛に送信される、当該インスタンスのモジュール、集約属性名、及び集約属性値等を受信する。モジュール受信部31は、受信されたモジュール、集約属性名、及び集約属性値等を相互に対応付けて、モジュール情報記憶部311に記憶する。
転送先情報受信部32は、ルートノード10から当該センサノード30宛に送信される転送先情報を受信する。転送先情報受信部32は、受信された転送先情報を、転送先情報記憶部312に記憶する。なお、初期状態において、転送先情報記憶部312には、全てのイベントについて、ルートノード10を転送先とすることを示す転送先情報が記憶されていてもよい。
センサ情報受信部33は、センサによって検知又は計測されるイベントデータを受信する。本実施の形態では、電力センサによって計測される電力が、センサ情報受信部33によって受信される。
モジュール実行部34は、受信されたイベントデータに適用されるべきモジュール等(インスタンス)がモジュール情報記憶部311に記憶されている場合に、当該イベントデータに対して、当該モジュールを実行する。
イベント送信部35は、センサ情報受信部33によって受信された1次的なイベントデータ、又はモジュール実行部34によって生成される2次的なイベントデータを、転送先情報記憶部312に記憶されている転送先情報に基づいて特定されるノードへ転送する。
イベント発生情報送信部は、当該センサノード30において発生するイベントデータの発生回数を、集約属性値ごとに集計し、所定のタイミングで、集計結果を含むイベント発生情報を、ルートノード10宛に送信する。
図10は、第一の実施の形態におけるGWノードの機能構成例を示す図である。図10において、GWノード20は、モジュール受信部21、転送先情報受信部22、イベント受信部23、モジュール実行部24、イベント送信部25、及びイベント発生情報送信部26等を有する。これら各部は、GWノード20にインストールされたプログラムが、GWノード20のCPUに実行させる処理により実現される。GWノード20は、また、モジュール情報記憶部211及び転送先情報記憶部212等を有する。これら各記憶部は、例えば、GWノード20が有する補助記憶装置又はメモリ装置等を用いて実現可能である。
イベント受信部23は、他ノードから転送されるイベントデータを受信する。その他の各部については、センサノード30が有する同名の各部と同様である。
以下、センサネットワークシステム1における各ノードが実行する処理手順について説明する。
図11は、第一の実施の形態のルートノードが実行する転送先情報の生成処理の処理手順の一例を説明するためのフローチャートである。図11の処理は、例えば、分散配備処理の過程において、配備先情報記憶部115に配備先情報が記憶された後に行われる。また、分散配備処理が完了した後に、定期的に実行されてもよい。
ステップS101において、転送先情報生成部17は、イベント発生情報記憶部114の更新を待機する。イベント発生情報記憶部114の更新は、イベント発生情報受信部14が、いずれかの下位ノードからイベント発生情報を受信し、当該イベント発生情報をイベント発生情報記憶部114に記憶することによって発生する。
イベント発生情報記憶部114が更新されると(S101でYes)、転送先情報生成部17は、ステップS102以降の処理を開始する。但し、更新が発生するたびにステップS102以降が実行されなくてもよい。例えば、一定期間ごとに、当該一定期間においてイベント発生情報記憶部114に対する更新の有無が確認され、更新が有った場合に、ステップS102以降が実行されてもよい。又は、更新量が所定量に達したタイミングでステップS102以降が実行されてもよい。
ステップS102において、転送先情報生成部17は、未処理のノードの有無を判定する。未処理のノードとは、イベント発生情報記憶部114に、当該ノードのノードIDを含むイベント発生情報が記憶されているノードのうち、今回の図11の処理において未処理のノードをいう。したがって、今回の処理において最初にステップS102が実行される場合、イベント発生情報記憶部114にイベント発生情報が記憶されているノードの全てが未処理のノードとなる。
未処理のノードが有る場合(S102でYes)、転送先情報生成部17は、未処理のノードのうちの一つのノードを処理対象とする(S103)。以下、処理対象とされたノードを「対象ノード」という。例えば、図7に示されるイベント発生情報記憶部114には、センサノード30a、センサノード30b、センサノード30c、又はセンサノード30dのノードIDをノードIDに含むイベント発生情報が記憶されている。例えば、これら4つのセンサノード30のうち、ノードIDが、「電力センサA」であるセンサノード30aが対象ノードとされる。
続いて、転送先情報生成部17は、対象ノードのノードIDを含むイベント発生情報を、イベント発生情報記憶部114から抽出する(S104)。続いて、転送先情報生成部17は、抽出されたイベント発生情報を、イベント発生回数の降順にソートする(S105)。
図12は、第一のセンサノードに関するイベント発生情報のソート結果の一例を示す図である。図12では、図7に示されているイベント発生情報のうち、センサノード30aのイベント発生情報が、イベント発生回数の降順にソートされた例が示されている。
続いて、転送先情報生成部17は、変数iに1を代入する(S106)。変数iは、ソートされたイベント発生情報のうち、処理対象とされるイベント発生情報の順番を示す変数である。ソート結果においてi番目のイベント発生情報を、以下、「イベント発生情報(i)」という。
続いて、転送先情報生成部17は、イベント発生情報(i)のイベント型名及び集約属性に対応する配備先ノードIDを、配備先情報記憶部115から取得する(S107)。具体的には、配備先情報記憶部115において、イベント発生情報(i)のイベント型名に一致する入力イベント型名を含み、かつ、イベント発生情報(i)の集約属性に一致する集約属性名及び集約属性値を含むレコードに記憶されている配備先ノードIDが取得される。
例えば、図12において1番目のイベント発生情報のイベント型名及び集約属性は、それぞれ、「電力」、「機器種別ID="ノートPC"」である。図8において、入力イベント型名が「電力」であり、集約属性名が「機器種別ID」であり、集約属性値が「ノートPC」であるレコードは、3番目のレコードである。したがって、この場合、「GW−3F」が取得される。
続いて、転送先情報生成部17は、変数iの値が閾値α以下であるか否かを判定する(S108)。閾値αは、固定的に定められていてもよいし、ステップS104において抽出されたイベント発生情報の数に応じて算出されてもよい。例えば、ステップS104において抽出されたイベント発生情報の数を2で除した結果が、閾値αとされてもよい。ここでは、閾値αの値は、「2」であるとする。
変数iの値が閾値α以下である場合(S108でYes)、転送先情報生成部17は、イベント発生情報(i)のイベント型名及び集約属性のそれぞれの値に、ステップS107で取得された配備先ノードIDを対応付けた転送先情報を生成し、当該転送先情報を対象ノードのノードIDに対応付けて転送先情報記憶部116に記憶する(S109)。
続いて、転送先情報生成部17は、変数iの値が、ステップS104において抽出されたイベント発生情報の個数を示すN以上であるか否かを判定する(S112)。すなわち、対象ノードに関する全てのイベント発生情報に関して、転送先情報の生成が完了したか否かが判定される。変数iの値がN未満である場合(S122でNo)、転送先情報生成部17は、変数iに1を加算して(S113)、ステップS107以降を繰り返す。
すなわち、イベント発生回数が上位α番目までのイベント型名及び集約属性については、イベント型名及び集約属性ごとに、ノードIDが対応付けられたエントリを有する転送先情報が生成される。なお、ステップS109において生成される転送先情報を、以下、「第一転送先情報」という。
図13は、第一のセンサノードに関する第一転送先情報の一例を示す図である。図13に示されるように、第一転送先情報は、イベント型名及び集約属性に対応付けて、転送先ノードIDを含む。なお、ステップS107において取得された配備先ノードIDは、転送先ノードIDとして、第一転送先情報に含まれる。
図13において、1番目のエントリ(又はレコード)は、図12における1番目のイベント発生情報に基づく第一転送先情報である。2番目のエントリは、図12における2番目のエントリに基づく第一転送先情報である。
一方、ステップS108において、変数iの値が閾値αを超える場合(S108でNo)、転送先情報生成部17は、イベント発生情報(i)のイベント型名及び集約属性に関して以下のA〜Cに示されるような3種類のハッシュ値を計算する(S110)。
A)イベント型名及び集約属性の文字列の末尾に "A"を付加した文字列のSHA−256ハッシュ値A
B)イベント型名及び集約属性の文字列の末尾にさらに"B"を付加した文字列のSHA−256ハッシュ値B
C)イベント型名及び集約属性の文字列の末尾にさらに"C"を付加した文字列のSHA−256ハッシュ値C
なお、SHA−256以外のハッシュ関数が用いられてもよい。また、イベント型名及び集約属性の文字列の末尾に付加される文字は、上記と異なっていてもよい。
続いて、転送先情報生成部17は、ハッシュ値A〜Cを、ステップS107において取得された配備先ノードIDに対応するカウンティングフィルタに適用する(S111)。本実施の形態において、カウンティングフィルタの幅(ブルームフィルタで言うところのビット数)は、16桁であるとする。したがって、ハッシュ値A〜Cのそれぞれを16で除した場合の剰余が、配備先ノードIDに対応するカウンティングフィルタに適用される。剰余をカウンティングフィルタに適用するとは、カウンティングフィルタにおいて、当該剰余が示す値の桁に1が加算されることをいう。
続いて、ステップS112以降が実行される。すなわち、イベント発生回数が上位α番目より後のイベント型名及び集約属性については、転送先のノードごとにエントリを含むカウンティングフィルタが、転送先情報として生成される。生成された転送先情報(カウンティングフィルタ)は、対象ノードのノードIDに対応付けられて転送先情報記憶部116に記憶される。以下、ステップS111において生成される転送先情報を、「第二転送先情報」という。
例えば、図12の3番目以降のイベント発生情報に関しては、ステップS111において、次のような値が、カウンティングフィルタに適用される。以下の括弧内の3つの数値は、ハッシュ値Aを16で除した剰余、ハッシュ値Bを16で除した剰余、ハッシュ値Cを16で除した剰余である。
電力:機器種別ID="液晶モニタ": (15,12,7)
電力:機器種別ID="充電器": (9,6,4)
電力:機器種別ID="その他": (13,14,5)
電力:機器種別ID="サーバPC": (6,11,5)
電力:機器種別ID="プリンタ": (13,12,12)
電力:機器種別ID="空調機器": (7,3,7)
電力:機器種別ID="照明器具": (2,8,0)
電力:機器種別ID="ネットワーク機器": (13,10,2)
上記に基づいて、図14に示されるようなカウンティングフィルタが生成される。図14は、第一のセンサノードに関するカウンティングフィルタの一例を示す図である。
図14に示されるように、カウンティングフィルタは、転送先のノードごとにエントリを有する。各エントリは16桁の幅を有する。各エントリには、当該ノードへ転送されるイベントのイベント型名及び集約属性が合成されて含まれる。
対象ノードに関する全てのイベント発生情報について、転送先情報の生成が完了すると(S112でYes)、転送先情報送信部18は、対象ノードの第一転送先情報及び第二転送先情報を、対象ノード宛に送信する(S114)。その結果、対象ノードに対して、第一転送先情報及び第二転送先情報が設定される。例えば、対象ノードがセンサノード30aであれば、図13に示される第一転送先情報と、図14に示される第二転送先情報とが送信される。
転送先情報生成部17は、未処理のノードが無くなるまで、ステップS103以降を繰り返す(S102)。未処理のノードが無くなると(S103でNo)、転送先情報生成部17は、図11の処理を終了させる。
例えば、ノードIDが「電力センサB」であるセンサノード30bに関しては、ステップS105において、図15に示されるようなソート結果が得られる。
図15に示されるイベント発生情報のうち、上位の二つについては、図16に示される第一転送先情報が生成される。一方、3番目以降のイベント発生情報については、図17に示されるカウンティングフィルタが、第二転送先情報として生成される。したがって、センサノード30bには、図16に示される第一転送先情報と、図17に示される第二転送先情報とが送信される。
続いて、各センサノード30が実行する処理について説明する。図18は、センサノードが実行する処理手順の一例を説明するためのフローチャートである。
転送先情報受信部32は、ルートノード10から送信された第一転送先情報及び第二転送先情報を受信すると(S201でYes)、当該転送先情報を、転送先情報記憶部312に記憶する(S202)。
モジュール受信部31は、モジュール、集約属性名、及び集約属性値を受信すると(S203でYes)、当該集約属性名及び当該集約属性値に対応付けて、当該モジュールをモジュール情報記憶部311に記憶する(S204)。
センサ情報受信部33が、センサからセンサ情報に係るイベントデータを受信すると(S205でYes)、モジュール実行部34は、当該イベントデータの属性項目の属性名及び属性値が、モジュール情報記憶部311に記憶されているいずれかのモジュールに対応付けられているか否かを判定する(S206)。当該属性名及び当該属性値が、いずれかのモジュールに対応付けられている場合(S206でYes)、モジュール実行部34は、受信されたイベントデータに対して、当該モジュールに係る処理を実行する(S207)。
ステップS206でNoの場合又はステップS207に続いて、イベント送信部35は、センサ情報受信部33によって受信されたイベントデータ、又はモジュール実行部13による処理の結果として出力されるイベントデータを、転送先情報に基づいて特定される転送先のノードに転送する(S208)。
転送先情報に基づく転送先のノードの特定は、例えば、次のように行われる。まず、イベント送信部35は、第一転送先情報の中で、送信対象のイベントデータのイベント型名及び集約属性に一致するエントリを検索する。該当するエントリが有れば、当該エントリの転送先ノードIDに係るノードが、転送先のノードとして特定される。
該当するエントリが無い場合、イベント送信部35は、イベントデータに関して、ハッシュ値A、B、及びCを計算し、各ハッシュ値を16で除した剰余を求める。その結果、3つの値が得られる。イベント送信部35は、第二転送先情報であるカウンティングフィルタにおいて、当該3つの値が示す桁に1以上の値が記録されているエントリに対応するノードを、転送先ノードとして特定する。
続いて、イベント発生情報送信部36は、イベント送信部35によって転送されたイベントデータに係るイベント型名及び集約属性に対応するイベント発生回数に1を加算する(S209)。なお、イベント発生回数は、例えば、メモリ装置に記憶される。
イベント発生情報送信部36は、イベント発生情報の送信時期の経過を検知すると(S210)、イベント型名及び集約属性ごとにメモリ装置に記憶されているイベント発生回数を、ルートノード10宛に送信する(S211)。イベント発生情報の送信時期は、例えば、一定期間ごとであってもよい。
続いて、GWノード20が実行する処理について説明する。図19は、GWノードが実行する処理手順の一例を説明するためのフローチャートである。ステップS301〜S304は、図18のステップS201〜S204と同様であるため、その説明は省略する。
イベント受信部23が、他ノードから転送されたイベントデータを受信すると(S305でYes)、ステップS306〜S309において、図18のステップS206〜S209と同様の処理が実行される。また、ステップ310及びS311は、図18のステップS210及びS211と同様である。
なお、上記において、カウンティングフィルタの代わりにブルームフィルタが用いられてもよい。
また、本実施の形態では、センサによって検知されるデータが転送対象である例について説明したが、例えば、各コンピュータによって生成されるログデータやその他のデータの転送に関して、本実施の形態が適用されてもよい。
また、転送先情報は、ルートノード10以外のコンピュータが生成してもよい。
上述したように、第一の実施の形態によれば、センサノード30又はGWノード20がイベントを転送する際、発生回数の多いイベント(つまり、多くの転送処理を行う必要があるイベント)に関しては、第二転送先情報よりも必要とされる計算量が少ない第一転送先情報に基づいて転送先が判定される。すなわち、発生回数の多いイベントに関しては、ハッシュ値の計算が不要となり、ハッシュ値の計算のための処理コストを削減することができる。一方、発生回数の少ないイベント(つまり、転送処理を行う必要があまりないイベント)に関しては、第一転送先情報よりも空間効率の良い第二転送先情報に基づいて転送先が判定される。したがって、このようなイベントに対する転送先情報については、転送先情報記憶部116の消費量を抑制することができる。その結果、各ノードでのイベントの発生状況に応じて、イベントの転送処理に要されるメモリ消費量の削減と、処理コストの削減とを両立させることができる。すなわち、ネットワークを構成する各ノードがデータの転送先の判定に用いる情報に関するメモリ消費量と計算コストとの偏りを平準化させることができる。
次に、第二の実施の形態について説明する。第二の実施の形態では第一の実施の形態と異なる点について説明する。したがって、特に言及されない点については、第一の実施の形態と同様でもよい。
図20は、第二の実施の形態におけるルートノードの機能構成例を示す図である。図20中、図3と同一部分には同一符号を付し、その説明は省略する。
図20では、変更回数更新部19及び変更回数記憶部117が追加されている。変更回数記憶部117は、各インスタンスについて、配備先の変更回数を、変更回数記憶部117に記憶する。例えば、変更回数更新部19は、配備先情報記憶部115の変更前後の情報に基づいて、配備先のノードが変更されたインスタンスを特定し、当該インスタンスの変更回数を変更回数記憶部117に記憶する。なお、変更回数更新部19は、ルートノード10にインストールされたプログラムが、CPU104に実行させる処理により実現される。また、変更回数記憶部117は、補助記憶装置102、又はルートノード10にネットワークを介して接続される記憶装置等を用いて実現可能である。
また、第二の実施の形態において、転送先情報生成部17は、変更回数記憶部117に記憶されている情報に基づいて、各ノードの転送先情報を生成する。
図21は、第二の実施の形態のルートノードが実行する転送先情報の生成処理の処理手順の一例を説明するためのフローチャートである。図21中、図11と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。
ステップS401において、変更回数更新部19は、配備先情報記憶部115の変更を待機する。配備先情報記憶部115のいずれかのレコードが更新されると(S401でYes)、変更回数更新部19は、当該レコードに係るインスタンスに関して変更回数記憶部117に記憶されている変更回数に1を加算する(S402)。
図22は、変更回数記憶部の構成例を示す図である。図22において、変更回数記憶部117は、配備先情報記憶部115に記憶されているレコードごとに、当該レコードに係る配備先IDの変更回数を記憶する。
続いて、転送先情報生成部17は、イベント発生情報記憶部114に記憶されている全てのイベント発生情報を取得する(S403)。なお、取得されたイベント発生情報は、発生イベント型名及び集約属性ごとに、集約又は統合される。すなわち、発生ノードIDの相違は無視される。図21の説明に関して、以下におけるイベント発生情報は、集約又は統合された後のイベント発生情報をいう。
続いて、転送先情報生成部17は、各イベント発生情報の発生イベント型名及び集約属性に対応する変更回数を、変更回数記憶部117から取得する(S404)。イベント発生情報の発生イベント型名及び集約属性に対応する変更回数とは、変更回数記憶部117において、当該発生イベント型名と集約属性とに一致する入力イベント型名、集約属性名、及び集約属性値を含むレコードに記憶されている変更回数をいう。なお、変更回数と共に配備先ノードIDが取得されてもよい。この場合、ステップS107は実行されなくてもよい。
続いて、転送先情報生成部17は、イベント発生情報を、ステップS404において取得された変更回数の降順にソートする(S405)。
図23は、第二の実施の形態におけるイベント発生情報のソート結果の一例を示す図である。図12では、図7に示されているイベント発生情報が、変更回数の降順にソートされた例が示されている。
続いて、図23に示されるソート結果が用いられて、各イベント発生情報に関して、図11において説明したステップS106〜S111が実行される。その結果、図24及び図25に示されるような転送先情報が生成される。なお、第二の実施の形態におけるαの値と、第一の実施の形態におけるαの値とは、異なっていてもよい。
図24は、第二の実施の形態において生成される第一転送先情報の一例を示す図である。図24に示されるように、第二の実施の形態では、変更回数が上位α番目までのイベント型名及び集約属性に関して、第一転送先情報が生成される。
図25は、第二の実施の形態において生成される第二転送先情報の一例を示す図である。図25に示されるように、第二の実施の形態では、変更回数がα番目より下位のイベント型名及び集約属性に関して、カウンティングフィルタが生成される。
全てのイベント情報に関して、S106〜S111が実行されると(S112でYes)、転送先情報送信部18は、生成された第一転送先情報及び第二転送先情報を、各ノード宛に送信する(S414)。その結果、各ノードに対して、第一転送先情報及び第二転送先情報が設定される。すなわち、第二の実施の形態では、各ノードに対して同一の転送先情報が設定される。第二の実施の形態では、イベント型名及び集約属性ごとに転送先情報が生成されるからである。
上述したように、第二の実施の形態によれば、センサノード30又はGWノード20がイベントを転送する際、転送先ノードの変更頻度が高いイベントは、第一転送先情報に基づいて転送先が判定される。したがって、斯かるイベントに関して転送先ノードが変更されるたびに、ハッシュ値を再計算することによる処理コストの発生を抑制することができる。一方、転送先ノードの変更があまり発生しないイベントに関しては、第二転送先情報に基づいて転送先が判定される。したがって、このようなイベントに関して、転送先情報記憶部116の消費量を抑制することができる。その結果、各ネットワークを構成する各ノードがデータの転送先の判定に用いる情報に関するメモリ消費量と計算コストとの偏りを平準化させることができる。
なお、上記各実施の形態において、ルートノード10は、情報生成装置の一例である。イベントデータは、データの一例である。イベントデータのイベント型名及び集約属性は、データ種別の一例である。転送先情報生成部17は、生成部の一例である。イベント発生情報記憶部114は、請求項1における記憶部の一例である。変更回数記憶部117は、請求項4における記憶部の一例である。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
データ種別に応じてデータの転送経路が異なるネットワークにおける各ノードがデータの転送先のノードの判定に利用する転送先情報を生成する情報生成装置であって、
複数のノードのそれぞれについて、データ種別ごとに当該ノードによる転送回数を記憶した記憶部と、
前記ノードごとに、当該ノードに関して前記記憶部に記憶されている転送回数が上位の一部のデータ種別に関しては、転送先の判定のための計算量が第二の転送先情報よりも少ない第一の転送先情報を生成し、前記一部以外のデータ種別に関しては、前記第一の転送先情報よりも空間効率の良い前記第二の転送先情報を生成する生成部とを有する、
ことを特徴とする情報生成装置。
(付記2)
前記第一の転送先情報は、データ種別ごとに、転送先のノードを示す値を含むエントリを有し、
前記第二の転送先情報は、転送先のノードごとに、当該ノードを転送先とする1以上の種別のそれぞれのハッシュ値に基づく値が合成されたエントリを含む、
ことを特徴とする付記1記載の情報生成装置。
(付記3)
前記複数のノードのそれぞれから、データ種別ごとの当該ノードによる転送回数を受信する受信部を有し、
前記記憶部は、前記受信部によって受信される転送回数を記憶する、
ことを特徴とする付記1又は2記載の情報生成装置。
(付記4)
データ種別に応じてデータの転送経路が異なるネットワークにおける各ノードがデータの転送先のノードの判定に利用する転送先情報を生成する情報生成装置であって、
データ種別ごとに、転送先の変更回数を記憶する記憶部と、
前記記憶部に記憶されている転送回数が上位の一部のデータ種別に関しては、生成に要される計算量が第二の転送先情報よりも少ない第一の転送先情報を生成し、前記一部以外のデータ種別に関しては、前記第一の転送先情報よりも空間効率の良い前記第二の転送先情報を生成する生成部とを有する、
ことを特徴とする情報生成装置。
(付記5)
データ種別に応じてデータの転送経路が異なるネットワークシステムであって、
当該ネットワークシステムを構成する複数のノードのそれぞれについて、データ種別ごとに当該ノードによる転送回数を記憶した記憶部と、
前記ノードごとに、当該ノードに関して前記記憶部に記憶されている転送回数が上位の一部のデータ種別に関しては、各ノードがデータの転送先のノードの判定に利用する転送先情報について、転送先の判定のための計算量が第二の転送先情報よりも少ない第一の転送先情報を生成し、前記一部以外のデータ種別に関しては、前記第一の転送先情報よりも空間効率の良い前記第二の転送先情報を生成する生成部とを有する、
ことを特徴とするネットワークシステム。
(付記6)
前記第一の転送先情報は、データ種別ごとに、転送先のノードを示す値を含むエントリを有し、
前記第二の転送先情報は、転送先のノードごとに、当該ノードを転送先とする1以上の種別のそれぞれのハッシュ値に基づく値が合成されたエントリを含む、
ことを特徴とする付記5記載の情報生成装置。
(付記7)
前記複数のノードのそれぞれから、データ種別ごとの当該ノードによる転送回数を受信する受信部を有し、
前記記憶部は、前記受信部によって受信される転送回数を記憶する、
ことを特徴とする付記5又は6記載のネットワークシステム。
(付記8)
データ種別に応じてデータの転送経路が異なるネットワークシステムであって、
データ種別ごとに、転送先の変更回数を記憶する記憶部と、
前記記憶部に記憶されている転送回数が上位の一部のデータ種別に関しては、当該ネットワークシステムを構成する各ノードがデータの転送先のノードの判定に利用する転送先情報について、生成に要される計算量が第二の転送先情報よりも少ない第一の転送先情報を生成し、前記一部以外のデータ種別に関しては、前記第一の転送先情報よりも空間効率の良い前記第二の転送先情報を生成する生成部とを有する、
ことを特徴とするネットワークシステム。
(付記9)
データ種別に応じてデータの転送経路が異なるネットワークにおける各ノードがデータの転送先のノードの判定に利用する転送先情報を生成する情報生成装置が、
複数のノードのそれぞれについて、データ種別ごとに当該ノードによる転送回数を記憶部に記憶し、
前記ノードごとに、当該ノードに関して前記記憶部に記憶されている転送回数が上位の一部のデータ種別に関しては、転送先の判定のための計算量が第二の転送先情報よりも少ない第一の転送先情報を生成し、前記一部以外のデータ種別に関しては、前記第一の転送先情報よりも空間効率の良い前記第二の転送先情報を生成する、
処理を実行する情報生成方法。
(付記10)
前記第一の転送先情報は、データ種別ごとに、転送先のノードを示す値を含むエントリを有し、
前記第二の転送先情報は、転送先のノードごとに、当該ノードを転送先とする1以上の種別のそれぞれのハッシュ値に基づく値が合成されたエントリを含む、
ことを特徴とする付記9記載の情報生成方法。
(付記11)
前記記憶する処理は、複数のノードのそれぞれから、データ種別ごとの当該ノードによる転送回数を受信して、当該転送回数を前記記憶部に記憶する、
ことを特徴とする付記9又は10記載の情報生成方法。
(付記12)
データ種別に応じてデータの転送経路が異なるネットワークにおける各ノードがデータの転送先のノードの判定に利用する転送先情報を生成する情報生成装置が、
データ種別ごとに、転送先の変更回数を記憶部に記憶し、
前記記憶部に記憶されている転送回数が上位の一部のデータ種別に関しては、生成に要される計算量が第二の転送先情報よりも少ない第一の転送先情報を生成し、前記一部以外のデータ種別に関しては、前記第一の転送先情報よりも空間効率の良い前記第二の転送先情報を生成する、
処理を実行する情報生成方法。