図1は、本発明の一実施形態としてのタプル蓄積・検索システム1を示す概略ブロック図である。タプル蓄積・検索システム1は、ネットワーク101を介して接続されたタプルの蓄積・検索を行う1つ以上のタプル装置201と、タプルの書込み先を決定するタプル分配装置301と、タプル分配装置の指示に従い、タプル装置に対してタプルの書込み要求を行うユーザ端末401/センサ端末501/アクチュエータ端末601とからなる。ユーザ端末401/センサ端末501/アクチュエータ端末601はそれぞれ1つ以上存在してもよい。ネットワーク101は、インターネットなどの公衆網、LAN(Local Area Network)、専用線などの私設網からなる。なお、タプル、タプル空間、及び、タプル空間におけるタプルの分散化の基本的な手法については、背景技術として上述したとおりである。また、ユーザ端末401/センサ端末501/アクチュエータ端末601には、各装置を識別する固有の情報である端末ID(端末識別符号)が各々割り当てられている。また、通信時には、各装置及び各端末に割り当てられた通信アドレス(図1では「12.34.56.78」や「87.65.43.21」として示す。)を宛先としてデータが送受信される。
本実施形態では、センサ端末501から得られたセンサデータなどの通信内容(メッセージボディ部)とそのメタデータ(検索対象部)を保持する「イベント書込み用タプル」と、読み出したいセンサデータの条件(検索条件部)を保持する「イベント読み出し用タプル」と、コマンドデータ(メッセージボディ部)と送信したいアクチュエータ端末601の条件(検索条件部)を保持する「コマンド書込み用タプル」と、アクチュエータ端末601のメタデータ(検索対象部)を保持する「コマンド読み出し用タプル」との4種類のタプルを扱う。各タプルの例を図2〜図5に示す。図に示すように、タプルに含まれる各情報は、属性(名)と属性値から成り、属性を各情報の識別情報として用いる。また検索条件部の属性値は、1つの数値や文字列だけでなく、数値や文字列の範囲をも取り得る。なお、本願においてメタデータとは、検索の対象となるデータを説明するデータであるとしている。
図2はイベント書込み用タプル11の一例を示す図である。図2に示す例では、「センサ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」、「端末ID」及び「メッセージボディ」が属性(あるいは属性名)である。そして、「“温度”」、「“定期取得”」、「“126030”」、「“501018”」、「“2008/11/11 12:34:56”」、「“123456”」及び「“温度=“23.5℃””」が属性値である。この場合、「メッセージボディ」がメッセージボディ部11b、それ以外の「センサ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」及び「端末ID」が検索対象部11aとなる。図2のイベント書込み用タプル11は、端末ID「“123456”」が割り当てられているセンサ端末501などから、タプル分配装置301によって指示されたタプル装置201へと送られて、蓄積される。
なお、図2〜図5の各タプルにおいて、「センサ種別」は、センサの種別を表す情報であり、センサの検知対象などの情報を示す。「アクチュエータ種別」は、アクチュエータの種別を表す情報であり、アクチュエータの動作対象などの情報を示す。「メッセージタイプ」は、当該タプルのメッセージボディの取得、生成や指示などの処理形態を表す情報であり、センサ端末501において一定時間毎に取得される定期取得や、アクチュエータ端末601において指定した動作を要求する動作要求などの情報を示す。「端末ID」は、センサ端末501、アクチュエータ端末601やユーザ端末401の識別情報となる各端末固有の識別符号を表す。「メッセージボディ」は、当該タプルのデータ本体の情報であり、センサ端末501による検知結果やアクチュエータ端末601による動作内容の情報などを示す。
なお、本実施形態において、各タプルは、1つ以上の情報の組から成り、検索条件を含む検索条件部と通信内容を含むメッセージボディ部又は検索対象を含む検索対象部と通信内容を含むメッセージボディ部から構成される書込み用タプルと、検索条件を含む検索条件部又は検索対象を含む検索対象部のみから構成される読み出し用タプルのどちらかに分類される。そして、検索対象部に含まれる各情報は、識別情報(属性)をもち、値(属性値)として数値又は文字列をもち、検索条件部に含まれる各情報は、検索対象部に含まれる情報を識別する識別情報(属性)と、当該識別情報で識別した検索対象部に含まれる情報の値を規定する数値若しくは文字列又は数値の範囲若しくは文字列の範囲をもっている。
図3はイベント読み出し用タプル12の一例を示す図である。図3に示す例では、「センサ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」及び「端末ID」が属性(あるいは属性名)である。そして、「“温度”」、「“定期取得”」、「“126000〜126060”」、「“501000〜501120”」、「“2008/01/01 00:00:00”〜“2008/12/31 23:59:59”」及び「“00000”〜“99999”」が属性値である。これら各属性が検索条件部12cとなる。図3のイベント読み出し用タプル12は、例えばユーザ端末401において入力された情報に基づいて生成され、タプル分配装置301によって指示されたタプル装置201へと送られて、蓄積される。
図4はコマンド書込み用タプル21の一例を示す図である。図4に示す例では、「アクチュエータ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」、「端末ID」及び「メッセージボディ」が属性(あるいは属性名)である。そして、「“ライト”」、「“動作要求”」、「“126000〜126060”」、「“501000〜501120”」、「“2008/01/01 00:00:00”〜“2008/12/31 23:59:59”」、「“00000”〜“99999”」及び「“動作内容=“点灯””」が属性値である。この場合、「メッセージボディ」がメッセージボディ部21b、それ以外の「アクチュエータ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」及び「端末ID」が検索条件部21cとなる。図4のコマンド書込み用タプル21は、例えばユーザ端末401において入力された情報に基づいて生成され、タプル分配装置301によって指示されたタプル装置201へと送られて、蓄積される。
図5はコマンド読み出し用タプル22の一例を示す図である。図5に示す例では、「アクチュエータ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」及び「端末ID」が属性(あるいは属性名)である。そして、「“ライト”」、「“動作要求”」、「“126030”」、「“501018”」、「“2008/11/11 12:34:56”」及び「“123456”」が属性値である。これら各属性が検索対象部22aとなる。図5のコマンド読み出し用タプル22は、例えばアクチュエータ端末601において生成され、タプル分配装置301によって指示されたタプル装置201へと送られて、蓄積される。
また本実施形態では、書込み用タプルと、読み出し用タプル双方に必ず含まれる属性として、センサ種別とメッセージタイプ、もしくはアクチュエータ種別とメッセージタイプの2つのAVペアをそれぞれ分散キーとして利用する。特に本実施形態では、これら2つのAVペアを並べた文字列(例えば、「センサ種別=“温度”」および「メッセージタイプ=“定期取得”」という2つのAVペアであれば「センサ別=“温度”メッセージタイプ=“定期取得”」という文字列)をハッシュ関数にかけ、ハッシュ値に変換したものを分散キーとする。文字列のままでは分散キーに片寄が生じるような場合であっても、ハッシュ値に変換することによって、分散キーを均一に分散させることができる。例えば文字列のままでは「あ」から始まる分散キーが多いといったことが生じるが、ハッシュ値に変換することにより分散キーが確率的に均等に分散するようになる。
次に、図1に示すタプル装置201の内部構成ついて説明する。図6は、タプル装置201の構成を示すブロック図である。タプル装置201は、通信部202と、イベント書込み用タプル書込み処理部203と、イベント読み出し用タプル書込み処理部204と、コマンド書込み用タプル書込み処理部205と、コマンド読み出し用タプル書込み処理部206と、負荷監視/分散処理部207と、タプル有効期限監視部208と、イベント書込み用タプル表209と、イベント読み出し用タプル表210と、コマンド書込み用タプル表211と、コマンド読み出し用タプル表212と、分配情報更新時刻キャッシュ表213とを備える。各表209〜213の構造はそれぞれ図7〜図11に示す通りである。
図7は、図6のイベント書込み用タプル表209の一例を示す図である。図7のイベント書込み用タプル表209は、図2を参照して説明したイベント書込み用タプル11毎の、「分散キー」、「センサ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」、「端末ID」、「メッセージボディ」及び「有効期限」の各項目のデータを複数組有して構成されている。これらのうち、「センサ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」、「端末ID」及び「メッセージボディ」の各項目は、図2を参照して説明したイベント書込みタプルの各属性に対応している。また、「分散キー」は各タプルを複数のタプル装置201に分散して蓄積する場合に当該タプルの分散の手がかりあるいは検索の手がかりとなる情報である。本実施形態では、上述したように、センサ種別とメッセージタイプ(又はアクチュエータ種別とメッセージタイプの2つ)のAVペアをハッシュ値に変換したものを分散キーとして用いている。「有効期限」は、当該タプルの蓄積期限を示す。
図8は、図6のイベント読み出し用タプル表210の一例を示す図である。図8のイベント読み出し用タプル表210は、図3を参照して説明したイベント読み出し用タプル12毎の、「分散キー」、「センサ種別」、「メッセージタイプ」、「緯度」(の範囲)、「経度」(の範囲)、「時刻」(の範囲)、「端末ID」(の範囲)、「書込み元通信アドレス」及び「有効期限」の各項目のデータを複数組有して構成されている。「センサ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」及び「端末ID」の各項目は、図3を参照して説明したイベント読み出し用タプル12の各属性に対応している。また、この例では、「緯度」の範囲、「経度」の範囲、「時刻」の範囲及び「端末ID」の範囲を、始点と終点の情報で表現されている。「書込み元通信アドレス」は、当該イベント読み出し用タプル12の書込み元の端末(ユーザ端末401)の通信アドレスを示す。
図9は、図6のコマンド書込み用タプル表211の一例を示す図である。図9のコマンド書込み用タプル表211は、図4を参照して説明したコマンド書込み用タプル21毎の、「分散キー」、「アクチュエータ種別」、「メッセージタイプ」、「緯度」(の範囲)、「経度」(の範囲)、「時刻」(の範囲)、「端末ID」(の範囲)、「メッセージボディ」及び「有効期限」の各項目のデータを複数組有して構成されている。「アクチュエータ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」、「端末ID」及び「メッセージボディ」の各項目は、図4を参照して説明したコマンド書込み用タプル21の各属性に対応している。
図10は、図6のコマンド読み出し用タプル表212の一例を示す図である。図10のコマンド読み出し用タプル表212は、図5を参照して説明したコマンド読み出し用タプル22毎の、「分散キー」、「アクチュエータ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」、「端末ID」、「書込み元通信アドレス」及び「有効期限」の各項目のデータを複数組有して構成されている。「アクチュエータ種別」、「メッセージタイプ」、「緯度」、「経度」、「時刻」及び「端末ID」の各項目は、図5を参照して説明したコマンド読み出し用タプル22の各属性に対応している。
図11は、図6の分配情報更新時刻キャッシュ表213の一例を示す図である。図11の分配情報更新時刻キャッシュ表213は、「分散キー」の始点と終点及び「分配情報更新時刻キャッシュ値」の各項目データを、「分散キー」の始点と終点で決まる範囲毎に、テーブル内の複数の行に対応させて、複数組有して構成されている。「分配情報更新時刻キャッシュ値」は、端末401〜601からのタプルの書込み要求に含まれる分配情報更新時刻の値の、「分散キー」毎の最新の値を示す情報である。「分配情報更新時刻キャッシュ値」によって、分散キーの範囲毎に、各タプル表209〜212の更新時刻の最新の値を知ることができる。
なお、図6に示すタプル装置201の各部は、コンピュータ及びその周辺装置からなるハードウェア資源とそのコンピュータ等よって実行されるプログラムとを用いて実現することができる。その場合、図6に示す各部は、ハードウェア資源とプログラムとの組み合わせによって実現される複数の機能を実現するものである。ただし、図6に示す各部は、他の部分と統合したり、あるいは各部をさらに分割したりすることが可能である。なお、後述するタプル分配装置301やユーザ端末401/センサ端末501/アクチュエータ端末601についても同様である。
タプル装置201において、通信部202は、ユーザ端末401/センサ端末501/アクチュエータ端末601からのタプル書込み要求受信と、ユーザ端末401/センサ端末501/アクチュエータ端末601への読み出したタプルの送信(タプル送信メッセージ)と、タプル分配装置301からの負荷情報要求と負荷分散要求と分配情報時刻キャッシュ更新要求と分配停止完了メッセージの受信と、タプル分配装置301へのタプル装置追加要求の送信と、タプル分配装置301への負荷情報メッセージと分配停止可能メッセージの送信と、負荷分散処理時の他のタプル装置201とのタプルコピー要求の送受信とを行う。これらの送受信で用いられるタプル書込み要求メッセージ、タプル送信メッセージ、負荷分散要求メッセージ、分配情報時刻キャッシュ更新要求メッセージ、タプル装置追加要求メッセージ、負荷情報メッセージ、分配停止可能メッセージ、タプルコピー要求メッセージのデータ内容はそれぞれ図31、図39、図33、図34、図30、図32、図35、図38に示す通りである。なお、以降の記述も含め、特に図示しないメッセージについては、メッセージ種別のみを含む。
図31は、タプル書込み要求メッセージのデータ内容(すなわち引数)の一例を示す図である。図31に示すタプル書込み要求メッセージは、「メッセージ種別」、「タプル種別」、「分散キー」、「分配情報更新時刻」、「有効期限」、「書込みフラグ」及び「タプル内容」を含んでいる。「メッセージ種別」は当該メッセージの種類を示す情報である。メッセージの種類によって異なる値が設定される。「タプル種別」は図2〜図5を参照して説明した4種類のタプルのうちでこのメッセージによって書き込みを要求するタプルの種類を示す情報である。「分散キー」と「有効期限」は図7を参照して上述した通りである。「分配情報更新時刻」は、このメッセージによってタプルの書き込み要求を行うことでタプルの分配情報を更新する際の時刻を示す情報である。「書込みフラグ」は、「ON」(オン)又は「OFF」(オフ)の2値を表すフラグであり、タプル分配装置301による監視結果に基づき、当該タプル書込み要求メッセージの送信先のタプル装置201の記憶負荷が過剰となっている場合に「OFF」、そうでない場合に「ON」に設定される。タプル装置201は、「書込みフラグOFF」のタプル書込み要求を受けた場合には、マッチング処理は行うが、当該タプルの蓄積は行わない。「タプル内容」は、書き込みを要求しているタプルの各属性及び各属性値を含んでいる。
センサ端末401、センサ端末501、アクチュエータ端末601の各端末がタプル書込み要求を行う契機は、例えば、ユーザからの要求があった時、端末の起動時、センサがセンシングを行った時など、種々の場合があり得る。
図39は、タプル送信メッセージのデータ内容の一例を示す図である。図39のタプル送信メッセージは、「メッセージ種別」、「タプル種別」、及び「<タプル>リスト」を含んでいる。「メッセージ種別」及び「タプル種別」は、上記と同じである。「<タプル>リスト」は、複数のタプルの各属性及び各属性値を含んでいる。
図33は、負荷分散要求メッセージのデータ内容の一例を示す図である。図33の負荷分散要求メッセージは、「メッセージ種別」、「分散キー範囲始点」、「分散キー範囲終点」、「HDD書込み停止フラグ」及び「ヘルプタプル装置アドレス」を含んでいる(「HDD」はハードディスクドライブの略。)。「分散キー範囲始点」及び「分散キー範囲終点」は、負荷分散を要求するタプルの分散キーの範囲の始点及び終点を示す。「HDD書込み停止フラグ」は「ON」又は「OFF」の2値を表すフラグであり、当該メッセージの送信元タプル装置201が書き込み不可の場合に「ON」、そうでない場合に「OFF」に設定される。「ヘルプタプル装置アドレス」は、処理負荷又は記憶負荷が過剰となっている当該メッセージの送信元タプル装置201の処理又は記憶の一部又は全部を引き受けさせる他のタプル装置201(ヘルプタプル装置と呼ぶ。)の通信アドレスを示す情報である。「ヘルプタプル装置アドレス」は、図33に示すように指定しないこともできる。処理負荷又は記憶負荷が過剰となっている当該メッセージの送信元タプル装置201を被ヘルプタプル装置と呼ぶ。
図34は、分配情報時刻キャッシュ更新要求メッセージのデータ内容の一例を示す図である。図34の分配情報時刻キャッシュ更新要求メッセージは、「メッセージ種別」、「分散キー範囲始点」、「分散キー範囲終点」及び「分配情報時刻」を含んでいる。「メッセージ種別」、「分散キー範囲始点」及び「分散キー範囲終点」は、上記と同じである。「分配情報時刻」は、分配情報時刻キャッシュ表213内の分配情報更新時刻キャッシュ値(行)の更新・追加するための情報である。
図30は、タプル装置追加要求メッセージのデータ内容の一例を示す図である。図30のタプル装置追加要求メッセージは、「メッセージ種別」、「送信元タプル装置通信アドレス」、「処理容量」及び「記憶容量」を含んでいる。「メッセージ種別」は、上記と同じである。「送信元タプル装置通信アドレス」は、当該メッセージの送信元タプル装置201の通信アドレスを示す情報である。「処理容量」は追加するタプル装置201(すなわち当該メッセージの送信元タプル装置201)の処理容量、「記憶容量」は追加するタプル装置201の記憶容量を示す情報である。
図32は、負荷情報メッセージのデータ内容の一例を示す図である。図32の負荷情報メッセージは、「メッセージ種別」、「送信元タプル装置通信アドレス」、「処理負荷」及び「記憶負荷」を含んでいる。「メッセージ種別」及び「送信元タプル装置通信アドレス」は上記と同じである。「処理負荷」及び「記憶負荷」は当該メッセージの送信元タプル装置201の処理負荷及び記憶負荷を示す情報である。「処理負荷」及び「記憶負荷」は、上記の「処理容量」及び「記憶容量」と同一単位の値を用いて表される。
図35は、分配停止可能メッセージのデータ内容の一例を示す図である。図35の分配停止可能メッセージは、「メッセージ種別」、「分散キー範囲始点」、「分散キー範囲終点」及び「送信元タプル装置通信アドレス」を含んでいる。これらの各要素は、上記と同じである。
図38は、タプルコピー要求メッセージのデータ内容の一例を示す図である。図38のタプルコピー要求メッセージは、「メッセージ種別」、「タプル種別」及び「[<タプル>:<有効期限>]リスト」を含んでいる。「メッセージ種別」及び「タプル種別」は上記と同じである。「[<タプル>:<有効期限>]リスト」は、複数のタプルの各属性及び各属性値と各タプルの有効期限の情報とを含んでいる。
図6のタプル装置201において、イベント書込み用タプル書込み処理部203は、センサ端末501から受信したイベント書込み用タプル書込み要求メッセージに応じて、イベント書込み用タプル11の書き込み処理を行う。図20を参照して、このイベント書込み用タプル書込み処理部203の処理について説明する。この図20は、図1のセンサ端末501、タプル分配装置301及びタプル装置201間のネットワーク101を介したイベント書込み用タプル11の書込み処理のフローチャートである。ただし、ここでは、図20におけるイベント書込み用タプル書込み処理部203による処理に関係する部分についてのみ参照し、他の部分は他の構成を説明する際に参照する。
図20に示したように、イベント書込み用タプル書込み処理部203は、センサ端末501からのイベント書込み用タプル書込み要求(このとき用いられるタプル書込み要求メッセージは図31参照)に応じて、まず当該要求に含まれる分散キーについて、分配情報更新時刻キャッシュ表213を参照し(ステップS109)、当該分散キーが該当する行(「分配情報更新時刻キャッシュ表213の始点<当該分散キー<終点」が成立する行)に記載された分配情報更新時刻キャッシュ値と、当該要求に含まれる分配情報更新時刻とを比較し(ステップS110、S111)、後者(当該要求に含まれる分配情報更新時刻)の方が古い場合には、当該要求元であるセンサ端末501に対し、「分配情報無効」のエラー情報を返す(ステップS116)。
後者(当該要求に含まれる分配情報更新時刻)の方が新しい場合には、当該行の分配情報更新時刻キャッシュ値を後者の値で上書きする(ステップS112)。また後者(当該要求に含まれる分配情報更新時刻)の方が新しい場合もしくは前者と後者が同じ値である場合には、さらに当該要求に含まれる当該イベント書込み用タプル11を、イベント読み出し用タプル表210に蓄積されたイベント読み出し用タプル群の検索条件と比較し、マッチする(当該イベント書込み用タプル11の検索対象が検索条件に適合する)イベント読み出し用タプル12について、当該イベント読み出し用タプル12の書込み元に当該イベント書込み用タプル11を送信する(ステップS113)(このとき用いられるタプル送信メッセージは図39参照)。その後、イベント書込み用タプル表209に、当該イベント書込み用タプル11と、当該センサ端末501が指定した当該イベント書込み用タプル11の有効期限とを書込む(ステップS114)。そして、タプル書き込み完了通知を書き込み要求元のセンサ端末501へ送信する(ステップS115)。
図6のイベント読み出し用タプル書込み処理部204は、図21に示したように、ユーザ端末401からのイベント読み出し用タプル書込み要求(このとき用いられるタプル書込み要求メッセージは図31参照)に応じて、まず当該要求に含まれる分散キーについて、分配情報更新時刻キャッシュ表213を参照し(ステップS209)、当該分散キーが該当する行(「分配情報更新時刻キャッシュ表213の始点<当該分散キー<終点」が成立する行)に記載された分配情報更新時刻キャッシュ値と、当該要求に含まれる分配情報更新時刻とを比較し(ステップS210、S211)、後者(当該要求に含まれる分配情報更新時刻)の方が古い場合には、当該要求元であるユーザ端末401に対し、「分配情報無効」のエラー情報を返す(ステップS216)。
後者の方が新しい場合には、当該行の分配情報更新時刻キャッシュ値を後者の値で上書きし(ステップS212)、また後者の方が新しい場合もしくは前者と後者が同じ値である場合には、さらに当該要求に含まれる当該イベント読み出し用タプル12の検索条件を、イベント書込み用タプル表209に蓄積されたイベント書込み用タプル群と比較し、マッチするイベント書込み用タプル11を当該ユーザ端末401へ送信する(ステップS213)(このとき用いられるタプル送信メッセージは図39参照)。その後、当該ユーザ端末401が指定した書込みフラグがOFFでない場合には、イベント読み出し用タプル表210に、当該イベント読み出し用タプル12と、有効期限と、読み出したイベント書込み用タプル11を当該ユーザ端末401が受信するための通信アドレスとを書込む(ステップS214)。そして、タプル書き込み完了通知を書き込み要求元のユーザ端末401へ送信する(ステップS215)。
図6のコマンド書込み用タプル書込み処理部205は、図22に示したように、ユーザ端末401からのコマンド書込み用タプル書込み要求(このとき用いられるタプル書込み要求メッセージは図31参照)に応じて、まず当該要求に含まれる分散キーについて、分配情報更新時刻キャッシュ表213を参照し(ステップS309)、当該分散キーが該当する行(「表中の分散キー始点<当該分散キー<終点」が成立する行)に記載された分配情報更新時刻キャッシュ値と、当該要求に含まれる分配情報更新時刻とを比較し(ステップS310、S311)、後者(当該要求に含まれる分配情報更新時刻)の方が古い場合には、当該要求元であるユーザ端末401に対し、「分配情報無効」のエラー情報を返す(ステップS316)。
後者(当該要求に含まれる分配情報更新時刻)の方が新しい場合には、当該行の分配情報更新時刻キャッシュ値を後者の値で上書きし(ステップS312)、また後者の方が新しい場合もしくは前者と後者が同じ値である場合には、さらに当該要求に含まれる当該コマンド書込み用タプル21の検索条件を、コマンド読み出し用タプル表212に蓄積されたコマンド読み出し用タプル群と比較し、マッチするコマンド読み出し用タプル22について、当該コマンド読み出し用タプル22の書込み元に当該コマンド書込み用タプル21を送信する(ステップS313)。その後、当該ユーザ端末401が指定した書込みフラグがOFFでない場合には、コマンド書込み用タプル表211に、当該書込み用タプルと、有効期限とを書込む(ステップS314)。そして、タプル書き込み完了通知を書き込み要求元のユーザ端末401へ送信する(ステップS315)。
図6のコマンド読み出し用タプル書込み処理部206は、図23に示したように、アクチュエータ端末601からのコマンド読み出し用タプル書込み要求(このとき用いられるタプル書込み要求メッセージは図31参照)に応じて、まず当該要求で指定された分散キーについて、分配情報更新時刻キャッシュ表213を参照し(ステップS409)、当該分散キーが該当する行(「表中の分散キーの始点<指定された分散キー<表中の分散キーの終点」が成立する行)に記載された分配情報更新時刻キャッシュ値と、当該要求に含まれる分配情報更新時刻とを比較し(ステップS410、S411)、後者(当該要求に含まれる分配情報更新時刻)の方が古い場合には、当該要求元であるアクチュエータ端末601に対し、「分配情報無効」のエラー情報を返す(ステップS416)。
後者(当該要求に含まれる分配情報更新時刻)の方が新しい場合には、当該行の分配情報更新時刻キャッシュ値を後者の値で上書きし(ステップS412)、また後者の方が新しい場合もしくは前者と後者が同じ値である場合には、さらに当該要求に含まれる当該コマンド読み出し用タプル22を、コマンド書込み用タプル表211に蓄積されたコマンド書込み用タプル群の検索条件と比較し、マッチするコマンド書込み用タプル21を当該アクチュエータ端末601へ送信する(ステップS413)。その後、コマンド読み出し用タプル表212に、当該コマンド読み出し用タプル22と、当該アクチュエータ端末601が指定した当該コマンド読み出し用タプル22の有効期限と、読み出したコマンド書込み用タプル21を当該アクチュエータ端末601が受信するための通信アドレスとを書込む(ステップS414)。そして、タプル書き込み完了通知を書き込み要求元のアクチュエータ端末601へ送信する(ステップS415)
図6の負荷監視/分散処理部207は、図24に示したように、タプル分配装置301からの負荷情報要求に応じて、当該タプル装置201にかかる処理負荷と記憶負荷の大きさを調べ(ステップS504)、タプル分配装置301にその結果を返す(ステップS505)(このとき用いられる負荷情報メッセージは図32参照)。このとき、単位時間あたりのHDDアクセス回数を処理負荷とし、HDD使用量を記憶負荷とする。
ただし、処理負荷の指標はHDDアクセス回数に限るものではなく、単に時間あたりのHDD書込み量や読み出し量、CPU(Central Processing Unit)の平均タスクキーュー長、あるいはそれらの組み合わせでもよい。これらの負荷指標は通常OS(Operating System)の機能を用いて調べることができる。
また図6の負荷監視/分散処理部207は、タプル分配装置301からの負荷分散要求(このとき用いられる負荷情報要求メッセージは図33参照)に応じて、負荷分散処理を行う(図24のステップS511やステップS515、図25のステップS608)。このとき、図29に示したように、負荷分散要求の引数として、「負荷分散を行う分散キー範囲」と「HDD書込み停止フラグ=ON」と「ヘルプタプル装置の通信アドレス」とが指定された場合(ステップS1001で「YES」、S1002で「YES」の場合)には、まず指定された「負荷分散を行う分散キー範囲」に含まれる分散キーをもつイベント読み出し用タプル表210内のイベント読み出し用タプル12について、指定された「ヘルプタプル装置の通信アドレス」へタプルコピー要求(このとき用いられるタプルコピー要求メッセージは図38参照)を行い(ステップS1003、S1004)、イベント読み出し用タプル表210から削除する(ステップS1005)。次に、指定された「負荷分散を行う分散キー範囲」に含まれる分散キーをもつコマンド書込み用タプル表211内のコマンド書込み用タプル21について、指定された「ヘルプタプル装置の通信アドレス」へタプルコピー要求を行い(ステップS1006、S1007)、コマンド書込み用タプル表211から削除する(ステップS1008)。
他方、負荷分散要求の引数として、「負荷分散を行う分散キー範囲」と「HDD書込み停止フラグ=OFF」と「ヘルプタプル装置の通信アドレス」が指定された場合(ステップS1001で「NO」の場合)には、まず指定された「負荷分散を行う分散キー範囲」に含まれる分散キーをもつイベント読み出し用タプル表210内のイベント読み出し用タプル12について、指定された「ヘルプタプル装置の通信アドレス」へタプルコピー要求を行う(ステップS1012、S1013)。次に、指定された「負荷分散を行う分散キー範囲」に含まれる分散キーをもつコマンド書込み用タプル表211内のコマンド書込み用タプル21について、指定された「ヘルプタプル装置の通信アドレス」へタプルコピー要求を行う(ステップS1014、S1015)。
他方、負荷分散要求の引数として、「負荷分散を行う分散キー範囲」と「HDD書込み停止フラグ=ON」のみが指定された場合(ステップS1001で「YES」、S1002で「NO」の場合)には、指定された「負荷分散を行う分散キー範囲」に含まれる分散キーをもつイベント読み出し用タプル表210内のイベント読み出し用タプル12を削除し(ステップS1010)、次に、指定された「負荷分散を行う分散キー範囲」に含まれる分散キーをもつコマンド書込み用タプル表211内のコマンド書込み用タプル21を削除する(ステップS1011)。
なお、ステップS1008、ステップS1011又はステップS1015の処理が終了した場合には、負荷分散要求を行ったタプル分配装置301に対して、負荷分散処理終了通知を送信する(ステップS1009)。
また図6の負荷監視/分散処理部207は、図25に示したように、タプル分配装置301からの分配情報時刻キャッシュ更新要求(ステップS610)(このとき用いられる分配情報時刻キャッシュ更新要求メッセージは図34参照)に応じて、分配情報時刻キャッシュ表213の更新処理を行う。(ステップS611又はステップS612)。このとき、分配情報時刻キャッシュ更新要求の引数として指定された「分配情報の分散キー範囲」に一致する行が分配情報時刻キャッシュ表213内に存在する場合には、その分配情報更新時刻キャッシュ値を指定された「分配情報時刻」で上書きし、存在しない場合には、新しく行を追加し、その分配情報更新時刻キャッシュ値を指定された「分配情報時刻」とする。追加する行の分散キー範囲が、既存の行の分散キー範囲と重複する場合には、既存の行の範囲を書きかえ、重複がないようにする(たとえば追加する行が「始点=000000、終点=050000、分配情報更新時刻キャッシュ値=2008/12/12 11:22:33」であり、既存の行として「始点=000000、終点=100000、分配情報更新時刻キャッシュ値=2008/03/11 12:34:56」がある場合には、分散キーの範囲が重複するため、既存の行を「始点=050001、終点=100000、分配情報更新時刻キャッシュ値=2008/03/11 12:34:56」と書きかえる)。
また図6の負荷監視/分散処理部207は、図29に示したように、他のタプル装置201からのタプルコピー要求に応じて、指定されたイベント読み込み用タプルやコマンド書込み用タプル21を、それぞれイベント読み込み用タプル表210やコマンド書込み用タプル表211に書き込む(ステップS1016、S1017)。すなわち、図29のステップS1004又はS1013で、被ヘルプタプル装置となるタプル装置201からタプルコピー要求メッセージが送信されると、タプルコピー要求メッセージの宛先のヘルプタプル装置となるタプル装置201で、イベント読み出し用タプル表210が更新される(ステップS1016)。また、ステップS1007又はS1015で、被ヘルプタプル装置となるタプル装置201からタプルコピー要求メッセージが送信されると、タプルコピー要求メッセージの宛先のヘルプタプル装置となるタプル装置201で、コマンド書込み用タプル表211が更新される(ステップS1016)。
また図6の負荷監視/分散処理部207は、図25に示したように、タプル装置201の起動時に当該タプル装置201をシステムに組み入れるためにタプル分配装置301にタプル装置追加要求を送信する(ステップS601)(このとき用いられるタプル装置追加要求メッセージは図30参照)。
図6のタプル有効期限監視部208は、定期的に各タプル表209〜212に蓄積されたタプル群の有効期限を確認し、有効期限がその時点での時刻よりも古いタプルを、タプル表から削除する。
またタプル有効期限監視部208は、図26で示したように、定期的に分配情報更新時刻キャッシュ表213の各行に示された各分散キー範囲について、当該分散キー範囲内にある分散キーをもつタプルが各タプル表209〜212内に1つでも存在するか否かを調べ(ステップS701、S702、S703)、存在しない分散キー範囲がある場合には、その分散キー範囲と当該タプル装置201の通信アドレスを引数としてタプル分配装置301に分配停止可能メッセージを送信する(ステップS704)(このとき用いられる分配停止可能メッセージは図35参照)。その後、タプル分配装置301から分配停止完了メッセージを受信した場合には(ステップS708又はS709)、分配情報更新時刻キャッシュ表213から、指定された分散キー範囲に該当する行を削除する(ステップS710、S711)。
図12は、図1のタプル分配装置301の構成を示すブロック図である。タプル分配装置301は、通信部302と、分配先問合せ処理部303と、タプル分配表304と、タプル装置負荷監視部305と、タプル装置負荷平準化部306と、タプル装置負荷表307とを備える。タプル分配表304、タプル装置負荷表307の構造はそれぞれ図13、図14に示す通りである。
図13は、図12のタプル分配表304の一例を示す図である。図13のタプル分配表304は、「分散キー」の範囲(始点及び終点)毎に、「分配先タプル装置通信アドレス:書込み可能フラグ」のリストと「更新時刻」の情報を複数組含んで構成されている。本実施形態において、「分散キー」は、センサー種別又はアクチュエータ種別を示す文字列とメッセージタイプを示す文字列を組み合わせた文字列をハッシュ関数でハッシュ値に変換した値が用いられている。図13に示す例では、「分散キー」が「000000」〜「100000」のタプルが、通信アドレス「12.34.56.78:10010」と「87.65.43.21:10010」の2つのタプル装置201に蓄積されていて、この分散キーの範囲についての更新時刻が「2008/03/11 12:34:56」であることが示されている。通信アドレス「12.34.56.78:10010」のタプル装置201が書き込み不可であり、通信アドレス「87.65.43.21:10010」のタプル装置201が書き込み可能であることが示されている。また、「分散キー」が「100001」〜「200000」のタプルが、通信アドレス「23.45.67.89:10010」と「34.56.78.90:10010」の2つのタプル装置201に蓄積されていて、この分散キーの範囲についての更新時刻が「2008/01/23 11:22:33」であることが示されている。通信アドレス「23.45.67.89:10010」のタプル装置201が書き込み不可であり、通信アドレス「34.56.78.90:10010」のタプル装置201が書き込み可能であることが示されている。
図14は、図12のタプル装置負荷表307の一例を示す図である。図14のタプル装置負荷表307は、「タプル装置通信アドレス」毎に、当該タプル装置201の「処理容量」、「記憶容量」、「処理負荷」、「記憶負荷」及び「前回記憶負荷」の各項目のデータを1又は複数組有して構成されている。「記憶負荷」は最新の記憶負荷の情報、「前回記憶負荷」は1回前の更新時の記憶負荷の情報である。
図12の通信部302は、ユーザ端末401/センサ端末501/アクチュエータ端末601からの分配先問合せ受信と、その回答の送信と、タプル装置201への定期的な負荷情報要求の送信と、必要に応じた負荷分散要求と分配情報時刻キャッシュ更新要求の送信と、タプル装置201からのタプル装置追加要求と分配停止可能メッセージの受信とを行う。分配先問合せメッセージと、分配先問合せ回答メッセージのデータ内容は、それぞれ図36、図37に示す通りである。
図36は、分配先問合せメッセージのデータ内容の一例を示す図である。図36の分配先問合せメッセージは、「メッセージ種別」、「分散キー」及び「送信元端末アドレス」を含んでいる。「分散キー」には、分配先の問い合わせを行うタプルの分散キーの値が設定される。「送信元端末アドレス」には、当該メッセージを送信した問い合わせ元の端末の通信アドレスが設定される。
図37は、分配先問合せ回答メッセージのデータ内容の一例を示す図である。図37の分配先問合せ回答メッセージは、「メッセージ種別」、「分散キー範囲始点」、「分散キー範囲終点」、「分配先タプル装置通信アドレス:書込み可能フラグ リスト」及び「更新時刻」を含んでいる。「分散キー範囲始点」と「分散キー範囲終点」は問い合わせを行ったタプルの分散キーを含む分散キーの範囲の始点と終点を示す情報である。「分配先タプル装置通信アドレス:書込み可能フラグ リスト」は、その分散キーの範囲のタプルを蓄積している1又は複数のタプル装置201の通信アドレスと、各タプル装置201の書込み可能フラグの値を示す情報である。「更新時刻」はその分散キーの範囲の蓄積情報の最終の更新時刻を示す情報である。
図12の分配先問合せ処理部303は、図20〜図23に示したように、ユーザ端末401/センサ端末501/アクチュエータ端末601からの分配先問合せ(ステップS104、S204、S304、S404)に応じて、タプル分配表304を参照し、指定された分散キーが該当する行(「表中の分散キーの始点<指定された分散キー<表中の分散キーの終点」が成立する行)に記載された分散キー範囲、分配先タプル装置通信アドレスと書込み可能フラグのリストと、更新時刻とを問合せ元に送信する(各図のステップS105、S205、S305、S405)。
図12のタプル装置負荷監視部305は、図24に示したように、周期C毎に(ステップS501)、タプル装置負荷表307に記載されているタプル装置通信アドレスすべてに対して、負荷情報要求を送信し(ステップS502、S503)、その回答として得られた処理負荷情報と記憶負荷情報を、タプル装置負荷表307の該当する行の処理負荷、記憶負荷の列に上書きする(ステップS506)。この際、前もって記憶負荷の列にあった値を前回記憶負荷の列に上書きしておく。周期Cはシステム管理者が設定可能なパラメータであり、例えば3時間と設定する。
図12のタプル装置負荷平準化部306は、図24に示したように、タプル装置負荷監視部305が定期的に行うタプル装置負荷監視(ステップS501〜S506)が終わるたびに、タプル装置負荷表307を参照し(ステップS507)、各タプル装置201の負荷が高くなりすぎているかどうかを調べる(ステップS508、S512)。このとき、処理容量に対する処理負荷の大きさが9割を超える場合には処理負荷が過剰と判断し、また、記憶容量に対する記憶負荷の大きさが9割を超える場合には記憶負荷が過剰と判断する。ただし、判断方法としてはこれに限らず、例えば8割を超えるか否かで判断してもよいし、各種容量から各種負荷を引いた大きさがある値を超えるか否かで判定してもよいし、記憶容量については下記条件(以下、記憶負荷条件と呼ぶ)を満たなくなったか否かで判定してもよい。ただし、記憶容量マージンとは、システム管理者が設定可能なパラメータであり、システムの安定性を上げたい場合には大きく、例えば10GBと設定し、設備コストを下げたい場合には小さく、例えば1GBと設定する。
記憶負荷条件:(記憶容量−記憶負荷)>(記憶負荷−前回記憶負荷)+記憶容量マージン
次に、処理負荷が過剰と判断されたタプル装置201(以下、被ヘルプタプル装置と呼ぶ)それぞれについて、まずタプル分配表304を参照し(ステップS509)、当該タプル装置201が書込み可能フラグ=1で分配先タプル装置として登録されている分散キーの範囲を調べ、その範囲の数をVとし、得られた分散キーの範囲の1つについて、次の処理負荷分散処理を行う(ステップS510)。
図24のステップS510における処理負荷分散処理は、図27に示したように、以下のように行う。
第一に、タプル分配表304から、当該分散キー範囲の分配先タプル装置通信アドレスと書込み可能フラグのリストを取得する(ステップS801)。
第二に、当該リストの中で、被ヘルプタプル装置以外で、書込み可能フラグ=1(=ON)のタプル装置201が1つ以上存在する場合には(ステップS802で「YES」の場合には)、それらタプル装置群の記憶容量と記憶負荷と前回記憶負荷と処理容量と処理負荷とをタプル装置負荷表307から取得し(ステップS803)、その中で、前記記憶負荷条件と下記条件(以下、当該条件を処理負荷条件1と呼ぶ)を満たすタプル装置201を選出する(ステップS804)。ただし、処理容量残量とは、処理容量から処理負荷を差し引いた値を意味する。また、処理容量マージンとは、システム管理者が設定可能なパラメータであり、システムの安定性を上げたい場合には大きく、例えば2と設定し、設備コストを下げたい場合には小さく、例えば1と設定する。
処理負荷条件1:処理容量残量>(被ヘルプタプル装置の処理負荷/V)×処理容量マージン
第三に、第二の手順で選出したタプル装置201が1つ以上存在する場合には(ステップS804で「YES」の場合には)、被ヘルプタプル装置に対し、「当該分散キー範囲」と「HDD書込み停止フラグ=ON」を引数とした負荷分散要求を送信し(ステップS805)、被ヘルプタプル装置から負荷分散処理終了通知を受け取ったら、タプル分配表304における当該分散キー範囲の行について、被ヘルプタプル装置の書込み可能フラグを0に、更新時刻をその時点の時刻に書きかえる(ステップS806)。さらに、被ヘルプタプル装置に対し、分配情報時刻キャッシュ更新要求を送信し(ステップS807)、当該処理負荷分散処理を終了する。
第四に、第二の手順でタプル装置が1つも選出されなかった場合(ステップS802で「NO」又はステップS804で「NO」の場合)、第一の手順(ステップS801)で取得したリストの中で、被ヘルプタプル装置以外で、書込み可能フラグ=0(=OFF)のタプル装置201が1つ以上存在する場合には(ステップS808で「YES」の場合には)、それらタプル装置群の記憶容量と記憶負荷と前回記憶負荷と処理容量と処理負荷をタプル装置負荷表307から取得し(ステップS809)、その中で、前記記憶負荷条件と、下記条件(以下、処理負荷条件2と呼ぶ)を満たすタプル装置を選出する(ステップS810)。
処理負荷条件1:処理容量残量>(被ヘルプタプル装置の処理負荷/(2×V))×処理容量マージン
第五に、第四の手順で、選出したタプル装置群の中で、最も記憶容量残量が大きいタプル装置をヘルプタプル装置とし(ステップS811)、被ヘルプタプル装置に対し、「当該分散キー範囲」と「HDD書込み停止フラグ=OFF」と「ヘルプタプル装置の通信アドレス」を引数とした負荷分散要求を送信する(ステップS812)。次に、被ヘルプタプル装置から負荷分散処理終了通知を受け取ったら、タプル分配表304における当該分散キー範囲の行について、ヘルプタプル装置の書込み可能フラグを1に、更新時刻をその時点の時刻に書きかえる(ステップS813)。さらに、被ヘルプタプル装置に対し、分配情報時刻キャッシュ更新要求を送信し(ステップS814)、当該処理負荷分散処理を終了する。ただし、ヘルプタプル装置とは、負荷分散処理によって被ヘルプタプル装置の負荷の一部を担うタプル装置を意味し、記憶容量残量とは、記億容量から記憶負荷を差し引いた値を意味する。
第六に、第四の手順でタプル装置が1つも選出されなかった場合(ステップS808で「NO」又はステップS810で「NO」の場合)、全タプル装置201の記憶容量と記憶負荷と前回記憶負荷と処理容量と処理負荷をタプル装置負荷表307から取得し(ステップS815)、その中で、前記記億負荷条件と、処理負荷条件2を満たすタプル装置201を選出する(ステップS816)。
第七に、第六の手順で選出したタプル装置群の中で、最も記憶容量残量が大きいタプル装置201をヘルプタプル装置とし(ステップS817)、被ヘルプタプル装置に対し、「当該分散キー範囲」と「HDD書込み停止フラグ=OFF」と「ヘルプタプル装置の通信アドレス」を引数とした負荷分散要求を送信する(ステップS818)。被ヘルプタプル装置から負荷分散処理終了通知を受け取ったら、タプル分配表304における当該分散キー範囲の行について、分配先タプル装置通信アドレスリストにヘルプタプル装置の通信アドレスを書込み可能フラグ1として追加し、更新時刻をその時点の時刻に書きかえる(ステップS819)。さらに、被ヘルプタプル装置に対し、分配情報時刻キャッシュ更新要求を送信し(ステップS820)、当該処理負荷分散処理を終了する。
第八に、第六の手順でタプル装置が1つも選出されなかった場合(ステップS816で「NO」の場合)、システム管理者に「システム処理負荷過剰」の警告を電子メールなどで通知する(ステップS821)。
以上の図27の処理で、図24のステップS510の処理負荷分散処理が行われる。
次に、図12のタプル装置負荷平準化部306は、記憶負荷が過剰と判断されたタプル装置(被ヘルプタプル装置)それぞれについて、まずタプル分配表304を参照し(図24のステップS513)、当該タプル装置201が書込み可能フラグ=1で分配先タプル装置として登録されている分散キーの範囲を調べ、その範囲の数をVとし、得られた分散キーの範囲のすべてについて、次の記憶負荷分散処理を行う(ステップS514)。
図24のステップS514における記憶負荷分散処理は、図28に示したように、以下のように行う。
第一に、タプル分配表304から、当該分散キー範囲の分配先タプル装置通信アドレスと書込み可能フラグのリストを取得する(ステップS901)。
第二に、当該リストの中で、被ヘルプタプル装置以外で、書込み可能フラグ=1(=ON)のタプル装置が1つ以上存在する場合には(ステップS902で「YES」)、それらタプル装置群の記憶容量と記憶負荷と前回記憶負荷と処理容量と処理負荷とをタプル装置負荷表307から取得し(ステップS903)、その中で、前記記憶負荷条件と処理負荷条件1を満たすタプル装置を選出する(ステップS904)。
第三に、第二の手順で選出したタプル装置が1つ以上存在する場合には(ステップS902で「YES」)、被ヘルプタプル装置に対し、「当該分散キー範囲」、と「HDD書込み停止フラグ=ON」を引数とした負荷分散要求を送信する(ステップS905)。そして、被ヘルプタプル装置から負荷分散処理終了通知を受け取ったら、タプル分配表304における当該分散キー範囲の行について、被ヘルプタプル装置の書込み可能フラグを0に、更新時刻をその時点の時刻に書きかえる(ステップS906)。
さらに、被ヘルプタプル装置に対し、分配情報時刻キャッシュ更新要求を送信し(ステップS907)、当該処理負荷分散処理を終了する。
第四に、第二の手順でタプル装置が1つも選出されなかった場合(ステップS902で「NO」又はステップS904で「NO」の場合)、第一の手順で取得したリストの中で、被ヘルプタプル装置以外で、書込み可能フラグ=0(=OFF)のタプル装置が1つ以上存在するときには(ステップS908で「YES」のときには)、それらタプル装置群の記憶容量と記憶負荷と処理容量と処理負荷をタプル装置負荷表307から取得し(ステップS909)、その中で、前記記憶負荷条件と、処理負荷条件1を満たすタプル装置201を選出する(ステップS910)。
第五に、第四の手順で選出したタプル装置群の中で、最も記憶容量残量が大きいタプル装置201をヘルプタプル装置とし(ステップS911)、被ヘルプタプル装置に対し、「当該分散キー範囲」と「HDD書込み停止フラグ=ON」と「ヘルプタプル装置の通信アドレス」を引数とした負荷分散要求を送信し(ステップS912)、被ヘルプタプル装置から負荷分散処理終了通知を受け取ったら、タプル分配表304における当該分散キー範囲の行について、被ヘルプタプル装置の書込み可能フラグを0に、ヘルプタプル装置の書込み可能フラグを1に、更新時刻をその時点の時刻に書きかえる(ステップS913)。さらに、被ヘルプタプル装置に対し、分配情報時刻キャッシュ更新要求を送信し(ステップS914)、当該処理負荷分散処理を終了する。
第六に、第四の手順でタプル装置が1つも選出されなかった場合(ステップS908で「NO」又はステップS910で「NO」の場合)、全タプル装置201の記憶容量と記憶負荷と処理容量と処理負荷をタプル装置負荷表307から取得し(ステップS915)、その中で、前記記憶負荷条件と、処理負荷条件1を満たすタプル装置201を選出する(ステップS916)。
第七に、第六の手順で選出したタプル装置群の中で、最も記憶容量残量が大きいタプル装置をヘルプタプル装置とし(ステップS917)、被ヘルプタプル装置に対し、「当該分散キー範囲」と「HDD書込み停止フラグ=ON」と「ヘルプタプル装置の通信アドレス」を引数とした負荷分散要求を送信する(ステップS918)。次に、被ヘルプタプル装置から負荷分散処理終了通知を受け取ったら、タプル分配表304における当該分散キー範囲の行について、被ヘルプタプル装置の書込み可能フラグを0とし、分配先タプル装置通信アドレスリストにヘルプタプル装置の通信アドレスを書込み可能フラグ1として追加し、更新時刻をその時点の時刻に書きかえる(ステップS919)。さらに、被ヘルプタプル装置に対し、分配情報時刻キャッシュ更新要求を送信し(ステップS920)、当該処理負荷分散処理を終了する。
第八に、第六の手順でタプル装置が1つも選出されなかった場合(ステップS916で「NO」の場合)、システム管理者に「システム記憶負荷過剰」の警告を電子メールなどで通知する(ステップS921)。
また図12のタプル装置負荷平準化部306は、図25に示したように、タプル装置201からのタプル装置追加要求(ステップS601)に応じて、まず指定されたタプル装置201(以下、新タプル装置と呼ぶ)の通信アドレスと、処理容量と、記憶容量とを、タプル装置負荷表307に新たな行として書込み(ステップS602)、次に、タプル装置負荷表307を参照し(ステップS603)、最も処理負荷が高いタプル装置を選出する(ステップS604)。このときの選出方法としては、例えば、処理容量に対する処理負荷の割合を調べ、最も高い割合を示したタプル装置201を選出する方法があるが、負荷過剰の判断方法と同様、それに限るものではない。
次に、タプル分配表304を参照し(ステップS605)、選出されたタプル装置201が書込み可能フラグ=1で分配先タプル装置として登録されている分散キーの範囲を調べ、各範囲の中で、最も始点と終点の差が大きいものを選出する(ステップS606)。次に、まず、選出された当該タプル装置201に対し、選出した「当該分散キー範囲」と「HDD書込み停止フラグ=ON」と「ヘルプタプル装置の通信アドレス」を引数とした負荷分散要求を送信する(ステップS607)。ここで、負荷分散要求を受信した既存のタプル装置201で負荷分散処理が実行される(ステップS608)。そして、タプル装置負荷平準化部306は、当該タプル装置から負荷分散処理終了通知を受け取ったら、次に、タプル分配表304における当該分散キー範囲の行を削除し、始点を当該分散キー範囲の始点、終点を当該分散キー範囲の中央とする行と、始点を当該分散キー範囲の中央、終点を当該分散キー範囲の終点とする行を新たに追加する(ステップS609)。このとき追加する2つの行の分配先タプル装置の通信アドレスと書込み可能フラグのリストと更新時刻には、削除した行に入っていたリストと更新時刻を入れる。ただし、そのうち1行については、さらに、当該タプル装置201の書込み可能フラグを0に書きかえ、分配先タプル装置通信アドレスリストに新タプル装置201の通信アドレスを書込み可能フラグ1として追加し、更新時刻をその時点の時刻に書きかえ、さらに、当該タプル装置201と、新タプル装置201に対し、分配情報時刻キャッシュ更新要求を送信する(ステップS610)。
また図12のタプル装置負荷平準化部306は、図26に示したように、タプル装置201からの分配停止可能メッセージ(ステップS704)に応じて、タプル分配表304の指定された分散キー範囲に該当する行を参照し(ステップS705)、タプル装置通信アドレスリストに、指定されたタプル装置通信アドレス以外に書込み可能フラグ=1(=ON)のものがある場合には(ステップS706で「YES」の場合には)、指定されたタプル装置通信アドレスを削除し、当該行の更新時刻をその時点の時刻に書きかえ(ステップS707)、当該タプル装置201に分配停止完了メッセージを送信する(ステップS708)。他方、タプル装置通信アドレスリストに、指定されたタプル装置通信アドレス以外に書込み可能フラグ=1(=ON)のものがない場合には(ステップS706で「NO」の場合には)、当該タプル装置201に分配停止完了メッセージを送信する(ステップS709)。
図15は、図1のユーザ端末401の構成を示すブロック図である。ユーザ端末401は、通信部402と、U/I(ユーザインタフェース)部403と、タプル書込み処理部404と、タプル分配表キャッシュ405とを備える。タプル分配表キャッシュ405の構造は図16に示す通りである。
図16は、図15のタプル分配表キャッシュ405の一例を示す図である。図16のタプル分配表キャッシュ405は、「分散キー」、「分配先タプル装置通信アドレス:書込み可能フラグ リスト」及び「更新時刻」を含んで構成されている。
図15の通信部402は、タプル装置201へのタプル書込み要求の送信と、タプル装置201からのイベント書込み用タプル11の受信と、タプル分配装置301への分配先問合せの送信とを行う。U/I部403は、ユーザインタフェースを提供し、ユーザがタプル入力画面からイベント読み出し用タプル12と、コマンド書込み用タプル21とを入力することを可能とする。またタプル出力画面に読み出したイベント書込み用タプル11を表示する。タプル入力画面を図17に示す。タプル出力画面には、読みだしたイベント書込み用タプル11のリストをテキスト表示する。ただし、出力方法としてはそれに限るものではなく、イベント書込み用タプル11内の緯度、経度情報を用い、地図上の対応する位置に点をプロットした表示などが考えられる。
図15のタプル書込み処理部404は、図21、図22に示したように、U/I部403を通してユーザが入力したタプルについて、タプルの書込み処理を行う。なお、図21は、イベント読み出し用タプル12の書き込み処理フロー、図22は、コマンド書き込み用タプルの書き込み処理フローを示している。タプル書込み処理部404は、タプルに含まれるセンサ種別とメッセージタイプ、もしくはアクチュエータ種別とメッセージタイプのAVペアを並べた文字列をハッシュ関数にかけ、分散キーとしてハッシュ値を算出し(ステップS201又はS301)、タプル分配表キャッシュ405を参照する(ステップS202又はS302)。タプル分配表キャッシュ405に、当該タプルの分散キーが該当する行(「表中の分散キーの始点<指定された分散キー<表中の分散キーの終点」が成立する行)が存在する場合には(ステップS203で「YES」又はステップS303で「YES」の場合には)、当該行に記載された分配先タプル装置通信アドレスのうち、書込み可能フラグが1(=ON)のものに対しては、書込みフラグをONとしてタプル書込み要求を送信し、書込み可能フラグが0(=OFF)のものに対しては、書込みフラグがOFFとしてタプル書込み要求を送信する(ステップS207又はS307、ステップS208又はS308)。ここで、ステップS207又はS307では、タプル分配表キャッシュ405に格納されているすべてのタプル装置201に対応する分配先タプル装置通信アドレスが選択される。そして、ステップS208又はS308では、ステップS207又はS307で選択された複数の分配先タプル装置通信アドレスを持つタプル装置201に対してタプル書込み要求が送信される。
タプル装置201から「分配情報無効」のエラー情報を受信した場合には(ステップS217で「YES」又はS317で「YES」の場合には)、タプル分配装置301に分配先問合せを行い(ステップS204又はS304)、新たに当該分散キーを含む分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とを取得する(ステップS205又はS305)。そして、タプル分配表キャッシュ405の当該タプルの分散キーが該当する行を、新しく取得した分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とで上書きする(ステップS206又はS306)。過去のリストに比べて新たに追加された分配先タプル装置通信アドレスに対し、前記と同様に、書込み可能フラグに応じて書込みフラグを変化させつつタプル書込み要求を送信する(ステップS207、S208又はS307、S308)。
一方、タプル分配表キャッシュ405を参照し、当該タプルの分散キーが該当する行が存在しない場合には(ステップS203で「NO」又はステップS303で「NO」の場合には)、タプル分配装置301に分配先問合せを行い(ステップS204又はS304)、当該分散キーを含む分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とを取得する(ステップS205又はS305)。そして、タプル分配表キャッシュ405に、取得した分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻を含む行を追加し(ステップS206又はS306)、当該リストにおいて、書込み可能フラグが1(=ON)の分配先タプル装置通信アドレスに対しては、書込みフラグをONとしてタプル書込み要求を送信し、書込み可能フラグが0(=OFF)の分配先タプル装置通信アドレスに対しては、書込みフラグをOFFとしてタプル書込み要求を送信する(ステップS207、S208又はステップS307、S308)。
図18は、図1のセンサ端末501の構成を示すブロック図である。センサ端末501は、通信部502と、センサ部503と、タプル書込み処理部504と、タプル分配表キャッシュ505とを備える。タプル分配表キャッシュ505の構造は図16に示したタプル分配表キャッシュ405と同じである。
図18の通信部502は、タプル装置201へのイベント書込み用タプル書込み要求の送信と、タプル分配装置301への分配先問合せの送信とを行う。センサ部503は、センサを備え、温度、湿度、音量、加速度、磁場、高度、緯度、経度などの物理情報をセンサ値として読み取り、図2を参照して説明したイベント書込み用タプル11を作成する。
タプル書込み処理部504は、図20に示したように、センサ部503が作成したイベント書込み用タプル11について、タプルに含まれるセンサ種別とメッセージタイプのAVペアを並べた文字列をハッシュ関数にかけ、分散キーとしてハッシュ値を算出する(ステップS101)。次に、タプル分配表キャッシュ505を参照し(ステップS102)、当該タプルの分散キーが該当する行(「表中の分散キーの始点<指定された分散キー<表中の分散キーの終点」が成立する行)が存在する場合には(ステップS103で「YES」の場合には)、当該行に記載された分配先タプル装置通信アドレスのうち、書込み可能フラグが1(=ON)のものの1つを選択し(ランダムに決定する)(ステップS107)、ONとした書込みフラグと、センサ端末設置者が予め設定した有効期限を含めたタプル書込み要求をステップS107で選択した1つの分配先タプル装置通信アドレスを持つタプル装置201に対して送信する(ステップS108)。
タプル装置201から「分配情報無効」のエラー情報を受信した場合には(ステップS117で「YES」の場合には)、タプル分配装置301に分配先問合せを行い(ステップS104)、新たに当該分散キーを含む分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とを取得し(ステップS105)、タプル分配表キャッシュ505の当該タプルの分散キーが該当する行を、新しく取得した分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とで上書きする(ステップS106)。そして、新たな分配先タプル装置通信アドレスリストに対し、前記と同様に、書込み可能フラグが1(=ON)のものの1つにタプル書込み要求を送信する(ステップS107、S108)。
他方、タプル分配表キャッシュ505を参照し、当該タプルの分散キーが該当する行が存在しない場合には(ステップS103で「NO」の場合には)、タプル分配装置301に分配先問合せを行い(ステップS104)、当該分散キーを含む分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とを取得し(ステップS105)、タプル分配表キャッシュ505に、取得した分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻を含む行を追加する(ステップS106)。そして、当該リストにおいて、前記と同様に、書込み可能フラグが1(=ON)の分配先タプル装置通信アドレスの1つにタプル書込み要求を送信する(ステップS107、S108)。
図19は、図1のアクチュエータ端末601の構成を示すブロック図である。図19のアクチュエータ端末601は、通信部602と、アクチュエータ部603と、タプル書込み処理部604と、タプル分配表キャッシュ605とを備える。タプル分配表キャッシュ605の構造は図16に示したタプル分配表キャッシュ405と同じである。
通信部602は、タプル装置201へのコマンド読み出し用タプル書込み要求の送信と、タプル装置201からのコマンド書込み用タプル21(図4参照)の受信と、タプル分配装置301への分配先問合せの送信とを行う。アクチュエータ部603は、モーター、ランプ、ディスプレイ、警報器、スピーカーなどのアクチュエータを備え、受信したコマンド書込み用タプル21の内容に応じてアクチュエータを駆動する。
タプル書込み処理部604は、図23に示したように、起動時に、アクチュエータ端末設置者が予め設定したコマンド読み出し用タプル22(図5参照)について、タプルに含まれるアクチュエータ種別とメッセージタイプのAVペアを並べた文字列をハッシュ関数にかけ、分散キーとしてハッシュ値を算出する(ステップS401)。そして、タプル分配表キャッシュ605を参照し(ステップS402)、当該タプルの分散キーが該当する行(「表中の分散キーの始点<指定された分散キー<表中の分散キーの終点」が成立する行)が存在する場合には(ステップS403で「YES」の場合にには)、当該行に記載された分配先タプル装置通信アドレスのうち、書込み可能フラグが1(=ON)のものの1つ(ランダムに決定する)に書込み先タプル装置を選択し(ステップS407)、ステップS407で選択した1つの分配先タプル装置通信アドレスを持つタプル装置201に対してONとした書込みフラグと、センサ端末設置者が予め設定した有効期限を含めたタプル書込み要求を送信する(ステップS408)。
タプル装置201から「分配情報無効」のエラー情報を受信した場合には(ステップS417)、タプル分配装置301に分配先問合せを行い(ステップS404)、新たに当該分散キーを含む分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とを取得し(ステップS405)、タプル分配表キャッシュ605の当該タプルの分散キーが該当する行を、新しく取得した分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とで上書きする(ステップS406)。次に、新たな分配先タプル装置通信アドレスリストに対し、前記と同様に、書込み可能フラグが1(=ON)のものの1つにタプル書込み要求を送信する(ステップS407、S408)。
他方、タプル分配表キャッシュ605を参照し、当該タプルの分散キーが該当する行が存在しない場合には(ステップS403で「NO」の場合には)、タプル分配装置301に分配先問合せを行い(ステップS404)、当該分散キーを含む分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻とを取得し(ステップS405)、タプル分配表キャッシュ605に、取得した分散キー範囲と、分配先タプル装置通信アドレスと書込み可能フラグのリストと、その更新時刻を含む行を追加する(ステップS406)。次に、当該リストにおいて、前記と同様に、書込み可能フラグが1(=ON)の分配先タプル装置通信アドレスの1つにタプル書込み要求を送信する(ステップS407、S408)。
上述したように、本発明の実施形態では、書込み用タプルあるいは読み出し用タプルの一方を、タプル(すなわちデータ)の蓄積・検索(すなわち間接通信)処理を行う複数のタプル装置201の全てに対して登録し、他方を、複数のタプル装置201の1つにのみ登録するようにした。これにより、分散キーによらず、分散処理が行われるため、同一の分散キーをもつ書込み用タプルと読み出し用タプル間のマッチング処理や蓄積処理でも、複数のタプル装置201間で分散処理することが可能となる。
また、属性と属性値の組み合わせを1又は複数含むタプルの蓄積・検索を行う複数のタプル装置201と、タプル装置201に対してタプルの書込み要求を行う1又は複数の端末401〜601とを備え、タプル装置201でタプルのうちの読み出し用タプルと書込み用タプルがマッチングした場合、当該読み出し用タプルの書込み元に当該書込み用タプルが送信されるシステムにおいて、タプルが、通信内容を示す属性値からなるメッセージボディ部11bと検索対象の属性値からなる検索対象部11aとから構成されるイベント書込み用タプル11と、イベント書込み用タプルに対する検索条件の属性値からなる検索条件部12cから構成されるイベント読み出し用タプル12と、検索対象の属性値からなる検索対象部22aから構成されるコマンド読み出し用タプル22と、通信内容を示す属性値からなるメッセージボディ部21bとコマンド読み出し用タプルに対する検索条件の属性値からなる検索条件部21cとから構成されるコマンド書込み用タプル21とに分類されるものであり、端末501、601からのタプルの書込み要求に応じて、イベント書込み用タプル11をタプル装置201のいずれか1つのみに登録し、イベント読み出し用タプル12をタプル装置201の全てに登録し、コマンド読み出し用タプル22をタプル装置201のいずれか1つのみに登録し、コマンド書込み用タプル21をタプル装置201の全てに登録するようにしている。すなわち、書込み用タプルあるいは読み出し用タプルの一方を、タプル(すなわちデータ)の蓄積・検索(すなわち間接通信)処理を行う複数のタプル装置201の全てに対して登録し、他方を、複数のタプル装置201の1つにのみ登録するようにした。これにより、分散キーによらず、分散処理が行われるため、同一の分散キーをもつ書込み用タプルと読み出し用タプル間のマッチング処理や蓄積処理でも、複数のタプル装置201間で分散処理することが可能となる。
特に本実施形態では、書込み用タプルと読み出し用タプルのうち単位時間あたりの登録量、蓄積量が大きい方を、タプル装置201の1つのみに登録することにより、分散処理のオーバーヘッドを抑えることが可能である。
また本実施形態によれば、検索対象部とメッセージボディ部からなる書込み用タプルをタプル装置201の1つのみに、検索条件部のみからなる読み出し用タプルをタプル装置201の全てに登録することとした。ユビキタス環境において、センサデータをメッセージボディ部に、そのメタデータを検索対象部に保持させた書込み用タプルと、読み出したいセンサデータの条件を検索条件部に保持させた読み出し用タプルを用いれば、Tuple Spaceによるセンサデータの蓄積・検索を行うことが可能であるが、このとき通常前者のタプル(すなわちメッセージボディ部とそのメタデータを検索対象部に保持させた書込み用タプル)の数に比べて後者のタプル(検索条件部のみからなる読み出し用タプル)の数ははるかに少ない。したがって、本実施形態の構成により、前者の少ないタプルのみを全タプル装置に登録すればよいため、効率的な分散処理が可能となる。
また本実施形態によれば、検索対象部のみからなる読み出し用タプルをタプル装置の1つのみに、検索条件部とメッセージボディ部からなる書込み用タプルをタプル装置の全てに登録することとした。ユビキタス環境において、アクチュエータのメタデータを検索対象部に保持させた読み出し用タプルと、アクチュエータの動作指示を行うコマンドデータをメッセージボディ部に、動作指示を行いたいアクチュエータの条件を検索条件部に保持させた書込み用タプルを用いれば、Tuple Spaceによるコマンドデータの蓄積・配布を行うことが可能であるが、このとき通常前者のタプル(アクチュエータのメタデータを検索対象部に保持させた読み出し用タプル)の数に比べて後者のタプル(動作指示を行いたいアクチュエータの条件を検索条件部に保持させた書込み用タプル)の数ははるかに少なく、本発明により、前者の少ないタプルのみを全タプル装置に登録すればよいため、効率的な分散処理が可能となる。
また本実施形態によれば、タプル分配装置301を設け、タプル分配装置301がタプル装置201のタプル分配表304において分配先タプル装置通信アドレスのリストを一元管理し、Tuple Spaceにタプルを書き込む各端末401、501又は601が、当該タプル装置のリストを参照し、登録先のタプル装置201を選択するようにした。これにより、タプル装置201をタプル分配装置301の設定情報を変更することでシステムに追加することができるようになり、流通・蓄積するタプルの量が増大した場合に、各端末の設定情報を変える必要なく、タプル装置201を増設することが可能となる。
また本実施形態によれば、タプル分配装置301が各タプル装置201の記憶負荷を監視し、記憶負荷が過剰となったタプル装置201を検出した場合には、分配先タプル装置通信アドレス:書込み可能フラグのリストの中の当該タプル装置201に書込み可能フラグOFFを設定するようにした。また各端末401、501又は601は、それ以降タプルを1つのタプル装置201に書き込む際には、書込み可能フラグOFFでないタプル装置201から書込み先を1つ選択し、タプルをすべてのタプル装置201に書き込む際には、書込み可能フラグOFFのタプル装置には「書込みフラグOFF」として書込み要求を行うこととした。またタプル装置201は、「書込みフラグOFF」でタプル書込み要求を受けた場合には、マッチング処理のみは行うが、当該タプルの蓄積は行わないという処理手順とした。これにより、漏れ・重複のないタプル蓄積・検索を維持しつつ、記憶負荷が過剰となったタプル装置に対して、それ以上タプルの蓄積をしないでよいこととなり、記憶負荷がそれ以上増え、タプル蓄積失敗によるタプルの喪失を防ぐことが可能となる。
また本実施形態によれば、タプル分配装置301は、タプルから抽出される分散キーの値を範囲分けし、各分散キー範囲を受け持つタプル装置201のリストを記載したタプル分配表を保持し、端末401〜601は、当該タプル分配表を参照し、タプルの分散キーに応じて、それを含む分散キー範囲を受け持つタプル装置リストに設定されているタプル装置201に対してのみ当該タプルを書き込めばよいこととした。また記憶負荷が過剰となり、書込み可能フラグがOFFになったタプル装置201が現れた場合には、当該タプル装置201が受け持っていた分散キー範囲を受け持つタプル装置リストに、記憶負荷が小さい他のタプル装置201を加えることとした。これにより、タプル書込みを全てのタプル装置201に行う必要がなくなり、また記憶負荷が過剰となったタプル装置201が出現しても、当該タプル装置201が受け持っていた分散キー範囲内の分散キーをもつタプルの蓄積が不可能とならず、別のタプル装置201に蓄積することが可能となる。
また本実施形態によれば、タプル分配装置301は、各タプル装置201の処理負荷を監視し、処理負荷が過剰となったタプル装置201を検出した場合には、当該タプル装置201が受け持っていた分散キー範囲を受け持つタプル装置201を含むタプル装置リストに、処理負荷が小さい他のタプル装置201を加えることとした。これにより、処理負荷が過剰となったタプル装置201が出現しても、当該タプル装置201が受け持っていた分散キー範囲内の分散キーをもつタプルの蓄積・検索が処理量溢れのため不可能とならず、別のタプル装置201にて蓄積・検索することが可能となる。
なお、特許請求の範囲に記載した構成要素と上述した本発明の実施の形態における構成との対応関係は次のとおりである。タプル装置の「書込み用タプルを蓄積する書込み用タプル表」は、図6のイベント書込み用タプル表209、コマンド書込み用タプル表211に対応している。タプル装置の「読み出し用タプルを蓄積する読み出し用タプル表」は、図6のイベント読み出し用タプル表210、コマンド読み出し用タプル表212に対応している。タプル装置の「書込み用タプル書込み処理部」は、図6のイベント書込み用タプル書込み処理部203、コマンド書込み用タプル書込み処理部205に対応している。タプル装置の「読み出し用タプル書込み処理部」は、図6のイベント読み出し用タプル書込み処理部204、コマンド読み出し用タプル書込み処理部206に対応している。端末の「タプル装置分配表」は、図18のタプル分配表キャッシュ505、図18のタプル分配表キャッシュ505、図19のタプル分配表キャッシュ605に対応している。端末の「タプル書込み要求部」は、図15のタプル書込み処理部404、図18のタプル書込み処理部504、図19のタプル書込み処理部604に対応している。タプル書込み要求を示す「メッセージ種別情報」は、図31の「メッセージ種別」に対応している。タプルの種別を表す「タプル種別情報」は、図31の「タプル種別」に対応している。「タプル装置アドレス」は、タプル装置の通信アドレスに対応している。タプル分配装置の「タプル装置アドレスのリストを含むタプル装置分配表」は、図12のタプル分配表304に対応している。タプル分配装置の「通信アドレスの管理するためのリストを含むタプル分配表」は、図12のタプル分配表304に対応している。
なお、本発明の実施の形態は、上記のものに限られず、例えば、各装置や各端末が有するタプル分配表304、タプル分配表キャッシュ405、505、605などの各表に格納・管理されるデータを、ネットワーク101などを介して接続される1又は複数の他の装置で記憶・更新するようにしたり、分散キーの算出手法や分散キーを用いたタプルの分配手法などに他の手法を用いるようにしたり、するなどの変更を適宜行うことができる。また、上記実施形態の各装置や各端末は、コンピュータ及びその周辺装置とそのコンピュータによって実行されるプログラムとを用いて構成することができ、そのプログラムはコンピュータ読み取り可能な記録媒体や通信回線を介して提供することが可能である。