図11は、システムの例を示す図である。工場などの装置や設備が配備される現場側で、データソース100となる観測の対象物から温度、湿度、回転数、振動数などを観測するセンサノード101が配備され、センサノード101が観測したデータに基づき、サービス300としてクラウドなど計算機環境で高度な分析処理などを実施するサービスノード301が、中継装置であるゲートウェイ3を介して接続される。
センサノード101は、対象物から観測データを取得するためのセンサ、観測結果を生データとしてゲートウェイ3に配信するための通信回路を具備する。1つのセンサノード101は、複数のセンサを含んでもよく、データソース100として複数のセンサノード101が有ってもよい。センサノード101とゲートウェイ3との間の通信は無線であってもよいし、有線であってもよい。センサノード101は、観測データを取得した時刻の情報をゲートウェイ3に配信してもよい。
ゲートウェイ3は、センサノード101から配信された生データを生データ1001として格納するための生データテーブル1000と、サービスノード301が扱うデータオブジェクトをデータオブジェクト2001として格納するためのデータオブジェクトテーブル2000を具備する。生データテーブル1000は、複数の生データ1001を時系列データとして保持してもよく、複数のセンサノード101のそれぞれ、あるいはセンサノード101に含まれる複数のセンサのそれぞれに分類されて保持してもよい。
そして、ゲートウェイ3は、生データテーブル1000およびデータオブジェクトテーブル2000を管理するための処理基盤30を具備する。この処理基盤30は、生データテーブル1000に格納される生データ1001を参照して、データオブジェクトを構成するデータオブジェクトの構成処理34、データオブジェクトの構成処理34により構成されたデータオブジェクトをデータオブジェクトテーブル2000内に格納するために必要なデータ形式の変換を行うデータ形式の変換処理35、およびデータオブジェクトテーブル2000に格納されているデータオブジェクト2001にサービスノード301が扱うとき必要に応じて実施するデータ形式の変換処理36を実行するためのものである。
データオブジェクトの構成処理34では、各データオブジェクトを構成するために参照すべき生データ1001を記したデータオブジェクト構成情報31が参照される。データ形式の変換処理35では、データオブジェクトの構成処理34により構成されたデータオブジェクトをデータオブジェクトテーブル2000内に格納するためのデータ形式を記したデータオブジェクト初期形式情報32、および必要に応じてデータオブジェクトのデータ形式を変換するためのデータ形式変換ルール33が参照される。
また、データ形式の変換処理36では、データオブジェクトテーブル2000に格納されているデータオブジェクト2001をサービスノード301が扱うとき必要に応じて実施されるデータ形式の変換のためのデータ形式変換ルール33が参照される。
なお、生データ1001は観測データをデジタル化するなどしたデータ(ビット列)であってもよく、データオブジェクトの構成処理34により構成されたデータオブジェクト2001はJSON(JavaScript Object Notation:JavaScriptは登録商標)あるいはXML(Extensible Markup Language)などのデータ形式であってもよく、データオブジェクトテーブル2000はCSV(Comma−Separated Values)などのテーブル形式であってもよい。
また、サービスノード301は、計算機であってもよく、複数の計算機であって複数の計算機が連携するものであってもよく、クラウドなどのあってもよい。サービスノード301の処理結果は、サービスの対象となるユーザに表示などされてもよい。サービスノード301の処理内容は、温度などのセンサの観測データに基づく、観測の対象物(センサが取り付けられた装置)の故障の予兆診断などであってもよい。
センサノード101は、周期的に観測する、あるいは予め定められた期間に非周期的に複数回観測し、多量の観測データを得る。得られた多量の観測データは、生データとして周期的にゲートウェイ3に配信され、ゲートウェイ3によりデータオブジェクト2001としてデータオブジェクトテーブル2000に格納される。このため、センサノード101からデータオブジェクトテーブル2000までは、データが周期的に更新され、その更新頻度は高く、処理されるデータ量は多い。
これに対して、サービスノード301は、サービスノード301の処理の内容に応じてデータオブジェクトテーブル2000へアクセスしてデータオブジェクト2001を取得する(ゲートウェイ3としては出力する)ため、センサノード101からデータオブジェクトテーブル2000までの処理されるデータ量と比較して、処理されるデータ量が少ない。
なお、センサノード101がゲートウェイ3へ生データを周期的に送信しても、センサノード101とゲートウェイ2との間の通信状況などにより、送信された生データをゲートウェイ3が受信できるとは限らない。このため、生データテーブル1000において、受信できなかった生データが欠落する(未受信となる)場合もある。
ここで、ゲートウェイ3が受信できない場合には、生データは周期的に送信されるものであるから、次の周期よりも遅れて受信される場合なども含まれる。また、センサノード101が周期的あるいは予め設定された時刻に観測できない場合も、生データテーブル1000において生データが欠落する。
図11に示したシステムは、例えば、工場などの現場設備にセンサを取り付け、クラウドなど計算機環境で高度な分析処理などを実施してサービスを提供するIoT(Internet of Things)環境で使用される。
このような環境において、現場(データソース100)とサービス(サービス300)を中継する中継装置(ゲートウェイ3)では、収容するセンサ数の拡大や、観測するためのセンサが取り付けられた設備の状態などの付加情報を、センサーデータに付与するなどの優位化技術の適用が重要になり、中継装置の処理基盤で優位化技術の適用を促進すると処理負荷が高くなるため、処理基盤の負荷低減が重要である。
図1は、システムの構成の例を示す図である。基本的な構成は図11と同じであるため、同じものには同じ符号を付けて説明を省略するが、ゲートウェイ2の処理基盤30が、生データテーブル1000に格納される生データ1001の時系列な特徴量の変化を分析する監視処理37を具備する点が異なる。なお、ゲートウェイ2はデータを入力してデータを出力するものであって中継装置であってもよい。
監視処理37は、生データ1001の時系列な特徴量の変化を分析し、データオブジェクトの構成処理34とデータ形式の変換処理35の処理対象として必要となる生データ1001を選択し、データオブジェクトの構成処理34とデータ形式の変換処理35を実施させる。
これにより、図11の例ではセンサノード101からデータオブジェクトテーブル2000までの周期的な更新が、図1の例ではセンサノード101から生データテーブル1000までとなり、生データテーブル1000からデータオブジェクトテーブル2000までは、必要に応じて処理を実施することとなる。監視処理37について、以下でさらに説明する。
図2は、生データテーブル1000とデータオブジェクトテーブル2000の例を示す図である。生データテーブル1000は、格納されるデータの種別を示すデータ種別1100、格納される生データ1001の観測元を識別するためのデータソースID1200、センサノード101から配信された生データ1001を時系列に格納するための時系列データ1300から構成される。
ここで、生データテーブル1000には生データ1001が格納されるため、データ種別1100は「生データ」である。センサノード101のセンサは例えば3個であり、センサそれぞれのデータソースIDは「#1」と「#2」と「#3」である。生データテーブル1000は、データソースID1200として他のデータソースIDをさらに含んでもよいが、図示は省略する。
時系列データ1300は、各データソースIDを有するセンサに関してセンサノード101から配信された生データ1001を単位時間毎に格納するためのフィールド1301からフィールド1304により構成される。図2に示した生データテーブル1000では、各センサに対して過去10個分の生データ1001が格納される例を示している。
例えばフィールド1301は、時間を表す「n+0」と、データソースID1200が「#1」のセンサに基づく生データ1001の「xn+0」と、データソースID1200が「#2」のセンサに基づく生データ1001の「yn+0」と、データソースID1200が「#3」のセンサに基づく生データ1001の「zn+0」である。
単位時間は、例えば「n+3」から「n+2」を減算した時間である。そして、フィールド1303の「n+2」から単位時間後は、フィールド1304の「n+3」であり、フィールド1303の「n+2」から単位時間前は、「フィールド1302」の「n+1」である。
データオブジェクトテーブル2000は、格納されるデータの種別を示すデータ種別2100、個々のデータオブジェクト2001を識別するためのデータオブジェクトID2200、データオブジェクト2001を時系列に格納するための時系列データ2300から構成される。
ここで、データオブジェクトテーブル2000にはデータオブジェクト2001が格納されるため、データ種別2100は「データオブジェクト」である。データオブジェクト2001は例えば「x」と「y」と「z」の3種類の生データ1001から構成されるデータオブジェクトであり、そのデータオブジェクトに割り当てられるデータオブジェクトIDが「#10_A_Temp」である。
時系列データ2300は、各データオブジェクトIDのデータオブジェクトを単位時間毎に格納するためのものであり、生データテーブル1000の時系列データ1300に対応する。図2の例では、時系列データ1300の例えば「n+2」が時系列データ2300の「n+2」に対応する。
そして、図2の例では、生データテーブル1000に格納された生データ1001の過去3つを参照して評価し、それらから導出されるデータオブジェクトで時系列データ2300を更新するか否かを判定する。ここで、データオブジェクト2001の導出は、図11(図1)を用いて説明したデータオブジェクトの構成処理34によるものである。データ形式の変換処理35が含まれてもよい。
ただし、導出の処理内容そのものおよび導出されたデータオブジェクト2001の内容そのものと、以下で説明する本実施の形態とは関係しないため、説明を省略し、図2ではデータオブジェクト2001を「●」か「○」で表す。
更新するか否かの判定が、更新するという結果であった場合、生データテーブル1000の生データ1001を参照してデータオブジェクト2001を導出し、データオブジェクトテーブル2000に書き込む。また、更新しないという結果であった場合、生データ1001からの導出の処理をスキップし、その判定の時点より前に導出されたデータオブジェクト2001を参照してデータオブジェクトテーブル2000に書き込む。
例えば図2は、過去3つであるフィールド1301〜1303の範囲1311の生データを参照して時系列データ2300を更新するか否かを判定し、この判定が更新するという結果の場合であり、フィールド1303の生データを参照して導出されたデータオブジェクトを、更新2302としてデータオブジェクトテーブル2000へ書き込む。
次に、フィールド1302からの範囲1312の生データを参照して時系列データ2300を更新するか否かを判定し、この判定が更新しないという結果の場合であり、更新2302で書き込まれたデータオブジェクトを参照し、参照2303としてデータオブジェクトテーブル2000へ書き込む。範囲1313の生データは範囲1312の生データと同じく更新しないという結果の場合であり、参照2304としてデータオブジェクトテーブル2000へ書き込む。
さらに、範囲1314の生データを参照して時系列データ2300を更新するか否かを判定し、この判定が更新するという結果の場合であり、更新2302とは関わりなく新たに導出されたデータオブジェクトを、更新2305としてデータオブジェクトテーブル2000へ書き込む。
参照2303、2304としてデータオブジェクトテーブル2000へ書き込まれる情報は、更新2302で書き込まれたデータオブジェクトを参照するための情報であればよく、例えばポインタであってもよいし、シンボリックリンクであってもよい。また、参照する情報でなくてもよく、更新2302で書き込まれたデータオブジェクトの複製されたデータオブジェクトであってもよい。
図2に示した時系列データ2300の「n+0」と「n+1」のデータオブジェクト、例えばデータオブジェクト2301は、判定に利用できる過去3つの生データが存在しない。このため、データオブジェクト2301は、更新するか否かを判定されることなく、フィールド1301の生データを参照して導出されてもよい。また、他のフィールドの生データを参照して導出されてもよいし、予め設定された値とされてもよい。
図2の例では、更新するか否かを判定する際に参照する生データの数、すなわち範囲1311〜1314の期間は、過去3つとしたが、これに限定されるものではない。判定に適用される評価処理内容、あるいは評価処理の処理負荷とゲートウェイ2の予め設定された許容できる処理負荷との関係において、範囲1311〜1314の期間は変更されてもよい。また、図2の例では、時系列データ1300が生データで埋まっているが、既に説明したように、生データは欠落する場合もある。
図3は、監視処理37の例を示すフローチャートである。監視処理37は、図2を用いて説明したように、データオブジェクトテーブル2000に格納するデータオブジェクト2001を更新するか否かを判定するために、生データテーブル1000に格納されている生データ1001を評価する。
監視処理37は、処理を開始すると、設定範囲内のデータオブジェクトに対して、以下の処理の対象オブジェクトを順次選択し、以下の処理を繰り返す(S101)。設定範囲は予め設定され、図2の例では「n+0」から「n+9」である。また、図2ではデータオブジェクトID2200が「#10_A_Temp」の例を説明したが、データオブジェクトID2200の他のIDも設定範囲に含まれてもよい。
なお、監視処理37の処理の開始は、予め設定された周期での開始であってもよいし、例えば1秒間隔の開始であってもよい。また、ゲートウェイ2が生データ1001をセンサノード101から受信するタイミングなどであってもよい。さらに、ゲートウェイ2の処理の負荷状況に応じて周期を動的に変更してもよく、負荷が大きい場合は周期を長くしてもよい。
監視処理37は、S101で選択された対象オブジェクトの更新要否を示す更新フラグ(カウンタ)をクリアし(値を0に設定し)、更新不要の状態に設定する(S102)。そして、対象オブジェクトのための評価で参照される生データ1001を対象データとして、データソースID1200のID毎に順次選択し、以下の処理を繰り返す(S103)。
例えば、図2に示した更新2302のデータオブジェクトのための評価では、範囲1311に含まれる生データが参照される。このため、第1回目の選択では、データソースID1200が「#1」の「xn+0」と「xn+1」と「xn+2」が選択され、第2回目の選択では、データソースID1200が「#2」の「yn+0」と「yn+1」と「yn+2」が選択されるというように、順次選択される。
このように図2の例では、過去3つの生データを参照するが、図3についての以下の説明では、説明を簡単にするために、過去2つの生データを参照するとする。これは、例えば図2に示した時系列データ2300の「n+2」のデータオブジェクトに対して、時系列データ1300の「n+1」と「n+2」の生データを参照することであってもよいし、S104の実行時点に最も近く受信した生データと1単位時間過去の生データを参照することであってもよい。以下では、これらを「t_n」と「t_n−1」で表す。
監視処理37は、評価対象となる対象データが存在するか、対象データの有無を判定する(S104)。評価に十分な対象データが存在すると判定した場合はS106へ進み、評価に十分な対象データが存在しないと判定した場合はS105へ進む。ここで、評価に十分な対象データが存在しないという判定結果は、評価対象となる対象データの1つでも存在しないという判定結果であり、「t_n」と「t_n−1」の片方または両方が存在しないという判定結果である。
なお、既に説明したように、センサノード101がゲートウェイ2へ生データを周期的に送信しても、送信された生データをゲートウェイ2が受信できるとは限らない。ゲートウェイ2が受信できなかった生データは生データテーブル1000に格納されることはなく欠落するため、それに対応する(その時刻に格納されるべきであった)対象データは無いということになる。
S104にて存在しないと判定した場合、監視処理37は、存在しない対象データの代替となる生データを、代替の対象データとして、データソースID1200が対象データと同じIDの生データから選択する(S105)。これにより、評価に必要な対象データを準備する。S105の処理については図4を用いて後でさらに説明する。
対象オブジェクトの更新の要否を判定するため、S103またはS105で選択された対象データを用いて、時系列の特徴量を評価し、評価で得られた特徴量と予め設定された閾値とを比較する(S106)。
この特徴量は例えば変動係数(Coefficient Variation)であり、
変動係数 = σ/μ×100 [%]
※σは評価対象の生データの標準偏差、μは評価対象の生データの平均値
で求められる。
また、生データの現在値f(t_n)と前回値f(t_n-1)の変化率を百分率で表し、特徴量は例えば変化率δであり、
δ = (f(t_n) − f(t_n-1)) / f(t_n-1)
= f(t_n) / f(t_n-1) − 1
で求められる。
変動係数は、標準偏差σをそれぞれの平均値μで除算することにより、評価対象の生データの集合の絶対値の大きさを判定に反映させることが可能になる。変化率δは、評価対象の生データが局所的であり、算出も簡単な演算であるので、処理基盤30に対して低い処理負荷でかつ高速な実行が可能になる。これらの特徴量は、生データ1001が、センサの時系列な観測データであるから算出できる。
特徴量と予め設定された閾値とを比較した結果、特徴量が閾値未満であると判定した場合はS107をスキップし、特徴量が閾値以上であると判定した場合はS107へ進む。そして、監視処理37は、対象オブジェクトの更新フラグをインクリメントする(S107)。これにより、更新フラグは、S103の繰り返し処理の後、対象オブジェクトのための評価において、データソースID1200の何個のIDに対する判定で閾値以上であったかが判定可能な記録となる。
S103による対象オブジェクトの評価のための対象データに対する繰り返し処理の後、監視処理37は、更新フラグが0であるか否かを判定し(S108)、更新フラグが1以上であると判定した場合、対象オブジェクトは更新要であることを示すために、対象オブジェクトに対応する対象オブジェクト別更新フラグをセットする(S109)。
また、監視処理37は、更新フラグが0であると判定した場合、対象オブジェクトは更新不要であることを示すために、対象オブジェクトに対応する対象オブジェクト別更新フラグをクリアする(S110)。なお、対象オブジェクト別更新フラグは、更新フラグ(カウンタ)とは別のフラグであり、設定範囲内のデータオブジェクトそれぞれに割り当てられたフラグである。
S101による設定範囲内のデータオブジェクトに対する繰り返し処理の後、オブジェクト別更新フラグがセットされたデータオブジェクトを、図1に示すデータオブジェクトの構成処理34に通知する(S111)。データオブジェクトの構成処理34は、各データオブジェクトのオブジェクト別更新フラグの値にしたがって(通知にしたがって)、更新または参照のための処理を実行する。
図4は、代替の対象データを選択する処理の例を示すフローチャートであり、図3に示したS105の処理に相当する。このため、監視処理37はS105を実行すると、図4に示したフローチャートの処理が開始される。なお、この例は、既に説明したとおり、片方または両方が存在しないと判定された「t_n」と「t_n−1」の代替となる2つの対象データを生データ1001から選択する処理である。
監視処理37は、「t_n」の時刻に時刻が最も近い1つ目の仮対象データの選択有無を示す仮t_nフラグに、選択されていないことを示す0を設定し(S201)、「t_n」の時刻に時刻が次に近い2つ目の仮対象データの選択有無を示す仮t_n−1フラグに、選択されていないことを示す0を設定する(S202)。
監視処理37は、「t_n」の時刻(現在時刻とする)から過去へ向けて1単位時間ずつ遡り、時刻を順次選択して、選択された時刻におけるデータソースID1200が「t_n」のIDと同じIDの時系列データ1300の情報を取得し、以下の繰り返し処理を行う(S203)。まず、取得された情報が生データであれば仮対象データであるとみなして、仮対象データが存在するか否かを判定する(S204)。
既に説明したとおり、センサノード101とゲートウェイ2との間の通信状況などにより、センサノード101から送信された生データをゲートウェイ2が受信できるとは限らない。そのため、生データテーブル1000の時系列データ1300には、部分的に生データが格納されていない場合もある。そこで、S203の繰り返し処理により、「t_n」と(同じデータソースの)同じ時系列データ1300の中で最初に存在する生データを見つけるために、時系列データを探索する。
監視処理37は、仮対象データが存在すると判定した場合、すなわち選択された時刻の取得された情報が生データであると判定した場合、仮t_nフラグが0であるか否かを判定する(S205)。仮t_nフラグが0であると判定した場合、仮t_n(変数)に仮想データを格納し(S206)、仮t_nフラグに1を設定する(S207)。これにより、1つ目の仮対象データを確定する。
監視処理37は、S205にて仮t_nフラグが0でないと判定した場合、既に1つ目の仮対象データは確定しているため、仮t_n−1フラグが0であるか否かを判定する(S208)。仮t_n−1フラグが0であると判定した場合、仮t_n−1(変数)に仮想データを格納し(S209)、仮t_n−1フラグに1を設定する(S210)。これにより、2つ目の仮対象データを確定する。
監視処理37は、S204にて仮対象データが存在しないと判定した場合、S203による処理の繰り返しに戻り、次の時刻を選択して、選択された時刻における時系列データ1300の情報を取得する。また、S208にて仮t_n−1フラグが0でないと判定した場合も、S203による処理の繰り返しに戻るが、1つ目の仮対象データと2つ目の仮対象データが既に確定しているため、実質的にはS211へ進むこととなる。
監視処理37は、S203による処理の繰り返しが終了すると、仮対象データが存在するのであれば仮対象データを取得できたので、仮t_n(変数)のデータを「t_n」に設定し、仮t_n−1(変数)のデータを「t_n−1」に設定して(S211)、処理を終了し、図3に示したS105へ戻ってS106へ進む。
なお、S211において、仮t_nフラグと仮t_n−1フラグが両方とも1であると判定した場合に「t_n」と「t_n−1」に設定してもよく、いずれかが1であると判定した場合は1であるとした方の値を「t_n」と「t_n−1」に設定してもよく、いずれかが1または両方とも0と判定した場合は予め設定された値を「t_n」と「t_n−1」に設定してもよい。
図5は、オブジェクト更新条件テーブル3000の例を示す図である。図5に示したオブジェクト更新条件テーブル3000−1は、図3を用いて説明したS106において特徴量と比較される閾値が格納されており、監視処理37がS106を実行するときに参照される。
オブジェクト更新条件テーブル3000−1は、データオブジェクトテーブル2000のデータオブジェクトID2200のIDに対応するデータオブジェクトのIDであって、更新要否が判断される対象のデータオブジェクトを識別するためのデータオブジェクトID3100−1、生データテーブル1000のデータソースID1200のIDに対応するデータソースのIDであって、更新要否が判定される対象のデータオブジェクトを構成する生データのデータソースを識別するためのデータソースID3200−1、条件フィールド3300−1から構成される。
条件フィールド3300−1は、オブジェクト更新の条件として、例えば特徴量(変化率δ)の閾値が、データオブジェクトID3100−1のデータソースID3200−1毎に格納される。条件フィールド3300−1は、変動係数の閾値が格納されてもよい。図5の例では説明のために「10%以上」と表現しているが、格納される情報は数値であってもよいし、条件を表す何らかの識別子であってもよい。オブジェクト更新条件テーブル3000−1に格納される情報は、特徴量の評価の処理内容などに応じて予め設定される。
本実施例では、生データテーブル1000はデータソース100のセンサノード101から配信される生データを格納するが、センサノード101とゲートウェイ2との間の通信状況などにより、ゲートウェイ2ではデータソース100のそれぞれのデータソースから単位時間毎に生データが必ず受信できるとは限らない。
そこで、図6に、データオブジェクトの更新要否を判断するときに、判断されるデータオブジェクトを構成する生データのデータソースの信頼度を加味して評価するためのデータソース信頼度テーブル4000の例を示す。
データソース信頼度テーブル4000は、センサノード101から配信される生データのデータソースを識別するためのデータソースID4100を有する。そして、データソースID4100で識別される各データソースに対して、時系列な生データの受信状況すなわち受信か欠落(未受信)かを示す受信状況4200、受信生データ数に対する未受信数の割合を示す未受信率4300、最大の連続未受信数を示す連続未受信数4400、および、受信状況4200の情報から算出した信頼度を示す信頼度4500から構成される。
ここで、未受信率4300の割合の基となる受信生データ数と、連続未受信数4400の最大を見つける対象の受信生データの数は、データソース信頼度テーブル4000の受信状況4200の時系列の数であり、図6に示した例では過去10配信分の生データ1001に対応するフィールド「tn−0」〜「tn−9」であるので、10個である。
ただし、時系列の数は10個に限定されるものではない。受信状況4200の時系列の情報は、ゲートウェイ3のメモリに予め割り当てられた領域をリング状に利用して格納されてもよい。この場合、リングが一周すると、受信状況4200の時系列の数は、予め割り当てられた領域を上限とする数となる。
なお、図2に示した例では、時系列データ1300は生データ1001で埋まっているが、受信状況4200が受信を示す時刻は生データ1001が格納されるのに対し、受信状況4200が欠落を示す時刻は生データ1001が受信されず格納されない。
データソース信頼度テーブル4000の信頼度4500および未受信率4300は、データソースID4100で識別されるデータソース毎に、受信状況4200の情報から次のように算出される。
信頼度[%] = (β − α)/β × 100
未受信率[%] = γ/β × 100
※α = (該当期間内の最大の連続未受信数)
※β = (該当期間内に期待される生データの受信総数)
※γ = (該当期間内の総未受信数)
これらの該当期間は、先に説明した受信状況4200の時系列の期間(数)である。
図7は、信頼度を利用する監視処理37の例を示すフローチャートである。データオブジェクトテーブル2000に格納する各データオブジェクト2001を更新するか否かを判定するために、生データテーブル1000に格納されている生データ1001の特徴量の時系列の分析に加えて、データソースの信頼度でも判定する。
図7に示したS301、S303〜S306、S309〜S310、S312〜S315は、図3を用いて説明したS101〜S111とそれぞれ同じ処理であるので、説明を省略し、必要なことの説明に絞る。監視処理37は、処理を開始すると、設定範囲内のデータオブジェクトに対して、以下の処理の対象オブジェクトを順次選択し、S301以下の処理を繰り返す(S301)。
監視処理37は、S301で選択された対象オブジェクトの元となるデータソースの信頼度を示す低信頼フラグをクリアし(値を0に設定し)、信頼できる状態に設定する(S302)。
監視処理37は、S305にて対象データが存在すると判定する、あるいはS306にて代替の対象データを選択することにより、対象データを準備すると、対象データの信頼度(対象データの元となるデータソースの信頼度)を、図6に示したデータソース信頼度テーブル4000を参照して、対象データの元となるデータソースのIDをデータソースID4100から特定し、特定されたデータソースのIDに対応する信頼度4500の値と、予め設定された閾値とを比較する(S307)。
S307において、信頼度4500の値が閾値以上であると判定した場合はS308をスキップし、信頼度4500の値が閾値未満であると判定した場合はS308へ進む。そして、監視処理37は、対象オブジェクトの低信頼フラグをインクリメントする(S308)。これにより、低信頼フラグは、S304の繰り返し処理の後、対象オブジェクトのための評価において、データソースID1200の何個のIDに対して判定で閾値未満であったかが判定可能な記録となる。
監視処理37は、S309とS310にて更新フラグの処理を実行し、S304による対象オブジェクトの評価のための対象データに対する繰り返し処理の後、低信頼フラグが0であるか否かを判定する(S311)。これにより、対象オブジェクトの元となるデータソースのうち信頼度の低いものが何個であったかを評価する。
S311において、低信頼フラグが0であると判定した場合はS312へ進み、更新フラグを判定し(S312)、更新フラグの判定結果にしたがって対象オブジェクト別更新フラグを処理する。低信頼フラグが0でないと判定した場合は、対象オブジェクトを更新するには信頼度の高い生データが揃っていないので、更新フラグ(カウンタ)とは関わりなく、対象オブジェクト別更新フラグをクリアする(S314)。
監視処理37は、S301による設定範囲内のデータオブジェクトに対する繰り返し処理の後、オブジェクト別更新フラグがセットされたデータオブジェクトを、図1に示すデータオブジェクトの構成処理34に通知する(S315)。データオブジェクトの構成処理34は、各データオブジェクトのオブジェクト別更新フラグの値にしたがって(通知にしたがって)、更新または参照のための処理を実行する。
図8は、信頼度を含むオブジェクト更新条件テーブル3000の例を示す図である。図8に示したオブジェクト更新条件テーブル3000−2は、図7を用いて説明したS307およびS309において信頼度および特徴量と比較される閾値が格納されており、監視処理37がS307およびS309を実行するときに参照される。
オブジェクト更新条件テーブル3000−2のデータオブジェクトID3100−2、データソースID3200−2、条件フィールド3300−2は、オブジェクト更新条件テーブル3000−1のデータオブジェクトID3100−1、データソースID3200−1、条件フィールド3300−1のそれぞれとフィールドは同じであるが、条件フィールド3300−2がさらに複数のフィールドを含む。
すなわち、条件フィールド3300−2は、時系列な特徴量の変化を分析するための変化率δに対する閾値が格納される条件フィールドと、データソースの信頼度に対する閾値が格納される条件フィールドを含む。図8では、変化率δの閾値の例を示したが、変動係数の閾値が格納されてもよい。
また、図8の例では説明のために「10%以上」と表現しているが、格納される情報は数値であってもよいし、条件を表す何らかの識別子であってもよい。オブジェクト更新条件テーブル3000−2に格納される情報は、特徴量の評価の処理内容および信頼度の処理内容などに応じて予め設定される。
図9は、ゲートウェイ2の構成の例を示す図である。ゲートウェイ2は、演算処理を行うCPU21と、プログラムやデータを格納するメモリ22と、CPU21に接続されたI/Oインターフェース23と、I/Oインターフェース23に接続されてデータを永続的に保持できる不揮発性のストレージ26と、I/Oインターフェース23に接続されてセンタ側ネットワークとの間で通信を行うセンタ側通信装置25と、I/Oインターフェース23に接続されて現場側ネットワークとの間で通信を行う現場側通信装置24から構成される。
I/Oインターフェース23は、例えばPCI−Express(登録商標)のインターフェースであり、CPU21とストレージ26などのI/Oデバイスと間の通信を行う。ゲートウェイ2としての基本的な動作のために、メモリ22には、OS290と通信制御プログラム200がロードされてCPU21によって実行される。通信制御プログラム200が実行されると、メモリ22に格納された経路テーブル210などが利用される。
OS290を実行するCPU21の処理として、ゲートウェイ2の負荷状況を取得するために、CPU21の利用率、メモリ22の利用率、メモリ22のアクセス頻度、あるいは以下で説明するプログラムそれぞれの単位時間当たりのトランザクション数を計測する処理が含まれてもよい。
さらに、メモリ22には、時系列生データ監視プログラム400、データ形式変換プログラム410、データオブジェクト構成プログラム420が、それぞれロードされてCPU21によって実行される。時系列生データ監視プログラム400を実行するCPU21は監視処理37となり、同じくメモリ22上に格納される生データテーブル1000およびデータオブジェクトテーブル2000をプログラムの内容にしたがって参照する。
また、時系列生データ監視プログラム400を実行するCPU21は、監視処理37として既に説明したとおり、オブジェクト更新条件テーブル3000およびデータソース信頼度テーブル4000をプログラムの内容にしたがって参照する。なお、監視処理37は物理的な構造をCPU21とメモリ22とする監視部でもある。
データ形式変換プログラム410を実行するCPU21はデータ形式の変換処理35あるいはデータ形式の変換処理36となり、データオブジェクト初期形式情報32およびデータ形式変換ルール33を参照し、データオブジェクトテーブル2000を参照あるいは更新する。
データオブジェクト構成プログラム420を実行するCPU21は、データオブジェクトの構成処理34となり、データオブジェクト構成情報31を参照し、監視処理37からデータオブジェクト別更新フラグを受け取り、生データテーブル1000を参照して、データオブジェクトテーブル2000を参照あるいは更新する。なお、データオブジェクトの構成処理34は物理的な構造をCPU21とメモリ22とする構成部でもある。構成部はデータ形式の変換処理35を含んでもよい。
図1に示した処理基盤30は、CPU21とメモリ22であり、メモリ22に格納されたプログラムをCPU21が実行してメモリ22に格納されたデータを処理する基盤である。データオブジェクト構成情報31と、データオブジェクト初期形式情報32と、データ形式変換ルール33は、処理基盤30に含まれてもよいし、含まれなくてもよい。
ゲートウェイ2がデータソース100から受け取る生データ1001は、センサノード101が観測したデータであるので、多量のデータの発生する場合がある。このため、生データテーブル1000とデータオブジェクトテーブル2000はストレージ26に格納されてもよい。ただし、一般的にストレージ26はメモリ22に比べてアクセス速度が低いため、生データテーブル1000とデータオブジェクトテーブル2000の中のアクセス頻度の高い部分を(局所的に)メモリ22に格納するようにしてもよい。ここで、特徴量の評価ではメモリ22上の生データテーブル1000を参照し、更新ではストレージ26上のデータオブジェクトテーブル2000へデータオブジェクト2001を格納するようにしてもよい。
図10は、ゲートウェイを多段に接続した構成の例を示す図である。ゲートウェイ2は既に説明したとおりであるが、図10ではデータオブジェクトの構成処理34などの図示を省略している。図1に示したようにゲートウェイ2が1段であれば、データオブジェクトテーブル2000のデータオブジェクト2001はオンデマンドアクセスによりサービス300のサービスノード301に取得される。
これに対して多段(2段)の接続では、ゲートウェイ2にゲートウェイ4が接続され、ゲートウェイ2のデータオブジェクト2001は、ゲートウェイ4へ送信され、データオブジェクト2501としてデータオブジェクトテーブル2500に格納される。ゲートウェイ4は、ゲートウェイ2のように、図示を省略した構成処理や変換処理をデータオブジェクト2501に対して適用し、適用した結果をデータオブジェクト2601としてデータオブジェクトテーブル2600に格納する。
既に説明したようにゲートウェイ2は、生データ1001からデータオブジェクト2001を必要に応じて生成する。生成されたデータオブジェクト2001は、ゲートウェイ4の監視処理38により必要に応じて取得されてデータオブジェクトテーブル2500に格納され、監視処理38の制御の下で必要に応じて処理されてデータオブジェクトテーブル2600に格納されてもよい。データオブジェクトテーブル2600に格納されたデータオブジェクト2601は、図1に示したデータオブジェクト2001と同じようにオンデマンドアクセスでサービス300のサービスノード301に取得される。
また、生成されたデータオブジェクト2001は、ゲートウェイ2によりゲートウェイ4へ周期的あるいは非周期的に(例えばデータオブジェクトテーブル2000に格納されたことを契機として)送信されて、データオブジェクトテーブル2500に格納されてもよい。データオブジェクトテーブル2500に格納されたデータオブジェクト2501は、監視処理38の制御の下で必要に応じて処理されてデータオブジェクトテーブル2600に格納されてもよい。
また、ゲートウェイ2によりゲートウェイ4へ周期的あるいは非周期的に送信されて、データオブジェクトテーブル2500に格納されたデータオブジェクト2501は、周期的あるいは非周期的に(例えばデータオブジェクトテーブル2500に格納されたことを契機として)処理されてデータオブジェクトテーブル2600に格納されてもよい。このような処理では、監視処理38が無くてもよい。
また、生成されたデータオブジェクト2001は、ゲートウェイ2によりゲートウェイ4へ周期的に送信されてデータオブジェクトテーブル2500に格納され、データオブジェクトテーブル2500に格納されるデータオブジェクト2501は時系列なデータとなるので、既に説明した生データテーブル1000に対する監視処理37と同じ処理を監視処理38がデータオブジェクトテーブル2500に対して実行してもよい。
図10にはゲートウェイ2とゲートウェイ4の2段の接続の例を示したが、2段に限定されるものではなく、ゲートウェイ4とサービス300との間にさらにゲートウェイが接続されてもよい。ゲートウェイ4に相当する複数のゲートウェイがゲートウェイ2に接続され、複数のゲートウェイがゲートウェイ2からデータオブジェクト2001を取得する、あるいはゲートウェイ2が複数のゲートウェイへデータオブジェクト2001を送信してもよく、このような複数のゲートウェイのそれぞれが多段に接続されてもよい。
図10には複数のセンサノード101にゲートウェイ2が接続される例を示したが、ゲートウェイ2に相当する複数のゲートウェイが複数のセンサノード101に接続されてもよく、ゲートウェイ2に相当する複数のゲートウェイがゲートウェイ4に接続されてもよい。そして、ゲートウェイ4が複数のゲートウェイからデータオブジェクトを取得する、あるいは複数のゲートウェイがゲートウェイ4へデータオブジェクトを送信してもよい。
以上で説明したように、センサの観測データの特徴量を評価することにより、観測データからデータオブジェクトを新たに生成(構成)する必要のない場合は、それ以前に生成したデータオブジェクトを参照する情報で代えることが可能となり、データオブジェクト生成の負荷を低減できる。特に観測データの変化が小さい場合に、値の近いデータオブジェクトの生成を繰り返す必要がなくなる。
また、1つのデータオブジェクトを生成するために複数のセンサ(データソース)の観測データが必要な場合、複数のセンサの観測データの1つでも特徴量が条件を満たさなければ、新たにデータオブジェクトを生成して更新するので、観測データの変化をデータオブジェクトに反映できる。
また、周期的に受信されるはずの観測データが受信されなかった場合であっても、さらに以前の観測データから特徴量を評価できる。ここで、観測データの受信が不安定であり、受信できた観測データでは、それ以前に生成したデータオブジェクトを参照する情報に代えるだけの信頼度が得られない場合、新たにデータオブジェクトを生成して更新できる。
センサなどにより観測されたデータから、サービスが利用するデータオブジェクト形成などの処理頻度を低減させる手法を提案することにより、データオブジェクト形成などの処理基盤の負荷低減を図ることができる。 具体的には、O&M(Operation&Maintenance)などを目的にする場合、センサにより観測される状態は通常時はあまり変化しない事に着目して、センサから受信するデータを時系列に分析することにより、データオブジェクト形成などの処理の要否を判断して、不要な処理を省くことが可能になる。