(57)【特許請求の範囲】
【請求項１】
検索対象の時系列データを記憶装置に蓄積するデータ蓄積部と、クライアントから入力された検索クエリに該当するデータ系列を、前記蓄積された時系列データから検索するデータ検索部とを有する時系列データ管理装置であって、
前記時系列データは、機器の状態を監視するセンサから取得され、時間経過に従って発生した個々のセンサのデータが時間順に系列として配置されたデータの集合であり、
前記データ蓄積部は、
前記時系列データを蓄積する際に、時々刻々と受信する前記時系列データを、監視対象となる機器のセンサに関連付けて、特定の時間幅毎に分割された時間帯のデータ系列の特徴量を階層的な時間帯毎に算出するインデクス生成部と、前記機器のセンサと関連付けて前記算出した階層的な時間帯毎の特徴量を時系列インデクス情報として前記記憶装置へ書き込むインデクス書込部と、前記時系列データを前記機器のセンサと関連付けて時系列データ情報として前記記憶装置へ書き込むデータ書込部とを備え、
前記データ検索部は、
前記時系列データを検索する際に、前記検索クエリと前記時系列インデクス情報の各特徴量との適合度を判定するための評価式を生成する評価式生成部と、
前記評価式を用いて時系列インデクス情報に含まれる時間帯毎の特徴量が、前記評価式に適合するかを判定し、適合するデータ系列群の時間帯を特定するに際し、前記検索クエリに含まれる検索レンジ幅よりも広い前記時間幅を有する時間帯を抽出し、前記抽出された時間帯毎の特徴量を、前記評価式に適合するかにより判定することで特定し、前記特定できた場合には、前記時間帯に対して同一時間帯に属する前記時間幅よりも狭い階層下位の時間帯毎の特徴量を順次評価する処理を前記検索レンジ幅に近くなるまで繰り返し行い、前記評価式に適合する時間帯を特定するインデクス検索部と、
前記特定した時間帯に対応するデータ系列を前記時系列データ情報から抽出するデータ読込部と、
前記抽出されたデータ系列を前記検索クエリの検索条件と照合する時系列解析部とを備える
ことを特徴とする時系列データ管理装置。
【請求項２】
前記時系列インデクス情報は、前記時系列データの属性名毎に、複数の時系列インデクスから構成されるインデクス階層構造を有し、
前記時系列インデクスは、前記時系列データの開始時刻および終了時刻を含む時間帯、前記時間帯の特徴量、前記インデクス階層構造を構成する下位の時系列インデクスのポインタを含んでいる
ことを特徴とする請求項１に記載の時系列データ管理装置。
【請求項３】
前記インデクス検索部は、前記時系列インデクスに対して、隣り合う時間幅の各特徴量を結合することにより、複数の時間幅分の特徴量を算出して、前記算出した特徴量を評価式により判定し、適合するデータ系列群の時間帯を特定する
ことを特徴とする請求項２に記載の時系列データ管理装置。
【請求項４】
前記インデクス生成部は、前記特定の時間幅のデータ系列の特徴量の算出の際に、前記特定の時間幅を変えて、前記時データ系列の値の変動に応じて変化させて前記時間幅を算出する
ことを特徴とする請求項１に記載の時系列データ管理装置。
【請求項５】
前記時間幅の算出は、前記データ系列の変動が所定未満の水準の時間帯は時間幅を大きく取り、前記データ系列が所定以上の水準で変動した時間帯は時間幅を小さくする
ことを特徴とする請求項４に記載の時系列データ管理装置。
【請求項６】
前記インデクス生成部は、時系列データを複数の異なる時間幅毎に特徴量を算出し、前記特徴量は、同一時間帯に属する前記時間幅よりも広い範囲の時間幅を有する特徴量に包含される階層構造を持つ時系列インデクスを生成する
ことを特徴とする請求項１に記載の時系列データ管理装置。
【請求項７】
前記インデクス生成部は、前記階層構造を持つ時系列インデクスに対して隣り合う時間幅の各特徴量を任意のタイミングで結合することにより、複数の時間幅分の特徴量を算出し、前記複数の時間幅を新たな時間幅として前記時系列インデクスを再構成する
ことを特徴とする請求項６に記載の時系列データ管理装置。
【請求項８】
前記インデクス生成部が算出する特徴量は、特定の時間幅毎のデータ系列の最小値と最大値を使用した上下限範囲であり、
前記評価式生成部は、前記検索クエリに含まれる検索条件を、前記上下限範囲を評価するための評価式として生成し、
前記インデクス検索部は、前記データ系列の上下限範囲と評価式とを比較して判定する
ことを特徴とする請求項１に記載の時系列データ管理装置。
【請求項９】
前記データ蓄積部は、さらに、
前記時系列データを前記記憶装置に蓄積する際に、前記時系列データを圧縮してデータ書込部へ渡すデータ圧縮部を備え、
前記データ検索部は、さらに、
前記時系列データを検索する際に、前記データ読込部から渡された前記圧縮データを解凍するデータ解凍部を備える
ことを特徴とする請求項１に記載の時系列データ管理装置。
【請求項１０】
前記クライアントは、前記インデクス検索部から受信した前記データ系列群の時間帯とその特徴量を表示部に表示するビューアを有する
ことを特徴とする請求項１に記載の時系列データ管理装置。
【請求項１１】
前記インデクス生成部は、時系列データを複数の異なる時間幅毎に特徴量を算出し、前記特徴量は同一時間帯に属する前記時間幅よりも広い範囲の時間幅を有する特徴量に包含される階層構造を持つ時系列インデクスを生成し、
前記インデクス検索部は、前記評価式により適合する時間帯を広い範囲の特徴量から順次狭い範囲の特徴量へと段階的に出力し、
前記ビューアは、前記インデクス検索部から受信した前記特徴量を、段階的に再描画を繰り返し表示する
ことを特徴とする請求項１０に記載の時系列データ管理装置。
【請求項１２】
前記インデクス生成部が算出する特徴量は、特定の時間幅毎のデータ系列の最小値と最大値を使用した上下限範囲を使用し、
前記評価式生成部は、前記検索クエリに含む検索条件を、前記上下限範囲を評価するための評価式として生成し、
前記インデクス検索部は、前記データ系列の上下限範囲を前記評価式に基づいて判定して、適合した時間帯の特徴量としてデータ系列の平均値を出力して前記クライアントに送信し、
前記クライアントのビューアは、前記送信された平均値を前記表示部に描画する
ことを特徴とする請求項１０または請求項１１に記載の時系列データ管理装置。
【請求項１３】
検索対象の時系列データを第１の記憶装置に蓄積する第１の管理装置と、クライアントから入力された検索クエリに該当するデータ系列の検索を、前記蓄積された時系列データの特徴量を含む時系列インデクス情報を第２の記憶装置に記憶する第２の管理装置とを含んでなる時系列データ管理システムであって、
前記時系列データは、機器の状態を監視するセンサから取得され、時間経過に従って発生した個々のセンサのデータが時間順に系列として配置されたデータの集合であり、
前記第１の管理装置は、前記時系列データを蓄積する際に、時々刻々と受信する前記時系列データを、監視対象となる機器のセンサに関連付けて、特定の時間幅毎に分割された時間帯のデータ系列の特徴量を階層的な時間帯毎に算出するインデクス生成部と、前記機器のセンサと関連付けて前記算出した階層的な時間帯毎の特徴量を前記時系列インデクス情報として前記第２の記憶装置へ書き込むインデクス書込部と、前記時系列データを前記機器のセンサと関連付けて時系列データ情報として前記第１の記憶装置へ書き込むデータ書込部とを備え、
前記第２の管理装置は、
前記時系列データを検索する際に、前記検索クエリと前記時系列インデクス情報の各特徴量との適合度を判定するための評価式を生成する評価式生成部と、
前記評価式を用いて時系列インデクス情報に含まれる時間帯毎の特徴量が、前記評価式に適合するかを判定し、適合するデータ系列群の時間帯を特定するに際し、前記検索クエリに含まれる検索レンジ幅よりも広い前記時間幅を有する時間帯を抽出し、前記抽出された時間帯毎の特徴量を、前記評価式に適合するかにより判定することで特定し、前記特定できた場合には、前記時間帯に対して同一時間帯に属する前記時間幅よりも狭い階層下位の時間帯毎の特徴量を順次評価する処理を前記検索レンジ幅に近くなるまで繰り返し行い、前記評価式に適合する時間帯を特定するインデクス検索部と、
前記特定した時間帯に対応するデータ系列を前記第１の記憶装置から抽出するデータ読込部と、前記抽出されたデータ系列を前記検索クエリの検索条件と照合する時系列解析部とを備える
ことを特徴とする時系列データ管理システム。
【請求項１４】
検索対象の時系列データを記憶装置に蓄積するデータ蓄積部と、クライアントから入力された検索クエリに該当するデータ系列を、前記蓄積された時系列データから検索するデータ検索部とを有する時系列データ管理装置による時系列データ管理方法あって、
前記時系列データは、機器の状態を監視するセンサから取得され、時間経過に従って発生した個々のセンサのデータが時間順に系列として配置されたデータの集合であり、
前記データ蓄積部は、
前記時系列データを蓄積する際に、時々刻々と受信する前記時系列データを、監視対象となる機器のセンサに関連付けて、特定の時間幅毎に分割された時間帯のデータ系列の特徴量を階層的な時間帯毎に算出するインデクス生成ステップと、
前記機器のセンサと関連付けて前記算出した階層的な時間帯毎の特徴量を時系列インデクス情報として前記記憶装置へ書き込むインデクス書込ステップと、
前記時系列データを前記機器のセンサと関連付けて時系列データ情報として前記記憶装置へ書き込むデータ書込ステップとを含んで実行し、
前記データ検索部は、
前記時系列データを検索する際に、前記検索クエリと前記時系列インデクス情報の各特徴量との適合度を判定するための評価式を生成する評価式生成ステップと、
前記評価式を用いて時系列インデクス情報に含まれる時間帯毎の特徴量が、前記評価式に適合するかを判定し、適合するデータ系列群の時間帯を特定するに際し、前記検索クエリに含まれる検索レンジ幅よりも広い前記時間幅を有する時間帯を抽出し、前記抽出された時間帯毎の特徴量を前記評価式に適合するかにより判定することで特定し、前記特定できた場合には、前記時間帯に対して同一時間帯に属する前記時間幅よりも狭い階層下位の時間帯毎の特徴量を順次評価する処理を前記検索レンジ幅に近くなるまで繰り返し行い、前記評価式に適合する時間帯を特定するインデクス検索ステップと、
前記特定した時間帯に対応するデータ系列を前記時系列データ情報から抽出するデータ読込ステップと、
前記抽出されたデータ系列を前記検索クエリの検索条件と照合する時系列解析ステップとを含んで実行する
ことを特徴とする時系列データ管理方法。
【請求項１５】
検索対象の時系列データを記憶装置に蓄積し、クライアントから入力された検索クエリに該当するデータ系列の検索を、前記蓄積された時系列データから行う時系列データ管理装置による時系列データ管理プログラムであって、
前記時系列データは、機器の状態を監視するセンサから取得され、時間経過に従って発生した個々のセンサのデータが時間順に系列として配置されたデータの集合であり、
コンピュータに、
前記時系列データを蓄積する際に、時々刻々と受信する前記時系列データを、監視対象となる機器のセンサに関連付けて、特定の時間幅毎に分割された時間帯のデータ系列の特徴量を算出するインデクス生成処理と、
前記機器のセンサと関連付けて前記算出した階層的な時間帯毎の特徴量を時系列インデクス情報として前記記憶装置へ書き込むインデクス書込処理と、
前記時系列データを前記機器のセンサと関連付けて時系列データ情報として前記記憶装置へ書き込むデータ書込処理と、
前記時系列データを検索する際に、前記検索クエリと前記時系列インデクス情報の各特徴量との適合度を判定するための評価式を生成する評価式生成処理と、
前記評価式を用いて時系列インデクス情報に含まれる時間帯毎の特徴量が、前記評価式に適合するかを判定し、適合するデータ系列群の時間帯を特定するに際し、前記検索クエリに含まれる検索レンジ幅よりも広い前記時間幅を有する時間帯を抽出し、前記抽出された時間帯毎の特徴量を前記評価式に適合するかにより判定することで特定し、前記特定できた場合には、前記時間帯に対して同一時間帯に属する前記時間幅よりも狭い階層下位の時間帯毎の特徴量を順次評価する処理を前記検索レンジ幅に近くなるまで繰り返し行い、前記評価式に適合する時間帯を特定するインデクス検索処理と、
前記特定した時間帯に対応するデータ系列を前記時系列データ情報から抽出するデータ読込処理と、
前記抽出されたデータ系列を前記検索クエリの検索条件と照合する時系列解析処理とを
実行させるための時系列データ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、時間の経過に伴い継続的に発生する時系列データを管理する時系列データ管理装置、時系列データ管理システム、時系列データ管理方法、および時系列データ管理プログラムに関し、特に蓄積された時系列データから所望の検索パタンを高速に検索する技術に関する。
【背景技術】
【０００２】
ＲＦＩＤ（Radio Frequency IDentification）やＧＰＳ（Global Positioning System）などセンシング技術の発達に伴い、工場やオフィスなどの実世界から様々なセンサデータが取得可能になり、これらを実業に活用する事例が増加している。例えば、各家庭から“電力使用量”を検診機器によって取得し、その使用状況により今後の必要電力量を予測解析して発電量を最適に制御する「スマートグリッド」や、道路上の各車の“位置情報”をＧＰＳで取得し、その速度や方向を解析することにより渋滞などの交通状況を予測する「交通状況予測」、工場などのプラント機器や設備などからモータ回転数や圧力といった“稼動情報”を取得し、その値や変動により機器の異常や故障を事前に検知する「機器予防保守」などといった応用事例が実用段階になりつつある。【０００３】
センサデータを活用するためには、データを分析しその動作特性を理解することが不可欠である。センサデータは、時間の経過に伴って継続的に発生する、いわゆる「時系列データ」であることが特徴として挙げられ、動作特性を理解するためには時間に沿ったデータの変動やパタンを見出すことが重要である。その結果、センサデバイスから取得される機器や設備の特徴・傾向を利用して、業務に活用することが可能となる。【０００４】
時系列データの分析には、データを「蓄積」し、蓄積したデータに対して様々なパタンを試行錯誤的に「検索」する方法が取られる。ここで、物流業における証跡管理を例に挙げて、時系列データ検索の例を具体的に説明する。【０００５】
近年、物流業界ではセンサデータを活用した高度な輸送サービス事業を展開する事例が増えつつあり、その一例として、医療細胞や薬品といった安定輸送が求められる荷物に対して乱暴に輸送していないことを証明するサービスがある。【０００６】
各荷物には衝撃計が付けられおり、時々刻々と取得されたセンサデータは、随時、ハードディスクなどの記憶装置に蓄積しておく。安定輸送を証明するために、蓄積されたデータに対して、種々の検索を行う。例えば、“過去３ヶ月間”で、センサの衝撃度が“２０以上を示す値が５秒間以上継続して発生した系列を抽出”といった検索パタンを指定する。この系列が抽出されなければ安定して運搬されたことが証明される。【０００７】
ここで、前記のような時系列データの検索と従来のリレーショナルデータベースにおける検索との相違を説明する。従来のリレーショナルデータベースにおける検索では、例えば「名前」、「住所」など、個々のデータに意味があり、検索の特徴としては単体のデータに対して条件にマッチするデータを１つずつ取り出すというものである。【０００８】
これに対して、時系列データでは、個々のセンサ値の値も重要であるが、それ以上に、データ系列から導き出されるセンサ値の推移が重要になる。従って、検索においても特定の検索パタン（系列パタンともいう。）とマッチするデータ系列を抽出することが重要となる。【０００９】
このような時系列データ検索の実現方法として、データベース関連の学会で提案されているストリームデータ処理システムによる時系列解析処理を利用する方法が考えられる（例えば、非特許文献１）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００５−６３３８５号公報
【非特許文献】
【００１１】
【非特許文献１】B.Balcock, S.Babu, M.Datar, R.Motwani and J.Widom, “Models and issues in data stream systems”, In Proc. Of PODS 2002, pp.1-16(2002)
【発明の概要】
【発明が解決しようとする課題】
【００１２】
ストリームデータ処理は、リアルタイム解析としての用途に用いられることが多いが、バッチ用途として、つまり、蓄積データに対する解析処理として利用されるケースも多い。このような用途での時系列解析処理では蓄積された時系列データをメモリ上に全件ロードし、指定された系列パタンとの照合を、時間に沿って逐次実行する。但し、このような処理は、時系列データに対する全件スキャンが必要となるため、検索対象となる時系列データを全てディスクからメモリ上にロードする必要がある。【００１３】
一般的に、実世界上で発生するセンサデータは膨大な量となることが多いため、従来方法では、ディスク読み込み時に発生するディスクＩ／Ｏ（Input/Output）の多発により、検索性能の劣化という課題がある。【００１４】
また、特許文献１に、過去の時系列データに対して、特定のパタンの類似検索を高速に実現する技術が開示されている。本方式では予め、全ての時系列データに対して量子化演算を施しておき、検索時に量子化を利用した類似計算を行うことで従来の類似演算を高速化している。但し、本方式でも演算対象となる全ての時系列データをディスク上からロードする必要があり、ディスクＩ／Ｏの多発による性能劣化という課題は解決できていない。【００１５】
本発明は、前記の課題を解決するための発明であって、蓄積された時系列データから所望の検索パタンを高速に検索することができる時系列データ管理装置、時系列データ管理システム、時系列データ管理方法、および時系列データ管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
前記課題を解決するために、本発明の時系列データ管理装置は、データ蓄積部とデータ検索部とを有する。データ蓄積部は、時系列データを蓄積する際に特定の時間帯毎にデータ系列の特徴量を算出した時系列インデクスを作成する。そして、データ検索部は、時系列データ検索する際に、指定された検索条件を、時系列インデクスに含まれる特徴量を評価するための評価式に変換し、当該評価式を用いて時系列インデクスに含まれる時間帯毎の特徴量を判定し、適合するデータ系列群の時間帯を特定してディスク（例えば、外部記憶装置２００）から読み込み、読み込んだデータ系列のみに対して時系列解析を行う。ディスク上に格納された時データ系列に対して時系列解析を行う際、指定された検索パタンに照合する可能性のある時系列データに絞り込んでディスクから読み込むことができる。
【発明の効果】
【００１７】
本発明によれば、蓄積された時系列データから所望の検索パタンを高速に検索することことができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の実施の形態に係るシステムの全体構成を例示した図である。
【図２】時系列データのデータ構造を例示した図である。
【図３】検索クエリの記述形式を例示した図である
【図４】スキーマ定義テーブルを例示した図である。
【図５】時系列データテーブルを例示した図である。
【図６】インデクス生成テーブルを例示した図である。
【図７】時系列インデクステーブルおよび時系列インデクスノードのデータ構造を例示した図である。
【図８】評価式生成ルールテーブルを例示した図である。
【図９】データ受付部が時系列データを受信した際に行う受信処理を例示したフローチャートである。
【図１０】データ書込部が行う時系列データ書込処理を例示したフローチャートである。
【図１１】インデクス生成部が行うインデクス生成処理を例示したフローチャートである。
【図１２】検索受付部が行う検索処理を例示したフローチャートである。
【図１３】インデクス検索部が行うインデクス検索処理（時間幅絞込みサーチ）を例示したフローチャートである。
【図１４】評価式生成部が行う評価式生成処理を例示したフローチャートである。
【図１５】データ読込部が行う時系列データ読込処理を例示したフローチャートである。
【図１６】時系列解析部が行う時系列解析処理を例示したフローチャートである。
【図１７】インデクス検索部が行うインデクス検索処理の流れを概念的に示した図である。
【図１８】本発明の第２の実施の形態に係るシステムの全体構成を例示した図である。
【図１９】圧縮データを有する時系列データテーブルを例示した図である。
【図２０】第２の実施の形態に係る時系列インデクステーブルおよび時系列インデクスノードのデータ構造を例示した図である。
【図２１】データ圧縮部が行うデータ圧縮処理を例示したフローチャートである。
【図２２】第２の実施の形態に係る時系列データ書込部が行うデータ書込処理を例示したフローチャートである。
【図２３】第２の実施の形態に係るインデクス生成部が行うインデクス生成処理を例示したフローチャートである。
【図２４】第２の実施の形態に係る検索受付部が行う検索処理を例示したフローチャートである。
【図２５】第２の実施の形態に係るインデクス検索部が行うインデクス検索処理（時間幅固定サーチ）を例示したフローチャートである。
【図２６】第２の実施の形態に係るデータ読込部が行う時系列データ読込処理を例示したフローチャートである。
【図２７】データ解凍部のデータ解凍処理を例示したフローチャートである。
【図２８】本発明の第３の実施の形態に係るシステムの全体構成を例示した図である。
【図２９】第３の実施の形態に係るデータ受付部が行う検索処理を例示したフローチャートである。
【図３０】第３の実施の形態に係るインデクス検索部が行うインデクス検索処理を例示したフローチャートである。
【図３１】ビューアが行う描画処理の例示したフローチャートである。
【図３２】本発明の第４の実施の形態に係るシステムの全体構成を例示した図である。
【図３３】第４の実施の形態に係るインデクス生成テーブルを例示した図である。
【図３４】第４の実施の形態に係るインデクス生成部が行うインデクス生成処理を例示したフローチャートである。
【図３５】第１の実施の形態に係るインデクス書込部が行うインデクス書込処理を例示したフローチャートである。
【図３６】第４の実施の形態に係るインデクス書込部が行うインデクス書込処理を例示したフローチャートである。
【図３７】第４の実施の形態に係るデータ読込部が行う時系列データ読込処理を例示したフローチャートである。
【図３８】インデクス検索部が行うインデクス検索処理（時間幅固定サーチ）を例示したフローチャートである。
【図３９】インデクス検索部が行うインデクス検索処理（時間幅固定サーチ）の流れを概念的に示した図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施の形態について、図面を用いて詳細に説明する。
［第１の実施の形態］
図１は、本発明の第１の実施の形態に係るシステムの全体構成を例示した図である。本実施の形態のシステムは、時系列データ管理装置１００、時系列データ管理装置１００に接続された外部記憶装置２００、時系列データ３００（図２参照）を時系列データ管理装置１００に送信する管理者ＰＣ４００、検索クエリ６００（図３参照）を時系列データ管理装置１００に送信するクライアントＰＣ５００を含んで構成される。なお、ＰＣはPersonal Computerの略である。検索クエリ６００とは、処理要求(問い合わせ)を文字列として表したものであり、時系列データ３００の検索の命令をシステムに発行するのに使われるものをいう。
【００２０】
時系列データ管理装置１００は、時系列データ３００の蓄積と検索を行う装置である。外部記憶装置２００は、時系列データテーブル２１０（時系列データ情報）（図５参照）および時系列インデクステーブル２２０（時系列インデクス情報）（図７参照）が格納される記憶装置であり、例えばＨＤＤ（Hard Disk Drive）で構成される。
【００２１】
時系列データ３００は、センサデータの集合であり、時間経過に従って発生した個々のセンサデータが時間順に系列として配置される。センサデータとはセンシングデバイスや設備・機器などから取得される計測データであり、例えば回転数や圧力といった稼働情報や温度、湿度といった物理量と、その発生時刻であるタイムスタンプが含まれる。
【００２２】
本実施の形態では、センサデータは実世界で発生する各種計測データとして説明するが、本発明では物理量を含むデータであればこれに限定されない。例えば実世界以外で発生する株価データも本発明の対象となりうる。
【００２３】
管理者ＰＣ４００は、時系列データ管理装置１００に対して時系列データ３００の格納指示や、データ管理に関する各種設定を行う運用管理者の端末である。クライアントＰＣ５００は、時系列データ管理装置１００に対して検索を実行するユーザの端末であり、検索要求を示す検索クエリ６００を送信し、検索結果を受信する。管理者ＰＣ４００、クライアントＰＣ５００は、図示していないが、プロセッサ、メモリ、入力装置、表示部を含む出力装置などを有している。
【００２４】
次に、時系列データ管理装置１００の各構成要素について説明する。
時系列データ管理装置１００は、プロセッサ１０１、メモリ１０２、入力装置１０３、出力装置１０４を有し、ディスクインタフェース１０５を介して外部記憶装置２００と接続される。
【００２５】
プロセッサ１０１は、例えば、ＣＰＵ（Central Processing Unit）で構成され、メモリ１０２上に読み込まれた時系列データ管理プログラム１１０を実行することで、当該プログラムの各処理を実行する。
【００２６】
時系列データ管理プログラム１１０の各処理はプロセッサ１０１で実行することにより実現するが、これらはデータ蓄積部１２０、データ検索部１３０など、各処理を行う処理部として集積回路化するなどしてハードウェアで実現することもできる。本実施の形態では、各種プログラムをプロセッサ１０１が実行することで実現される各処理部を各処理の主体として説明するが、各処理部をハードウェアで実現した場合にはその各処理部が主体となって各処理を行う。
【００２７】
メモリ１０２は、例えばＲＡＭ（Random Access Memory）、フラッシュメモリなどの記憶媒体で構成される。入力装置１０３は、例えばキーボードやマウスなどの装置で構成され、出力装置１０４は例えば液晶モニタなどの装置で構成される。
【００２８】
次に、時系列データ管理プログラム１１０の各構成要素について説明する。
時系列データ管理プログラム１１０は、データ蓄積部１２０、データ検索部１３０、設定情報格納領域１４０から構成される。
【００２９】
データ蓄積部１２０は、時系列データ３００を受け付け、外部記憶装置２００のディスクに時系列データテーブル２１０として当該データを書き込む処理と、データ検索時にディスクから読み込むデータ系列を絞り込むためのインデクス情報を作成し、当該情報を時系列インデクステーブル２２０として書き込む処理を実行する。
【００３０】
データ蓄積部１２０は、データ受付部１２１、データ書込部１２２、インデクス生成部１２３、インデクス書込部１２４から構成される。
【００３１】
データ受付部１２１は、時系列データ３００を管理者ＰＣ４００から受け付け、データ書込部１２２とインデクス生成部１２３へ当該データを渡す。なお、データ受付部１２１がデータを渡す際、データ書込部１２２とインデクス生成部１２３がそれぞれの処理を行いやすい形式へデータを加工することも可能であり、本実施の形態では加工処理を行うものとして説明する。
【００３２】
データ書込部１２２は、データ受付部１２１から加工済みの時系列データを受け取り、時系列データテーブル２１０へ書き込みする処理を行う。
【００３３】
インデクス生成部１２３は、データ受付部１２１から加工済みの時系列データを受け取り、時系列インデクスを有する時系列インデクステーブル２２０を生成する処理を行う。時系列インデクスとは、データ検索時に、時系列解析に照合する可能性のあるデータ系列のみを時系列データテーブル２１０から絞り込んで読み込むための索引情報である。これにより、時系列解析処理に照合し得ないデータ系列の読み込みを省略することができ、ディスクＩ／Ｏの多発による検索性能劣化を防止することが可能になる。なお、本実施の形態における説明では「データ系列」とは時系列データ３００に含まれる、特定の時間範囲における時系列データであると定義する。
【００３４】
時系列インデクスは、時系列データ３００を特定の時間幅で分割した、時間帯毎に算出された各種特徴量を保持する。特徴量とは、特定の時間幅における時系列データの傾向や状態を表す数値であり、各データ系列に属するセンサデータ値の集合演算として算出される。例えば最大値・最小値や平均・分散など任意の集合演算が本発明に適用可能である。加えて、特徴量同士を組合せて新たな特徴量として適用してもよい。例えば“最大値”と“最小値”を使い、系列データのセンサ値の“上下限”を特徴量として使用することもできる。
【００３５】
インデクス書込部１２４は、インデクス生成部１２３が生成した時系列インデクスを受け取り、時系列インデクステーブル２２０に書き込む処理を実行する。
【００３６】
データ検索部１３０は、クライアントＰＣ５００からの検索要求に応じて時系列データテーブル２１０から所望の検索パタンに照合するデータ系列を抽出する処理を行う。データ検索部１３０は、検索受付部１３１、評価式生成部１３２、インデクス検索部１３３、データ読込部１３４、時系列解析部１３５から構成される。
【００３７】
本実施の形態では、データ読込部１３４が時系列データテーブル２１０から時系列データをメモリ１０２上へ読み込み、時系列解析部１３５が当該データに対して検索クエリ６００との照合処理を行うが、時系列データテーブル２１０から時系列データを読み込む前に、インデクス検索部１３３が時系列インデクステーブル２２０の時系列インデクスを参照し、時系列解析処理で照合する可能性のあるデータ系列を絞り込むことが特徴である。
【００３８】
以下、各処理部についてさらに詳細に説明する。
検索受付部１３１は、クライアントＰＣ５００とのインタフェース層としての役割を持ち、クライアントＰＣ５００から検索クエリ６００を受け付け、時系列解析部１３５から検索結果を受け取りクライアントＰＣ５００へ結果を返す処理を実行する。検索クエリ６００を受け付け後、インデクス検索部１３３やデータ読込部１３４を適切なタイミングで呼び出すが、詳しくは後記する。
【００３９】
評価式生成部１３２は、検索クエリ６００に基づいて、評価式を生成する処理を実行する。評価式とは、検索クエリ６００と時系列インデクスの各特徴量との適合度を判定するための式である。この適合度判定で、適合するデータ系列を特定し、当該データ系列を時系列データテーブル２１０から読み込む。
【００４０】
例えば、特徴量として“最大”と“最小”を組み合わせた値、即ち、特定の時間幅における系列データの上下限を持つ場合、検索クエリ６００はその上下限を評価する為の式に変換される。例えば、“５秒間以上にわたり、１０以上の値が継続した系列を抽出”という検索パタンが指定された場合、５秒間以上を意味する“最小値が５以上”という式に変換する。本式に適合する系列データが、時系列解析に照合する可能性のある系列であり、逆に本式に適合しない系列データは、時系列解析に必ず照合しないため読み込み対象外となる。
【００４１】
インデクス検索部１３３は、評価式生成部１３２から評価式を受け取り、時系列インデクスの中から、特定の時間幅で分割した時間帯毎の特徴量との適合度を判定する処理を行い、適合する時間帯のデータ系列のポインタ情報を抽出し、当該ポインタ情報をデータ読込部１３４へ出力する。
【００４２】
データ読込部１３４は、前記ポインタ情報を元に、時系列データテーブル２１０から当該ポインタが示すデータ系列を読み込み、時系列解析部１３５へ出力する。
【００４３】
時系列解析部１３５は、前記データ系列を読み込み、メモリ上で検索クエリ６００との照合処理を行い、検索クエリ６００に完全にマッチするデータ系列を抽出して検索受付部１３１へ出力する。時系列解析部１３５が行う処理の好適な例としては、非特許文献１に記載のストリームデータ処理がある。本実施の形態の例においては、時系列解析部１３５は当該処理をベースに説明を行うが、データ系列と検索クエリ６００を照合できる処理であれば、これに限定されるものではない。
【００４４】
設定情報格納領域１４０には、時系列データを管理するための各種設定情報としてスキーマ定義テーブル１４１（スキーマ定義情報）（図４参照）、インデクス生成テーブル１４２（インデクス生成情報）（図６参照）、評価式生成ルールテーブル１４３（評価式生成ルール情報）（図８参照）から構成される。スキーマ定義テーブル１４１は、時系列データ３００を構成する各センサデータの構造を記した定義情報である。インデクス生成テーブル１４２は、時系列インデクスを生成するための各種設定情報が定義され、インデクス生成部１２３により参照される。評価式生成ルールテーブル１４３は、検索クエリ６００を評価式へ変換するための変換ルールが定義され、評価式生成部１３２により参照される。
【００４５】
次に、外部記憶装置２００の構成要素について説明する。
時系列データテーブル２１０は、時系列データ３００を蓄積するための領域であり、例えばリレーショナルデータベースのテーブルである。時系列インデクステーブル２２０は、時系列インデクスを格納するためのテーブルであり、例えばリレーショナルデータベースのテーブルである。
【００４６】
図２は、時系列データ３００のデータ構造を例示した図である。時系列データ３００は、センサデータ３０１の集合であり、各センサデータ３０１が時系列に配置される。センサデータ３０１は、データソースから発生したデータであり、時系列データにおける、特定の瞬間のデータであると見なすことができる。センサデータ３０１は、データソース名３１１、タイムスタンプ３１２、センサ値３１３（３１３ａ、３１３ｂ、３１３ｃ、３１３ｄ）から構成される。
【００４７】
データソース名３１１は、センサデータ３０１の発生元となるデータソースを識別するための識別子であり、本実施の形態ではデータソースの名前を示す文字列として扱う。但し、データソースを識別するものであればこれに限定されず、例えばＩＤ番号のような数値も本発明に適用可能である。
【００４８】
タイムスタンプ３１２は、各センサデータが発生した時刻であり、本実施の形態では“西暦（４桁）−月−日  時：分：秒”で表す。但し、時刻を認識できるものであればこれに限定できず、任意の時刻形式が適用可能である。
【００４９】
センサ値３１３は、センサデータの計測値であり、単数又は複数の物理量から構成される。本実施の形態では、１つのセンサデータにセンサ値は複数存在するものとして説明するが、１つのセンサデータに対して単数のセンサ値とすることも可能である。複数存在する理由としては、データソースによっては複数の計測値、例えば“回転数”や“圧力”といった物理データが同時に取得される場合があるためである。
【００５０】
本実施の形態では、時系列データ３００の形式として図２に示すようなＣＳＶ（Comma-Separated Values）テキスト形式として記述し、時系列データ管理装置１００のデータ受付部１２１へ入力するものとして説明するが、時系列データ３００をセンサデータの集合として表現し、データ受付部１２１がそれを解釈できる形式であればこれに限定されない。例えば、バイナリ形式で時系列データ３００を表現し、データ受付部１２１へ入力する形式なども本発明に適用可能である。
【００５１】
時系列データ３００は、時系列データ管理装置１００へ入力される。本実施の形態では時系列データ３００は、管理者ＰＣ４００により手動で専用コマンドを用いて時系列データ管理装置へ入力されるものとして説明するが、例えば、時系列データ管理装置１００とＬＡＮ（Local Area Network）などの通信路を経由してリモートホストからネットワーク通信を行い、時系列データを入力する方法も可能である。
【００５２】
図３は、検索クエリ６００の記述形式の一例を表す図である。検索クエリ６００はselect_range句である検索レンジ幅６１０、select_items句である検索項目６２０、where_timerange句である検索対象範囲６３０、where_condition句である検索条件６４０から構成される。
【００５３】
検索レンジ幅６１０にはデータ系列の時間幅を指定する。検索項目６２０には出力するデータソースとセンサ値を指定する。時系列検索の特徴としては、検索対象範囲６３０と検索条件６４０で指定するデータパタン（変動パタン）とを組み合わせた指定が一般的である。なお、データパタン（変動パタン）とは、抽出したいデータ系列の変動を示すパタンであり、データ系列の時間幅と条件式から構成される。
【００５４】
検索対象範囲６３０は、ユーザが検索対象とする特定の期間を示し、検索対象範囲で指定される。図３に示す例では２０１０年０１月０７日７時０分０秒から２０１０年０１月１０日１２時０分０秒までの時間帯を検索範囲とし、当該区間の時系列データを外部記憶装置２００のディスクから読取り、時系列解析処理の対象とする。
【００５５】
図３に示す検索条件６４０の例では、検索レンジ幅６１０に基づいて、「５秒間の間にガスエンジン１の圧力の平均値（ＡＶＧ）が１５００を上回った系列データを抽出する」ことを示している。
【００５６】
検索条件６４０で記述されるデータパタンは、集約演算式と条件判定式で構成される。集約演算式とは検索レンジ幅に存在する全センサ値を対象とした演算であり、例えば平均値（Ａｖｇ）、最大値（Ｍａｘ）、最小値（Ｍｉｎ）、合計（Ｓｕｍ）など、任意の式が使用できる。条件判定式は集約演算式により導き出された演算結果を判定するための関係演算子であり、例えば不等式演算子（＜、＞、≧、≦）や等式演算子（＝）など、任意の演算子が使用できる。
【００５７】
纏めると、図３に示す例では、「２０１０年０１月０７日７時０分０秒から２０１０年０１月１０日１２時０分０秒まで（２０１０−０１−０７  ０７：００：００，２０１０−０１−１０  １２：００：００）の時間帯に、ガスエンジン１の圧力値の５秒間の平均値が１５００を上回った系列データを抽出し、ガスエンジン１．圧力を出力する」という検索例である。
【００５８】
本実施の形態では、検索条件６４０は前記のような形式で記述することとして説明するが、本発明はセンサ値の変動・状態パタンを表現できる形式であればこれに限定されない。
【００５９】
図４は、スキーマ定義テーブル１４１を例示した図である。図４を参照して、時系列データ３００のデータ形式であるスキーマ定義テーブル１４１（スキーマ定義情報）の一例を説明する。データソース名７００は、センサデータの発生元となるデータソースを識別するための識別子であり、ここではデータソースの名前を使用する。属性名７０１は、各データソースから発生するセンサデータのセンサ値の種別名が格納される。データソース名７００の各項目に対応する属性名７０１のｎ行目に対応する項目が図２に示すセンサデータ３０１のセンサ値３１３のｎ列目に対応する。例えば、図２および３に示す例では、３１３ａは「水温」、３１３ｂは「温度」、３１３ｃは「圧力」、３１３ｄは「回転数」にそれぞれ対応する。
【００６０】
スキーマ定義テーブル１４１は、データ受付部１２１が時系列データ３００を受信した後、各センサデータを属性毎に分解する加工処理を行う際に参照する。
【００６１】
図５は、時系列データテーブル２１０を例示した図である。図５を参照して、時系列データテーブル２１０（時系列データ情報）の一例を説明する。適宜図１を参照する。時系列データテーブル２１０は時系列データ３００を蓄積するためのテーブルであり、ＩＤ２１１、データソース名２１２、属性名２１３、タイムスタンプ２１４、センサ値２１５から構成される。
【００６２】
ＩＤ２１１は、各行を識別するための識別番号であり、それぞれの行には各時刻に発生したセンサデータの特定のセンサ値が１つ格納される。データソース名２１２は、センサデータの発生元となるデータソースを識別するための識別子であり、例えばデータソースの名前が格納される。属性名２１３には、データソースから発生するセンサデータのセンサ値の種別名が格納される。タイムスタンプ２１４には、センサデータが発生した時刻が記入される。センサ値２１５には、センサ値である数値データが格納される。
【００６３】
データ書込部１２２は、前記したように、データ受付部１２１から加工済みの各センサデータを受け取り、時系列データテーブル２１０へ当該データを書き込みする。なお、本実施の形態では、１つの時系列データテーブル２１０に対して複数の属性を混在させて格納しているが、属性毎にテーブルを分ける方法も可能である。
【００６４】
また、時系列データはＲＤＢ（リレーショナルデータベース）上に時系列データを格納するものとして説明するが、例えばファイルシステム上に直接格納する方式も本発明に適用可能である。
【００６５】
図６は、インデクス生成テーブル１４２を例示した図である。インデクス生成テーブル１４２（インデクス生成情報）は、時系列インデクスを生成する際に必要となる定義情報であり、データソース名７１０、属性名７１１、分割時間幅７１２、特徴量算出関数７１３から構成される。なお、時系列インデクスは、詳細は後述するが時系列データを特定の時間幅毎に分割し、各時間帯に特徴量を保持したデータ構造を有する。
【００６６】
データソース名７１０は、センサデータの発生元となるデータソースを識別するための識別子であり、属性名７１１には、センサ値のセンサ種別名が格納される。分割時間幅７１２には、分割を行う時間幅が単数または複数格納される。特徴量算出関数７１３には、特徴量として使用する集約演算関数が格納される。
【００６７】
例えば図６において、データソース名７１０が「ガスエンジン１」、属性名７１１が「水温」の場合、分割時間幅７１２を１時間毎、３０分間毎、１０分間毎にとり、それぞれの時間幅で分割した特徴量を算出する。
【００６８】
例えば、時系列データの全体の時間帯が“１０：００−１２：００”である場合、１時間毎に分割した“１０：００−１１：００”、“１１：００−１２：００”の各種特徴量と、３０分間毎に分割した“１０：００−１０：３０”、“１０：３０−１１：００”、“１１：００−１１：３０”、“１１：３０−１２：００”の各種特徴量と、１０分間毎に分割した“１０：００−１０：１０”、“１０：１０−１０：２０”、…、“１１：５０−１２：００”の各種特徴量とは、本例では最大値と最小値が時系列インデクスに含まれる。
【００６９】
特徴量を異なる分割時間幅毎に保持する理由は、分割時間幅と検索レンジ幅が大幅に異なる場合、精度の高い適合度判定ができないため、予め異なる分割時間幅毎に特徴量を算出しておき、適合判定時に検索レンジ幅に近い値を持つ分割時間幅を選定するためである。
【００７０】
精度の高い適合判定ができない場合は、例えば、“分割時間幅＞＞検索レンジ幅”の場合であり、特徴量が評価式に適合したとしても局所的な範囲のみの適合であるため、時系列解析処理においてそれ以外の範囲は照合しない可能性が高くなる。つまり、時系列データの無駄な読み込みが発生してしまうからである。
【００７１】
分割時間幅における特徴量を評価するためには、分割時間幅＞検索レンジ幅を満たす場合と、分割時間幅＜検索レンジ幅の場合とがある。後者は、隣り合う時間幅の各特徴量を結合することにより、複数の分割時間幅分の特徴量を算出して、当該特徴量を評価式により判定する方法であるが詳しくは後記する。ここでは前者の方法について説明する。
【００７２】
従って、分割時間幅＞検索レンジ幅を満たしつつ、分割時間幅と検索レンジ幅がなるべく近い値を取るような分割時間幅を持つノードを抽出できれば、極力、無駄なデータ読込を防止することができる。
【００７３】
例えば、インデクスデータ２２３（図７参照）が持つ分割時間幅が１時間毎、３０分間毎、１０分間毎という３階層で、検索レンジ幅が２０分の場合、３０分間毎の分割時間幅を有するノードを抽出することが望ましい。
【００７４】
図７は、時系列インデクステーブル２２０および時系列インデクスのノードのデータ構造を例示した図である。図７（ａ）に示す時系列インデクステーブル２２０（時系列インデクス情報）は、データソース２２１の属性名２２２毎に、各時間帯における特徴量を保持するインデクスデータ２２３を有する。インデクスデータ２２３は、複数の時系列インデクスのノード（時系列インデクスノード）から構成され、インデクスのツリー構造（インデクスツリー）を有している。
【００７５】
例えば、図７（ａ）では、時系列インデクスノード２３０ａはレンジ幅が１時間で、例えば、２０１０年０１月１０日７時０分０秒から２０１０年０１月１０日８時０分０秒までの時間帯における各種特徴量、例えば最大値、最小値を保持するノードであり、時系列インデクスノード２３０ｂは同じくレンジ幅が時間で、例えば２０１０年０１月１０日８時０分０秒から２０１０年０１月１０日９時０分０秒までの時間帯における各種特徴量を保持するノードである。
【００７６】
本実施の形態の特徴として、インデクスデータ２２３は、異なる時間幅のノードを階層的に保持することができる。図７ａに示す例では、ノード集合２４０ａは時間幅が１時間であるノードの集合であり、ノード集合２４０ｂは上位ノードよりも小さい時間幅、例えば３０分間であるノードの集合であり、ノード集合２４０ｃは更にそれよりも小さい時間幅、例えば１０分間であるノードの集合である。
【００７７】
各ノードは時間帯、具体的にはレンジ幅の開始時刻と終了時刻を持ち、下位ノードの時刻帯が上位ノードの時刻帯に包含される場合、上位ノードはその下位ノードへのポインタ情報を保持する。例えば、時系列インデクスノード２３０ｃは２０１０年０１月１０日７時０分０秒から２０１０年０１月１０日７時３０分０秒までの時間帯の特徴量を有するノードであり、時系列インデクスノード２３０ｄは２０１０年０１月１０日７時３０分０秒から２０１０年０１月１０日８時０分０秒までの時間帯の特徴量を有するノードである。同様に、時系列インデクスノード２３０ｇは２０１０年０１月１０日７時０分０秒から２０１０年０１月１０日７時１０分０秒まで、時系列インデクスノード２３０ｈは２０１０年０１月１０日７時１０分０秒から２０１０年０１月１０日７時２０分０秒まで、時系列インデクスノード２３０ｉは２０１０年０１月１０日７時２０分０秒から２０１０年０１月１０日７時３０分０秒までの特徴量を有するノードである。
【００７８】
図７（ｂ）は、時系列インデクスノードのデータ構造の一例を表す図である。時系列インデクスノード２３０のＩＤ２３１はノードを識別するための識別子であり、ノードにつき一意の番号がインデクス生成部１２３により割り振られる。時間帯２３２は当該ノードの時間帯であり、開始時刻２３２ａ、終了時刻２３２ｂを含んでいる。特徴量２３３は単数または複数の特徴量である。
【００７９】
ポインタ２３４は時系列データテーブル２１０のセンサデータへのポインタの情報が格納され、ポインタ２３４ａは時系列データの開始時刻、即ち、開始時刻を有するセンサデータのポインタであり、ポインタ２３４ｂは時系列データの終了時刻、即ち終了時刻を有するセンサデータのポインタである。
【００８０】
本実施の形態ではポインタ情報として図５に示すＩＤ２１１を利用するものとして説明するが、各センサデータが格納される外部記憶装置２００の物理的なアドレスを利用することもできる。下位のノードポインタ２３５には下位ノードへのポインタ配列が格納される。例えば図７（ａ）に示す時系列インデクスノード２３０ｃであれば、そのノードにリンクされている下位ノードである時系列インデクスノード２３０ｇ，２３０ｈ，２３０ｉのＩＤ２３１が格納される。
【００８１】
本実施の形態では下位のノードポインタ２３５として各ノードのＩＤ２３１を用いることにするが、例えば、各ノードが格納される外部記憶装置２００の物理的なアドレスを利用することもできる。なお、インデクスデータ２２３のデータ形式としては、バイナリ形式やＸＭＬ（Extensible Markup Language）形式など、インデクスデータ２２３を表現できるならば任意の形式が可能である。
【００８２】
図８は、評価式生成ルールテーブル１４３を例示した図である。図８を参照して評価式生成ルールのデータ構造を説明する。適宜図３を参照する。評価式生成ルールは、評価式生成部１３２がクライアントＰＣ５００から受け取った検索クエリ６００を元に、インデクスデータ２２３の各ノードが保持する特徴量との適合度を判定するための評価式を生成するためのルールである。
【００８３】
評価式生成ルールテーブル１４３は、複数のルールの集合から構成され、検索クエリ６００の検索条件６４０に記述された文字列にマッチするルールを１つ抽出し、対応する評価式を生成し格納したテーブルである。
【００８４】
ルールＩＤ７２１は、各ルールを識別するための識別子である。検索条件パタン７２２は、検索条件６４０に記述された検索文字列を照合するための検索パタン文字列であり、本実施の形態では正規表現で実現する。評価式７２３は、生成する評価式の雛形が格納され、検索条件パタン７２２に対応する評価式を生成する。
【００８５】
ルールＩＤ＝“０１”に対応する検索パタンは「検索条件６４０の文字列が“ＡＶＧ”または“ＭＩＮ”または“ＭＡＸ”から始まって、任意の文字列が数個続いた後に“＞”、さらに“任意の数値（Ｘとする）”」という文字列のパタンの場合、評価式は「Ｆ＿ＭＩＮ＞Ｘ、Ｆ＿ＭＩＮ＜Ｘ＜Ｆ＿ＭＡＸ」に変換される。
【００８６】
例えば図３に示すような検索クエリ６００が指定された場合、検索条件６４０に記述された検索条件式は「ＡＶＧ（ガスエンジン１.圧力）＞１５００」であるので、ＩＤ７２１が“０１”であるルールが適合される。
【００８７】
この場合、評価式として「Ｆ＿ＭＩＮ＞＄２；Ｆ＿ＭＩＮ＜＄２＜Ｆ＿ＭＡＸ；」が選択される。なお、評価式中における＄２は正規表現の後方参照であり、検索パタンにマッチした「（￥ｄ＋）」の値、上記例では”１５００”が代入される。なお、図中のＦ＿ＭＩＮおよび、Ｆ＿ＭＡＸ、Ｆ＿ＳＵＭは、時系列インデクスが保持する各時間帯の特徴量である。前記により、各特徴量を評価するための評価式が生成され、当該評価式へ時系列インデクスの各特徴量を代入した値が真であるなら、適合したと見なす。
【００８８】
例えば、ある時間帯の特徴量ＭＡＸ＝１７００、ＭＩＮ＝８００の場合、前記評価式へ特徴量を代入した際には「１７００＞１５００；８００＜１５００＜１７００」となるので、適合すると判定される。これは、元々の検索条件式として平均値が１５００以上の系列データは、その上下限値として８００〜１７００の範囲に収まる可能性がある事を意味する。
【００８９】
一方、別の時間帯の特徴量ＭＡＸ＝６００、ＭＩＮ＝４００の場合、６００＞１５００；４００＜１５００＜６００」という式は適合しない。これは、元々の検索条件式として平均値が１５００以上の系列データはその上限値が６００である系列データには必ず照合しないということを意味する。なお、評価式７２３の特徴量では、検索条件パタン文字列に記述される特徴量算出関数と区別するため、本例では接頭辞に”Ｆ＿”を付けている。
【００９０】
（データ蓄積部）
次にデータ蓄積部１２０について、図９〜図１１、図３５を参照して説明する。適宜図１を参照する。
【００９１】
図９は、データ受付部１２１が時系列データ３００を受信した際に行う受信処理Ｓ９００を例示したフローチャートである。受信処理Ｓ９００では、時系列データ３００をセンサデータ毎、属性毎に分解した加工処理行い、データ書込部１２２とインデクス生成部１２３へ加工したデータを渡す処理を行う。以下、図９を用いて処理の流れを説明する。
【００９２】
データ受付部１２１は、時系列データ３００を受け付け（Ｓ９０１）、各行に存在する全てのセンサデータに対してＳ９０３〜Ｓ９１０の処理をループする（Ｓ９０２）。データ受付部１２１は、次のセンサデータを一行取り出し（Ｓ９０３）、スキーマ定義テーブル１４１（図４参照）から、当該センサデータのデータソース名７１０に対応する属性名７１１一覧を取得する（Ｓ９０４）。例えば図４に示す“ガスエンジン１”の例では、“水温”、“温度”、“圧力”、“回転数”が取得される。
【００９３】
データ受付部１２１は、次に、全ての属性名に対してＳ９０６〜Ｓ９０９の処理をループする（Ｓ９０５）。データ受付部１２１は、Ｓ９０４で取り出した属性名一覧から次の属性名を取り出し、センサ値を当該センサデータから取り出す（Ｓ９０６）。例えば、図２の第一行目に示すセンサデータの例では、“水温”としてセンサ値“１５．２”が取り出される。そして、属性毎にセンサ値を１つだけ持つセンサデータへと変換する。変換後センサデータを、一意に識別するためのＩＤ番号を割り振り、「“ＩＤ番号”，“データソース名”，“属性名”，“タイムスタンプ”，“センサ値”」の形式をもつセンサデータへ加工する（Ｓ９０７）。
【００９４】
データ受付部１２１は、さらに、データ書込部１２２に加工したセンサデータを順次渡すとともに（Ｓ９０８）、インデクス生成部１２３へ渡す（Ｓ９０９）。次に、取り出すべき属性が存在しない場合、即ち、先ほどの例では１つのセンサデータに対して４つの属性に対する加工処理が終わった場合Ｓ９０６〜Ｓ９０９の処理を終了し（Ｓ９１０）、Ｓ９１１に進む。
【００９５】
データ受付部１２１は、前記の加工処理を時系列データ３００に存在する全てのセンサデータに対して行い、次に取り出すべきセンサデータが存在しない場合、Ｓ９０３〜Ｓ９１０の処理を終了し（Ｓ９１１）、Ｓ９１２に進む。データ受付部１２１は、時系列データ３００に対して全てのセンサデータを取り出し終わると、これ以上データが存在しないことをデータ書込部１２２へ通知するため、終端データを送信し（Ｓ９１２）、同様に、インデクス生成部１２３へ終端データを送信し（Ｓ９１３）、受信処理Ｓ９００を終了する。
【００９６】
図１０は、データ書込部１２２が行う時系列データ書込処理Ｓ１０００を例示したフローチャートである。時系列データ書込処理Ｓ１０００では、データ書込部１２２はデータ受付部１２１から加工済みのセンサデータを受信し時系列データテーブル２１０へ随時、書き込む処理を行う。以下、図１０を用いて処理の流れを説明する。
【００９７】
データ書込部１２２は、全ての加工済みのセンサデータを受信するまでＳ１００２およびＳ１００３の処理を行う（Ｓ１００１）。データ書込部１２２は、データ受付部１２１から加工済みセンサデータを受信し（Ｓ１００２）、当該データを時系列データテーブル２１０へ書き込み（Ｓ１００３）、データ受付部１２１から終端データを受信した場合、Ｓ１００２およびＳ１００３の処理を終了し（Ｓ１００４）、時系列データ書込処理Ｓ１０００を終了する。
【００９８】
なお、本実施の形態の例では、センサデータを受信する毎にリレーショナルデータベースへ逐次、書き込む処理を行っているが、センサデータを例えばメモリにバッファリングし、データベースへ一括書き込みしてもよい。
【００９９】
図１１は、インデクス生成部１２３が行うインデクス生成処理Ｓ１１００を例示したフローチャートである。インデクス生成処理Ｓ１１００では、インデクス生成部１２３がデータ受付部１２１から随時受信したセンサデータそれを元に各種特徴量を算出し、時系列インデクスを生成し、インデクス書込部１２４へ渡す処理を行う。以下、図１１を用いて処理の流れを説明する。
【０１００】
インデクス生成部１２３は、データ受付部１２１からセンサデータを受信し、当該データに含まれるデータソース名を読み込む（Ｓ１１０１）。インデクス生成部１２３は、次に、インデクス生成テーブル１４２から、対応する属性名７１１の一覧を読み込み（Ｓ１１０２）、属性毎に特徴量算出用バッファをメモリ上に確保する（Ｓ１１０３）。特徴量算出用バッファとは、複数のセンサデータに対して各種特徴量を算出するための演算を行うために演算対象のセンサデータを一時的に格納するためのメモリ上の領域である。例えば、図６に示す例では受信した時系列データのデータソース名が“ガスエンジン１”の場合、４つの属性（“水温”、“温度”、“圧力”、“回転数”）が読み込まれ、４つのバッファ領域が確保される。
【０１０１】
インデクス生成部１２３は、全てのセンサデータを受信するまで、属性毎に時系列インデクスを作成するＳ１１０５〜Ｓ１１１７の処理を行う（Ｓ１１０４）。インデクス生成部１２３は、インデクス生成テーブル１４２から、各属性名に対応する分割時間幅７１２の一覧と特徴量算出関数７１３の一覧を読み込む（Ｓ１１０５）。図６に示す例では、属性名が“水温”の場合、レンジ幅一覧として“１時間”、“３０分間”、“１０分間”が読み込まれ、特徴量算出関数一覧とし“ＭＡＸ”、“ＭＩＮ”が読み込まれる。
【０１０２】
インデクス生成部１２３は、センサデータを随時、受信し各属性に対応するバッファ領域へ格納していき（Ｓ１１０６）、バッファ領域中の時間幅が分解時間幅の最大値を上回ったか否かを判定し（Ｓ１１０７）、バッファ領域中に溜まったセンサデータの集合、即ち時系列データの時間幅が分割時間幅一覧の中の最大値を上回った場合（Ｓ１１０７，Ｙｅｓ）、Ｓ１１０８以降を実施し、それ以外の場合（Ｓ１１０７，Ｎｏ）は、再びＳ１１０６に戻りデータを随時受信する。例えば、図６の場合、属性が“水温”のバッファ領域中の時系列データの時間幅が“１時間”を上回った場合、Ｓ１１０８以降を実施することになる。
【０１０３】
インデクス生成部１２３は、分割時間幅７１２のレンジ幅一覧の中から、小さい分割時間幅から順にＳ１１０９〜Ｓ１１１４の処理を行う（Ｓ１１０８）。すなわち、Ｓ１１０８以降では、バッファ領域中の時系列データに対して特徴量を算出し、インデクスデータ２２３を作成する処理を行う。
【０１０４】
図６の例であれば、属性が“水温”の場合、“１０分間”→“３０分間”→“１時間”の順に行う。これは、時系列インデクスノードを作る際、ノードポインタ２３５へ下位ノードのポインタを代入する必要があるので、下位の時系列インデクスノードから順次作成する必要があるからである。
【０１０５】
インデクス生成部１２３は、次のレンジ幅（分割時間幅）を取り出し（Ｓ１１０９）、バッファ中の時系列データを分割時間幅毎に分割し、それぞれの範囲において特徴量算出関数で指定された算出する（Ｓ１１１０）。先の例だと、バッファを“１０分間”毎の時系列データに分割して、各時系列データに対して“最大値”と“最小値”を算出する。算出後、時系列インデクスノードを作成するための前処理を行う。具体的には、時系列インデクスノードを作成して、当該ノードのＩＤ番号を割り振り、各時間帯における時系列データの“開始時刻”と“終了時刻”、開始時刻を示すセンサデータの“ＩＤ番号”、終了時刻を示すセンサデータの“ＩＤ番号”、Ｓ１１１０で算出した各種“特徴量”を代入する（Ｓ１１１１）。なお、本ノードは、Ｓ１１１０で分割した時間帯毎に行う。例えば、図６の例であれば、バッファ中の時間帯“１時間”を“１０分間”ごとに分割したので計６つのノードが作成されることになる。
【０１０６】
インデクス生成部１２３は、次に、処理対象のレンジ幅（分割時間幅）が、レンジ幅一覧の中の最小値であるか否かを判定し（Ｓ１１１２）、処理対象のレンジ幅が、レンジ幅一覧の中の最小値の場合（Ｓ１１１２，Ｙｅｓ）、即ち、時系列インデクスの最下位のレンジ幅の場合、Ｓ１１１１で作成した時系列インデクスノードのノードポインタ２３５へ“ＮＵＬＬ”を代入し（Ｓ１１１３）、最小値でない場合（Ｓ１１１２，Ｎｏ）、ノードポインタ２３５へ、同じレンジ幅に所属する、１つ下位のレンジ幅を持つ時系列インデクスノードのＩＤ番号を複数代入し（Ｓ１１１４）、Ｓ１１１５に進む。
【０１０７】
インデクス生成部１２３は、全ての分割時間幅に対してＳ１１０９〜Ｓ１１１４の処理が終わると、ループを終了し（Ｓ１１１５）、バッファをクリアする（Ｓ１１１６）。そして、インデクス生成部１２３は、インデクス書込処理を呼び出し（Ｓ１１１７）、データソース名と属性名、インデクスデータを渡し、以降、データ受付部１２１から終端データを受信するまで、Ｓ１１０５〜Ｓ１１１７を繰り返し実行する。全てのセンサデータを受信した場合にはループを終了し（Ｓ１１１８）、インデクス生成処理Ｓ１１００を終了する。
【０１０８】
なお、インデクス生成部１２３は、任意のタイミングで時系列データのインデクスを再構成することも可能である。この場合、例えばクライアントＰＣ５００からインデクス更新命令を受け取ったタイミングなどで、時系列インデクステーブル２２０に格納されている古いインデクスを削除し、時系列データテーブル２１０の時系列データを全て取り出し、そしてインデクス生成処理Ｓ１１００を行うことにより新しい時系列インデクスを再構成することができる。
【０１０９】
さらに、このインデクス再構成において、インデクス生成部１２３は、任意のタイミングで時系列インデクスにおける隣り合う時間帯の特徴量を結合することにより、複数の時間幅分の特徴量を算出し、当該時系列インデクスを再構成することも可能である。例えば、分割時間幅１０分間の隣り合うノードＡ（“最大値：１５”、“最小値：８”）、ノードＢ（“最大値：１８”、“最小値：１０”）がある場合、両者の特徴量を結合することで分割時間幅２０分間の新しいノードＣ（“最大値：１８”、“最小値：８”）を作成することができる。すなわち、インデクス生成部１２３は、階層構造を持つ時系列インデクスに対して隣り合う時間幅の各特徴量を任意のタイミングで結合することにより、複数の時間幅分の特徴量を算出し、複数の時間幅を新たな時間幅として時系列インデクスを再構成することができる。
【０１１０】
さらに、インデクス生成部１２３は、各ノードの分割時間幅を、インデクス生成テーブル１４２（図６参照）の分割時間幅７１２を使用せずに、センサ値の変動に応じて動的に決定することも可能である。例えば、特徴量算出時にセンサ値の変動が所定未満の水準の時間帯は時間幅を大きく取り、センサ値が所定以上の水準で変動した時間帯は時間幅を小さくするといった処理も本発明に適用可能である。
【０１１１】
図３５は、インデクス書込部１２４が行うインデクス書込処理Ｓ３５００を例示したフローチャートである。インデクス生成部１２３から受信した時系列インデクスを時系列インデクステーブル２２０へ書き込む処理を行う。以下、処理の流れを説明する。
【０１１２】
インデクス書込部１２４は、インデクス生成部１２３から、データソース名、属性名、およびインデクスツリーを受信する（Ｓ３５０１）。そして、時系列インデクステーブル２２０のデータソース名２１１と属性名２２２へ受信した値を書き込み、インデクスデータ２２３へインデクスツリーを書き込み（Ｓ３５０２）、インデクス書込処理Ｓ３５００を終了する。
【０１１３】
（データ検索部）
次にデータ検索部１３０について、図１２〜図１７、図３８、図３９を参照して説明する。適宜図１を参照する。
【０１１４】
図１２は、検索受付部１３１が行う検索処理Ｓ１２００を例示したフローチャートである。検索処理Ｓ１２００では、クライアントＰＣ５００から検索クエリ６００を受け付け、インデクス検索部１３３、データ読込部１３４、時系列解析部１３５の各処理を順次呼び出し、検索結果をクライアントＰＣ５００へ出力する。以下、図１２を用いて処理の流れを説明する。
【０１１５】
検索受付部１３１は、クライアントＰＣ５００から検索クエリ６００を受け付けると（Ｓ１２０１）、インデクス検索部１３３に当該検索クエリ６００を渡し、後記するインデクス検索処理（Ｓ１２０２）を呼び出し、出力として時系列データテーブル２１０から読み込み対象の時系列データのアドレス一覧を受け取る。
【０１１６】
検索受付部１３１は、次に、データ読込部１３４に対して後記する時系列データ読込処理を呼び出す（Ｓ１２０３）。データ読込処理では、出力結果として時系列解析対象となる時系列データが出力される。そして、時系列解析部１３５の時系列解析処理を呼び出し（Ｓ１２０４）、当該出力された時系列データを渡す。さらに、時系列解析処理により照合が行われ、検索結果を出力として受け取る、最後に、当該出力データをクライアントＰＣ５００へ返し（Ｓ１２０５）、検索処理Ｓ１２００を終了する。
【０１１７】
図１３は、インデクス検索部１３３が行うインデクス検索処理（時間幅絞込みサーチ）Ｓ１３００を例示したフローチャートである。インデクス検索処理Ｓ１３００は、検索クエリ６００から生成された評価式に適合する特徴量を有するノード群をインデクスデータ２２３から検索する。当該ノードが示す時間帯の系列データが検索クエリ６００に照合する可能性があるため、その系列データのポインタ情報をデータ読込部１３４へ渡す。
【０１１８】
先に述べたとおり、インデクスデータ２２３から検索、分割時間幅＞検索レンジ幅を満たしつつ、検索レンジ幅となるべく近い値を取るような分割時間幅を持つノードを抽出できれば、時系列データ読み込みのときに、極力無駄なデータ読込を防止することができる。このようなノードを抽出するための検索の方法として、本実施の形態では“時間幅絞込みサーチ”（図１７参照）と“時間幅固定サーチ”（図３９参照）を説明する。
【０１１９】
図１７は、インデクス検索部１３３が行うインデクス検索処理Ｓ１３００の流れを概念的に示した図である。図１７に示す時間幅絞込みサーチとは、深さ優先検索を用いて上位ノードから下位ノードへレンジ幅（分割時間幅）を絞り込みながら辿っていき、検索クエリ６００の検索レンジ幅６１０とインデクスレンジ幅の値が近い値を取った時点でのレンジ幅をデータ読み込み対象とする検索方法である。本方式は、各レンジが有する特徴量の性質として、ある時間幅Ａの特徴量が、同じ時間帯のそれよりも狭い範囲の時間幅Ｂの特徴量を含む、包含関係にある場合に有効な検索方法である。
【０１２０】
例えば、特徴量として“最大値”と“最小値”を組み合わせた系列データのセンサ値の“範囲”の場合、時間幅Ｂの範囲はそれより広い時間幅Ａの範囲に必ず包含される。例えば、時間幅が１時間の範囲が“１０〜１００”の場合、その時間帯に含まれる時間幅が３０分間の範囲は“１０〜１００”の範囲内に存在する。以後、説明を簡潔にするため、このような特徴量の性質を単に“包含可能”と記述することにする。
【０１２１】
時間幅絞込みサーチの説明に戻り、検索の際の特徴量判定に使用する特徴量が包含可能な場合、上位ノードに適合するノードはそれよりも下位のノードに適合する可能性があるため、下位ノードに移行して、即ち、時間幅を絞り込んで、下位ノードの特徴量をさらに適合判定していく。逆に、上位ノードに適合しないノードはそれよりも下位のノードには必ず適合しないという性質がある。例えば、上位レンジの範囲を“１０〜１００”、評価式として「“最小値＜１２０＜最大値”⇒適合」という場合、上位レンジの最大値は１２０よりも小さいので適合せず、下位レンジの最大値は上位レンジに包含されるためそれよりも小さくなるため、同様に適合しないことは明らかである。従って、上位レンジのノードに適合しない場合は、それより下位のノードに移行する必要はなく、無駄な適合処理を省略することもできる。
【０１２２】
ここで、図１７の具体例を交えて検索の流れを説明する。図１７では、分割時間幅として“１時間”、“３０分間”、“１５分間”の３階層の構造を持つ。評価式が「“ＭＩＮ  ＜７８＜ＭＡＸ”⇒適合」で、検索レンジ幅６１０が“２０分”の場合、検索の流れは、図１７に示すようになる。なお、図中の各ノードは説明を簡潔にするため、ＩＤ番号、時間帯、特徴量のみを記載している。
【０１２３】
まず、ノード“０００１”が評価式に適合するので、それより下位ノードの評価を行う。ノード“０００２”は適合しないため、それより下位ノード、即ち、ノード“０００４”と“０００５”は必ず適合しないためここでは判定処理は行わない。一方、ノード“０００３”は適合するため、それより下位ノードの“０００６”と“０００７”の判定を行う。結果としてノード“０００７”が適合するので、当該ノードが抽出される。
【０１２４】
次に、最上位ノードに戻り、ノード“０００８”の判定を行うが、ここでは適合しないのでこれより下位のノードの判定は行わない。以上により、判定処理を効率的に行うことができるので、時系列インデクス検索時の検索速度を向上することができる。
【０１２５】
以下、図１３に戻り、インデクス検索処理（時間幅絞り込みサーチ）Ｓ１３００の処理の流れを説明する。インデクス検索部１３３は、検索クエリ６００（図３参照）を検索受付部１３１から受け取り、当該検索クエリ６００の検索条件６４０に記述された検索条件式を取り出し（Ｓ１３０１）、評価式生成部１３２の評価式生成処理Ｓ１４００(図１４参照)を呼び出し、出力として評価式を受け取る（Ｓ１３０２）。
【０１２６】
インデクス検索部１３３は、次に、検索クエリ６００の検索対象範囲６３０に記述された検索対象範囲に含まれる最上位インデクスノード群をインデクスデータ２２３から検索し取り出す（Ｓ１３０３）。例えば、図７に示す例だと、最上位ノード群である２４０ａに属する時系列インデクスノード２３０ａ，２３０ｂ，・・・の中で、各ノードが有する時間帯２３２が指定された検索対象範囲に含まれる場合、読み込まれる。
【０１２７】
インデクス検索部１３３は、次に、現在処理対象のノード群全てに対してＳ１３０５〜Ｓ１３１３の処理を行う（Ｓ１３０４）。各ノードの特徴量が評価式に適合する場合、更に時間幅を絞り込んで再評価するため、下位ノードへシフトして再び特徴量評価を行う。インデクス検索部１３３は、最下位ノードに到達するか、対象ノードのレンジ幅（分割時間幅）が検索クエリ６００の検索レンジ幅６１０、即ち、検索レンジ幅よりも小さい値になるまで評価処理を繰り返す（Ｓ１３０５）。
【０１２８】
以下に、そのための処理をＳ１３０５以降に沿って説明する。インデクス検索部１３３は、処理対象のレンジ幅において、同一階層に属する全ての時系列インデクスノードに対してＳ１３０６〜Ｓ１３１２を実行する。まず、時間順にインデクスノードを１つ取り出し（Ｓ１３０６）、ノードが持つ特徴量が評価式に適合するか否か判定する（Ｓ１３０７）。適合しない場合（Ｓ１３０７，Ｎｏ）、Ｓ１３０６に戻り、次の時系列インデクスノードを取り出す。適合する場合（Ｓ１３０７，Ｙｅｓ）、当該ノードの下位ノードへのポインタが存在するか否かを判定する（Ｓ１３０８）。存在する場合（Ｓ１３０８，Ｙｅｓ）、下位ノード群を取り出し（Ｓ１３０９）、そのノード群の分割時間幅が検索レンジ幅６１０よりも小さいか否かを判定し（Ｓ１３１１）、小さい場合（Ｓ１３１１，Ｙｅｓ）、先ほど適合したインデクスノードが示す時系列データの開始ポインタと終了ポインタの組を出力用の特定のバッファ領域へ格納する（Ｓ１３１２）。
【０１２９】
Ｓ１３１１において、下位ノードのレンジ幅（分割時間幅）が検索レンジ幅６１０よりも大きいか等しい場合（Ｓ１３１１，Ｎｏ）、処理対象を下位ノード群にシフトし、Ｓ１３０４以降の処理を再び再帰実行する。最下位ノードに到達するか、処理対象ノードの分割時間幅＜検索レンジ幅を満たせばＳ１３０５のループを終了する（Ｓ１３１３）。さらに、処理対象ノードに対する全てのＳ１３０５〜Ｓ１３１３の処理が終了すると、Ｓ１３０４のループを終了する。そして、バッファ領域に保持されている時系列データの開始ポインタと終了ポインタの組の一覧を出力し（Ｓ１３１５）、インデクス検索処理Ｓ１３００を終了する。なお、本ポインタが、以降の時系列データテーブル２１０から読み込むデータ系列となる。この時系列データの開始・終了ポインタを“時系列データ区間アドレス”と呼ぶことにする。
【０１３０】
本処理では、時間分割幅＞検索レンジ幅６１０という条件を満たしつつ、時間分割幅と検索レンジ幅６１０がなるべく近い値を取るようなレンジを持つインデクスを抽出する処理に当たり、上位ノードから順番に遡る理由は、上位ノードの特徴量に評価式がマッチしない場合は、当該ノードの下位ノードに属する全てのノードの特徴量が必ずマッチしないという時系列データの特徴を活かしているため、無駄な適合処理を省略できるというメリットがある。
【０１３１】
次に、図３８、図３９を参照して時間幅固定サーチについて説明する。時間幅固定サーチとは、分割時間幅＞検索レンジ幅６１０を満たしつつ、分割時間幅と検索レンジ幅６１０がなるべく近い値を取るような分割時間幅を持つノード群のみを評価対象にする検索方法である。
【０１３２】
図３９は、インデクス検索部１３３が行うインデクス検索処理（時間幅固定サーチ）Ｓ１３５０（図３８参照）の流れを概念的に示した図である。本方式は、時間幅絞り込みサーチが有効に機能しない、即ち、評価に使用する特徴量が“包含可能でない”性質を持つ場合に使用する。具体的には、時間幅による絞り込みが有効に機能しない場合などがある。
【０１３３】
例えば、評価する特徴量として、平均値“ＡＶＧ”を使用し、評価式として「“ＡＶＧ＞６０”⇒適合」で、検索レンジ幅が“２０分”の場合とする場合、図３９に対して時間幅絞り込みサーチを適用すると、ノード“０００１”は適合しないが、その下位ノードであるノード“０００３”は適合するので、結局全件検索が必要となる。この場合、まず検索対象の分割時間幅、本例では、“３０分”のノードのみを検索対象とし、ノード“０００２”，“０００３”，“０００９”，“００１０”，…を順次検索する。
【０１３４】
なお、図３９における例では、同一の分割時間幅の各ノードを検索する際、時刻順にシーケンシャルに検索しているが、本発明はこれに限定されない。例えば特徴量の値ごとにＢツリー構造を持たせておき、Ｂツリーサーチを行うなども可能である。なお、Ｂツリー構造とは、ルートノード、ブランチノード、リーフノードに分かれた構造をいう。
【０１３５】
図３８は、インデクス検索部１３３が行うインデクス検索処理（時間幅固定サーチ）Ｓ１３５０を例示したフローチャートである。図３８を用いて時間幅固定サーチの処理の流れを説明する。
【０１３６】
インデクス検索部１３３は、検索クエリ６００を検索受付部１３１から受け取り、当該検索クエリ６００の検索条件６４０に記述された検索条件式を取り出し（Ｓ１３５１）、評価式生成部１３２の評価式生成処理Ｓ１４００(図１４参照）を呼び出し、出力として評価式を受け取る（Ｓ１３５２）。
【０１３７】
インデクス検索部１３３は、次に、分割時間幅＞検索レンジ幅６１０を満たし、その中で分割時間幅が最小の値を持つインデクスノード群を取り出し（Ｓ１３５３）、当該ノード群の中から検索クエリ６００の検索対象範囲６３０にマッチするノード群を取り出し（Ｓ１３５４）、取り出した全てのノードに対してＳ１３５６〜Ｓ１３５８の処理を実行する（Ｓ１３５５）。
【０１３８】
インデクス検索部１３３は、ノードを１つ取り出し（Ｓ１３５６）、ノードの特徴量が評価式に適合するか判定し（Ｓ１３５７）、適合しない場合（Ｓ１３５７，Ｎｏ）、Ｓ１３５６に戻る。適合する場合（Ｓ１３５７，Ｙｅｓ）、当該ノードが示す時系列データの開始ポインタと終了ポインタの組を特定のバッファ領域へ格納する（Ｓ１３５８）。Ｓ１３５４で取り出した全てのノードに対して処理が終了すると、Ｓ１３５５のループを終了し（Ｓ１３５９）、バッファ領域に存在する時系列データの開始ポインタ、終了ポインタの組の一覧を出力する（Ｓ１３６０）。
【０１３９】
なお、インデクス検索部１３３は、検索時に隣り合う時間幅の各特徴量を結合することにより、複数の分割時間幅分の特徴量を算出して、当該特徴量を評価式により判定し適合するデータ系列群の時間帯を特定することも可能である。
【０１４０】
例えば、分割時間幅が１０分間の隣り合うノードＡ（“最大値：１５”、“最小値：８”）、ノードＢ（“最大値：１８”、“最小値：１０”）がある場合、両者の特徴量を結合することで分割時間幅が２０分間の特徴量（“最大値：１８”、“最小値：８”）を動的に作成し、評価式により判定することができる。
【０１４１】
図１４は、評価式生成部１３２が行う評価式生成処理Ｓ１４００を例示したフローチャートである。評価式生成処理Ｓ１４００では、検索クエリ６００に記述された検索条件式、具体的には検索条件６４０に記述された式を元に評価式を生成する。以下、図１４を用いて処理の流れを説明する。
【０１４２】
評価式生成部１３２は、インデクス検索部１３３から検索クエリ６００の検索条件６４０に記述された検索条件式を受け付け（Ｓ１４０１）、評価式生成ルールテーブル１４３から当該検索式にマッチするルールを抽出する（Ｓ１４０２）。例えば、図３の例に示す検索条件式の場合、図８における、ルールＩＤ＝０１のルールが抽出される。抽出したルールから、対応する評価式を抽出し生成し（Ｓ１４０３）、評価式生成処理Ｓ１４００を終了する。
【０１４３】
図１５は、データ読込部１３４が行う時系列データ読込処理Ｓ１５００を例示したフローチャートである。時系列データ読込処理Ｓ１５００では、検索クエリ６００で照合する可能性のあるデータ系列を時系列データテーブル２１０（図５参照）から読み込む。以下、図１５を用いて処理の流れを説明する。
【０１４４】
データ読込部１３４は、検索受付部１３１から読み込み対象となる時系列データ区間ポインタ一覧を受け付ける（Ｓ１５０１）。先に説明したように、時系列データ区間ポインタは、時系列データテーブル２１０から抽出対象となる系列データの開始アドレスと終了アドレスの組から構成され、アドレスとしてはＩＤ２１１が含まれる。
【０１４５】
データ読込部１３４は、全ての時系列データ区間ポインタに対して、以下に説明するＳ１５０３〜Ｓ１５０５の処理を実行する（Ｓ１５０２）。時系列データ区間ポインタを１つ取り出し（Ｓ１５０３）、それに含まれる開始時刻ＩＤから終了時刻ＩＤまでのセンサデータを時系列データテーブル２１０から読み込み（Ｓ１５０４）、読み込んだ時系列データを検索受付部１３１へ出力する（Ｓ１５０５）。データ読込部１３４は、全ての時系列データ区間ポインタに対してＳ１５０３〜Ｓ１５０５の処理が終了すると、ループを終了し（Ｓ１５０６）、時系列データ読込処理Ｓ１５００を終了する。
【０１４６】
図１６は、時系列解析部１３５が行う時系列解析処理Ｓ１６００を例示したフローチャートである。時系列解析部１３５は、データ受付部１２１から検索クエリ６００を受け付けると（Ｓ１６０１）、解析用のバッファ領域をメモリ上に確保し（Ｓ１６０２）、全てのデータを受信するまでＳ１６０４〜Ｓ１６０９を実行する（Ｓ１６０３）。
【０１４７】
時系列解析部１３５は、まず、受信データを逐次バッファに格納し（Ｓ１６０４）、バッファ中の時系列データの時間帯が検索レンジ幅６１０を超えたか否かを判定し（Ｓ１６０５）、超えた場合（Ｓ１６０５，Ｙｅｓ）、バッファ中の最も古いデータを削除する（Ｓ１６０６）。超えない場合（Ｓ１６０５，Ｎｏ）、Ｓ１６０７以降を実行する。Ｓ１６０７ではバッファ中のセンサデータのセンサ値を検索条件６４０の評価式で評価し、その照合処理で、照合したか判定する（Ｓ１６０８）。照合した場合（Ｓ１６０８，Ｙｅｓ）、バッファ中のデータ系列をデータ受付部１２１へ出力し（Ｓ１６０９）、照合しなかった場合（Ｓ１６０８，Ｎｏ）、Ｓ１６１０に進む。全てのデータを受信すればＳ１６０３のループを終了し（Ｓ１６１０）、時系列解析処理Ｓ１６００を終了する。
【０１４８】
以下、本実施の形態についてまとめると、時系列データ管理装置１００は、検索対象の時系列データ３００を外部記憶装置２００に蓄積するデータ蓄積部１２０と、クライアントＰＣ５００から入力された検索クエリ６００に該当するデータ系列を、蓄積された時系列データ３００から検索するデータ検索部１３０とを有する。
【０１４９】
データ蓄積部１２０は、時系列データ３００を蓄積する際に、特定の時間幅毎（例えば、図７の分割時間幅７１２）にデータ系列の特徴量（例えば、図７の特徴量算出関数に示す特徴量）を算出するインデクス生成部１２３と、算出した時間幅毎のデータ系列の特徴量を時系列インデクステーブル２２０（時系列インデクス情報）として外部記憶装置２００へ書き込むインデクス書込部１２４と、時系列データ３００を時系列データテーブル２１０（時系列データ情報）として外部記憶装置２００へ書き込むデータ書込部１２２とを備える。
【０１５０】
データ検索部１３０は、時系列データ３００を検索する際に、検索クエリ６００に基づいて、時系列インデクス情報の各特徴量との適合度を判定するための評価式を生成する評価式生成部１３２と、評価式を用いて時系列インデクス情報に含まれる時間帯毎の特徴量を判定し、適合するデータ系列群の時間帯を特定するインデクス検索部１３３と、特定した時間帯に対応するデータ系列を時系列データ情報から抽出するデータ読込部１３４と、抽出されたデータ系列を検索クエリの検索条件と照合する時系列解析部１３５とを備える。
【０１５１】
時系列インデクス情報は、時系列データ３００の属性名毎に、複数の時系列インデクスから構成されるインデクス階層構造（例えば、インデクスデータ２２３）を有し、時系列インデクスは、時系列データ３００の開始時刻および終了時刻を含む時間帯２３２、時間帯の特徴量２３３、インデクス階層構造を構成する下位の時系列インデクスのノードポインタ２３５を含んでいる。
【０１５２】
［第２の実施の形態］
次に、本発明の第２の実施の形態を説明する。
図１８は、本発明の第２の実施の形態に係るシステムの全体構成を示した図である。ここでは第１の実施の形態のシステムの全体構成に加えて、データ圧縮部１２５とデータ解凍部１３６が追加されている。本実施の形態では、時系列データ３００を時系列データテーブル２１０へ格納する際、特定の時間幅毎にデータ系列を圧縮し格納する。また、検索時には、時系列データテーブル２１０から圧縮データを読み込み解凍することでデータ系列を取り出す。
【０１５３】
データ圧縮部１２５とデータ解凍部１３６に関連して、データ書込部１２２Ａ、インデクス生成部１２３Ａ、検索受付部１３１Ａ、インデクス検索部１３３Ａ、データ読込部１３４Ａの一部処理が変更されているので、後述する。前記以外の処理は、前記した第１の実施の形態と同様であるため、説明を省略する。なお、図１８に示す全体構成において、前記した第１の実施の形態と同様の構成要素は同じ符号を付して、説明を省略する。
【０１５４】
データ圧縮部１２５は、データ受付部１２１から加工済みのセンサデータを受け取り、圧縮データを生成する処理を行う。データ解凍部１３６は、データ読込部１３４Ａから時系列データの圧縮データ受け取り、解凍する。
【０１５５】
図１９は、圧縮データを有する時系列データテーブル２１０を例示した図である。時系列データテーブル２１０Ａは、ＩＤ２５１、データソース名２５２、属性名２５３、時間帯２５４、圧縮データ２５５から構成される。圧縮データ２５５の各行には、時間幅のデータ系列が圧縮されて格納される。ＩＤ２５１、データソース名２５２、属性名２５３は第１の実施の形態と同等であるため、説明を省略する。
【０１５６】
図１９に示す例では、時間帯２５４には、圧縮データに格納されているデータ系列の時間帯が記されており、１時間分のデータが圧縮データ２５５に格納されていることを示す。圧縮データ２５５は、時間帯２５４に記される時間帯のセンサデータが圧縮されたデータであり、例えばバイナリ形式として格納される。
【０１５７】
圧縮データ２５５は、複数の分割時間幅毎に、階層的に圧縮して格納することが可能である。例えば図に示す例ではデータ２６０ｃは個々のセンサデータに対して１０分間の時間幅単位で圧縮したデータであり、データ２６０ｂは同一時間帯に含まれるデータ２６０ｃの個々の圧縮データを纏めて圧縮したデータ、同様にデータ２６０ａは同一時間帯に含まれるデータ２６０ｂを纏めて圧縮したデータである。本実施の形態では、圧縮の方法としてはＺＩＰ（ジップ）を用いることとするが、本発明においては任意のアルゴリズムが適用可能である。
【０１５８】
センサデータを圧縮することで、時系列データテーブル２１０に含まれる容量を少なくできるというメリットの他に、１回のディスクＩ／Ｏで複数分のセンサデータを纏めて読み込めるため性能上有利というメリットもある。例えば、センサデータが１秒間間隔の場合、圧縮しない場合では１時間分のデータを読み込むのに３６００行分の読み込みが必要であるのに対して、圧縮した場合は１回の読み込みでよい。
【０１５９】
なお、本実施の形態では複数の分割時間幅単位で階層的に圧縮構造を持つが、任意の分割時間幅単位で圧縮したデータ系列単位で、階層構造を持たずに圧縮データ２５５に格納してもよい。
【０１６０】
図２０は、第２の実施の形態に係る時系列インデクステーブル２２０Ａおよび時系列インデクスノードのデータ構造を例示した図である。図２０（ａ）は、時系列インデクステーブル２２０Ａのデータ構造の一例を示し、図２０（ｂ）は、時系列インデクスノードのツリーを構成する各ノードの構造を示す。なお、図２０（ａ）に示す時系列インデクステーブル２２０Ａと、図２０（ｂ）に示す時系列インデクスノード２３０ＡのＩＤ２３１、開始時刻２３２ａ、終了時刻２３２ｂ、特徴量２３３、下位インデクスへのノードポインタ２３５は、第１の実施の形態と同様なので説明を省略する。本実施の形態の例では時系列データへのポインタ２３６として、当該ノードに対応するデータ系列を含む圧縮データのＩＤ２５１（図１９参照）が示される。
【０１６１】
図２１は、データ圧縮部１２５が行うデータ圧縮処理Ｓ２１００を例示したフローチャートである。データ圧縮部１２５は、データ受付部１２１から加工済みのセンサデータを受け取り、データソース名を読み込んで（Ｓ２１０１）、インデクス生成テーブル１４２（図６参照）から、対応する属性名７１１の一覧を読み込む（Ｓ２１０２）。属性毎に、圧縮データを作成するためのバッファをメモリ上に確保し（Ｓ２１０３）、全てのセンサデータを受信するまで属性毎にＳ２１０５〜Ｓ２１１３の処理を行う（Ｓ２１０４）。
【０１６２】
データ圧縮部１２５は、まず、インデクス生成テーブル１４２から、属性名に対応する分割時間幅７１２の一覧を読み込み（Ｓ２１０５）、各センサデータを順次受信しバッファ領域に格納する（Ｓ２１０６）。データ圧縮部１２５は、バッファ中のセンサデータの時間幅が分割時間幅の最大値を上回った否かを判定し（Ｓ２１０７）、上回った場合（Ｓ２１０７，Ｙｅｓ）、Ｓ２１０８以降の処理を行い、そうでない場合（Ｓ２１０７，Ｎｏ）、Ｓ２１０６の処理に戻る。例えば、図６のデータソース名が“ガスエンジン１”、属性名が“水温”の場合、バッファ中のセンサデータの時間幅が１時間に達するとＳ２１０８以降の処理を行う。
【０１６３】
データ圧縮部１２５は、次に、分割時間幅７１２の一覧の中から、小さい分割時間幅から順次Ｓ２１０９〜Ｓ２１１１の処理を行う。先の例であれば、１０分間⇒３０分間⇒１時間の順に実行する（Ｓ２１０８）。処理中の分割時間幅が最小の値であるか否かを判定し（Ｓ２１０９）、最小の値の場合（Ｓ２１０９，Ｙｅｓ）、バッファ中のセンサデータを分割時間幅ごとに纏めて圧縮し（Ｓ２１１０）、そうでない場合（Ｓ２１０９，Ｎｏ）、下位の分割時間幅で纏めた圧縮データを、分割時間幅に収まる単位で纏めてさらに圧縮する（Ｓ２１１１）。先の例であれば、１０分間単位で纏めた圧縮データ３つを３０分間単位でさらに纏めて圧縮する。全ての分割時間幅に対してＳ２１０９〜Ｓ２１１１の処理を行えば、Ｓ２１０８のループを終了する（Ｓ２１１２）。
【０１６４】
そして、データ圧縮部１２５は、圧縮データに一意のＩＤ番号を割り振り、当該ＩＤ番号と、圧縮データと、圧縮データの時間帯、データソース名、属性名をデータ書込部１２２へ渡し、バッファをクリアする（Ｓ２１１３）。全てのセンサデータに対してＳ２１０５〜Ｓ２１１３の処理を終了すれば、データ書込部１２２へ終端データを送りＳ２１０４のループを終了し（Ｓ２１１４）、データ圧縮処理Ｓ２１００を終了する。
【０１６５】
図２２は、データ書込部１２２Ａが行うデータ書込処理Ｓ２２００を例示したフローチャートである。データ書込部１２２Ａは、データ圧縮部１２５から全ての圧縮データを受信するまでＳ２２０２〜Ｓ２２０３を実行する（Ｓ２２０１）。データ圧縮部１２５から、圧縮データと、そのＩＤ番号、データソース名、属性名、時間帯をデータ圧縮部１２５から受信し（Ｓ２２０２）、時系列データテーブル２１０へ、Ｓ２２０２で受信した各データを書き込む（Ｓ２２０３）。そして、データ圧縮部１２５から終端データを受信した場合ループを終了し（Ｓ２２０４）、データ書込処理Ｓ２２００を終了する。
【０１６６】
図２３は、インデクス生成部１２３Ａが行うインデクス生成処理Ｓ１１００Ａを表すフローチャートである。本処理は、図１１に示す第１の実施の形態の処理におけるＳ１１１１がＳ２４０１とＳ２４０２に置き換わった以外は同じであるため、Ｓ２４０１とＳ２４０２のみ説明する。
【０１６７】
インデクス生成処理Ｓ１１００Ａでは、インデクスノードを作成する際、時系列データへのポインタ２３６に圧縮データのアドレスを代入する点が第１の実施の形態と異なる。ポインタ２３６（図２０（ｂ）参照）には、当該ノードが示す系列データが含まれる圧縮データのアドレス、つまり、時系列データテーブル２１０Ａ（図１９参照）の圧縮データ２５５に対応するＩＤ２５１が代入される。この場合、分割時間幅が異なるノードであっても同じアドレスが代入されることになる。例えば、図２０（ａ）に示す例では時系列インデクスノード２３０ａ，２３０ｃ，２３０ｄ，２３０ｇ，２３０ｈ，２３０ｉには同じアドレスが代入される。
【０１６８】
図２３の処理フローの説明に戻り、Ｓ２４０１では、インデクス生成部１２３Ａは、分割した時間帯ごとに時系列インデクスノードを作成し、ＩＤ番号を割り振り、“ＩＤ番号”と、各時間帯の“開始時”、“終了時刻”と、Ｓ１１１０で算出した各種“特徴量”とを代入する。
【０１６９】
インデクス生成部１２３Ａは、次に、当該ノードが示す圧縮データのアドレスを取得するため、時系列データテーブル２１０から、時間帯２５４がＳ２４０１で抽出した時間帯を含む行を取り出しそのＩＤ２５１を取り出して、時系列データのポインタ２３６へ代入する（Ｓ２４０２）。
【０１７０】
図２４は、検索受付部１３１が行う検索処理Ｓ１２００Ａを例示したフローチャートである。本処理は、図１２に示す第１の実施の形態の処理において、Ｓ２５０１の解凍処理呼び出しが追加されている。検索受付部１３１は、Ｓ１２０３の時系列データ読込処理では圧縮データが得られ、当該圧縮データを解凍し、検索受付部１３１Ａを介して時系列解析部１３５に渡す（Ｓ２５０１）。
【０１７１】
図２５は、インデクス検索部１３３が行うインデクス検索処理（時間幅固定サーチ）Ｓ１３５０Ａを例示したフローチャートである。第１の実施の形態の図３８と異なる点は、Ｓ１３５８における出力データとして時系列データ区間ポインタでなく、Ｓ１５０１において、ノードが示す時系列データ、換言すると圧縮データのポインタ２３６（図２０（ｂ）参照）と、開始時刻２３２ａ、終了時刻２３２ｂをバッファ領域に格納し、Ｓ１３０６に代わって、Ｓ１５０２において、バッファ領域に存在する時系列データのポインタ２３６、開始時刻２３２ａ、終了時刻２３２ｂの一覧を出力する。他の処理については説明を省略する。なお、時間幅絞込みサーチも同様である。
【０１７２】
図２６は、データ読込部１３４が行う時系列データ読込処理Ｓ２６００を例示したフローチャートである。第１の実施の形態と異なる点は、データ読み込みの際に、時系列データ区間ポインタではなく、時系列データポインタ、換言すると圧縮データのポインタを使用してデータを読み込む点である。
【０１７３】
データ読込部１３４は、読み込み対象の時系列データポインタ、開始時刻、終了時刻の一覧をインデクス検索部１３３から受け付けると（Ｓ２６０１）、全ての時系列データポインタに対して、Ｓ２６０３〜Ｓ２６０５の処理を実行する（Ｓ２６０２）。まず、次の時系列データポインタを取り出し（Ｓ２６０３）、当該ポインタを使用して時系列データテーブル２１０から、図１９に示す圧縮データ２５５と時間帯２５４を取り出す（Ｓ２６０４）。そして、読み込んだ圧縮データ２５５、時間帯２５４と、Ｓ２６０１で受け付けた開始時刻、終了時刻を検索受付部１３１へ出力する（Ｓ２６０５）。なお、圧縮データの時間帯に存在する、開始時刻〜終了時刻の系列データが、データ解凍部１３６によって解凍される。全ての時系列データポインタに対してＳ２６０３〜Ｓ２６０５の処理を実行すれば、Ｓ２６０２のループを終了し、時系列データ読込処理Ｓ２６００を終了する。
【０１７４】
図２７は、データ解凍部１３６のデータ解凍処理Ｓ２７００の例示したフローチャートである。データ解凍部１３６は、圧縮データ、当該圧縮データの時間帯、圧縮データから取り出す系列データの開始時刻、終了時刻の一覧を受け付け（Ｓ２７０１）、受け取った時間帯を元に、開始時刻〜終了時刻に相当する系列を特定し、解凍処理を行う（Ｓ２７０２）。なお、この場合は圧縮データが階層構造になっているため、センサデータを取り出すまで複数回解凍処理を行う場合もある。最後に、取り出した系列データを時系列解析部１３５へ出力し（Ｓ２７０３）、データ解凍処理Ｓ２７００を終了する。
【０１７５】
［第３の実施の形態］
次に、本発明の第３の実施の形態を説明する。
図２８は、本発明の第３の実施の形態に係るシステムの全体構成を例示した図である。ここで、クライアントＰＣ５００には、画面表示用のビューア８００が追加されている。なお、ビューア８００とは、データやファイルを表示・閲覧するためのソフトウェアである。
【０１７６】
本実施の形態では、時系列インデクスを、時系列検索を高速化するためのデータ系列の絞り込みに使用するのではなく、時系列インデクスに保持されている各特徴量をクライアントＰＣ５００のビューア８００へ出力するために使用する。
【０１７７】
時系列検索では出力結果をチャート表示し、結果を目視で確認しながら検索パタンを試行錯誤的に変更するという流れが一般的に行われる。特に、チャート表示では横軸を時間、縦軸をセンサ値でとった折れ線グラフで見るケースが多いが、出力データ量が多いと表示に時間がかかり、ユーザが結果を確認するまで長時間待たされる場合がある。場合によっては検索条件を絞り込まずに、まずは時系列データテーブル２１０に格納される全データを閲覧して傾向を把握するというケースもあり、その場合はより顕著に影響が現れる。データの全体の傾向を閲覧したい場合、出力結果の正確性よりも表示速度の高速性が求められる。
【０１７８】
本実施の形態では、ビューア８００でのグラフ表示において、表示速度を高速化するための出力タイミングを制御することが特徴であり、具体的には系列データの代表値である特徴量を、最初は広い時間幅毎の特徴量を表示し、徐々に時間幅を狭めて精細に表示していく。これにより、ユーザに長時間待たせることなく、データの傾向を素早く把握させることができる。
【０１７９】
インデクス検索部１３３Ｂは、検索受付部１３１Ｂから検索クエリ６００を、時系列インデクステーブル２２０の時系列インデクスの中から、特定の時間幅で分割した各時間帯の特徴量を検索受付部へ出力する。検索受付部１３１Ｂは当該出力データをビューア８００へ出力する。
【０１８０】
ビューア８００は、検索受付部１３１Ｂから出力されたデータをグラフ上に描画する。本実施の形態では、グラフとしてＸ軸を時刻、Ｙ軸をセンサ値として持つ２軸の線グラフを使用する。前記以外の処理は、第１の実施の形態と同様であるため、説明を省略する。
【０１８１】
図２９は、第３の実施の形態に係る検索受付部１３１Ｂが行う検索処理Ｓ２９００を例示したフローチャートである。図１２に示す第１の実施の形態においては、Ｓ１２０２において図１３に示すインデクス検索処理Ｓ１３００を実施していたが、図２９に示す第３の実施の形態においては、検索クエリ６００の受付後、Ｓ２９０２においてインデクス検索部１３３Ｂが図３０のインデクス検索処理Ｓ３０００を実施する。
【０１８２】
なお、本実施の形態では、Ｓ１２０３以降において特徴量を出力した後、更に正確なデータを出力するために時系列データを読込出力する例を示すが、時系列データを出力せずに特徴量のみを出力する事も可能である。この場合は、Ｓ１２０３以降の処理は省略される。また、特徴量を算出後、時系列データは時系列データテーブル２１０に格納する必要もなく、削除してもよい。
【０１８３】
図３０は、インデクス検索部１３３Ｂが行うインデクス検索処理Ｓ３０００を例示したフローチャートである。インデクス検索部１３３Ｂは、データ受付部１２１から検索クエリ６００を受け取り、検索クエリ６００の検索クエリの検索対象範囲６３０にマッチする最上位ノード群を時系列インデクスから取り出す（Ｓ３００１）。次に、検索クエリの６００から検索条件６４０を取り出し（Ｓ３００２）、最上位ノードから最下位ノードに達するまで次に示すＳ３００４〜Ｓ３００９の処理を実行する（Ｓ３００３）。
【０１８４】
インデクス検索部１３３Ｂは、Ｓ３００２で取り出した検索条件６４０が存在するか否かを判定し（Ｓ３００４）、存在する場合（Ｓ３００４，Ｙｅｓ）、即ち条件を指定した検索が行われる場合はＳ３００５、Ｓ３００６を実行し、存在しない場合（Ｓ３００４，Ｎｏ）、即ち条件を指定せず全件検索を指定した場合、Ｓ３００７を実行する。
【０１８５】
インデクス検索部１３３Ｂは、Ｓ３００５において条件式を元に、評価式生成処理Ｓ１４００(図１４参照)を呼び出し（Ｓ３００５）、評価式を受け取り、処理対象のノード群全てに対して評価式を適合し、適合するノード群を抽出する（Ｓ３００６）。Ｓ３００７においては、処理対象となる全てのノード群、即ち同一の分割時間幅を持つ全ノードが抽出される（Ｓ３００７）。
【０１８６】
そして、インデクス検索部１３３Ｂは、各ノードの特徴量と開始時刻、終了時刻を抽出し、データ受付部１２１へ出力する。ここで使用される特徴量としては、任意のものが使用できるが、本実施の形態では典型的なものとして、“平均（ＡＶＧ）”を使用するものとして説明する。平均値はその時間帯のデータ系列の大まかな特徴を説明するのに適しているからである。
【０１８７】
ここで、特定の時間帯における特徴量が全て出力されたことになり、次に詳細値を出力するために、インデクス検索部１３３Ｂは、１つ下位層のノード群を全て取り出し（Ｓ３００９）、再びＳ３００４以降を繰り返し実行する。最下位ノードに達し、全てのノードに対してＳ３００４〜Ｓ３００９の処理が終了すると、Ｓ３００３のループを終了し（Ｓ３０１０）、インデクス検索処理Ｓ３０００を終了する。
【０１８８】
図３１は、ビューア８００が行う描画処理Ｓ３１００を例示したフローチャートである。描画処理Ｓ３１００では、データ受付部１２１から受信した各時間帯の特徴量を、最初は広い時間幅で粗く表示し、徐々に狭い時間幅で再表示する。ビューア８００は、データ受付部１２１から全てのデータを受信するまでＳ３１０２〜Ｓ３１０５を実行する（Ｓ３１０１）。
【０１８９】
ビューア８００は、検索受付部１３１Ｂから各ノードの特徴量と開始時刻、終了時刻を抽出し（Ｓ３１０２）、既に同一時間帯に特徴量がプロットされ、描画されているか判定し（Ｓ３１０３）、即ち、上位時間幅の粗い描画が残っている場合（Ｓ３１０３，Ｙｅｓ）、当該プロットデータを削除する（Ｓ３１０４）。そして、Ｓ３１０２で抽出した開始時刻〜終了時刻を画面上のＸ軸にプロットし、その範囲内で特徴量、例えば平均値をＹ軸にプロットし描画する（Ｓ３１０５）。全てのデータを受信すると、Ｓ３１０２〜Ｓ３１０５の処理を終了しＳ３１０１のループを終了し（Ｓ３１０６）、描画処理Ｓ３１００を終了する。
【０１９０】
［第４の実施の形態］
次に、本発明の第４の実施の形態を説明する。
図３２は、本発明の第４の実施の形態に係るシステムの全体構成を例示した図である。本実施の形態においては、複数のクライアントＰＣ５００ｂ（５００ｂ１，…，５００ｂｎ）から時系列データの検索が行われる場合の例を示したものである。
【０１９１】
検索を実行するクライアントＰＣ５００ｂ（５００ｂ１，…，５００ｂｎ）の数が増加した場合、検索負荷の増大による性能劣化が懸念される。このため、検索を実行する装置を分散して配置することにより負荷の分散を行い、検索性能の劣化を防止することが本構成の狙いである。
【０１９２】
加えて、時系列データ３００の検索パタンはクライアントによって様々である。例えば、ある製品の販売実績データが蓄積されている場合、生産管理部門に属するクライアントＡは今後の生産計画を立てるため、直近数日の販売パタンを検索するが、経営部門に属するクライアントＢは今後の製品計画を立てるため、直近数ヶ月〜数年間の販売パタンを検索する。
【０１９３】
前記を考慮し、本実施の形態におけるシステムは、時系列データを蓄積し時系列データテーブル２１０を保持する１台の時系列データ管理装置１００ａ（第１の管理装置）と、時系列インデクステーブル２２０ｂ（２２０ｂ１，…２２０ｂｎ）を保持しクライアントＰＣからの検索要求に応じて検索を実行する複数台の時系列データ管理装置１００ｂ（１００ｂ１、…１００ｂｎ）（第２の管理装置）から構成され、各装置はネットワークインタフェース１０６（１０６ａ，１０６ｂ１，…，１０６ｎ）を介して、ネットワーク１０７間で通信可能に接続される。
【０１９４】
なお、検索用の時系列データ管理装置１００ｂには、それぞれ異なる検索パタンに適した時系列インデクステーブル２２０ｂ（２２０ｂ１、…２２０ｂｎ）が格納されることを想定するが、単純に負荷分散だけの目的で同一の時系列インデクステーブル２２０ｂを複数の装置が保持することも可能である。
【０１９５】
以下、本構成について説明する。時系列データ管理装置１００ａは時系列データを蓄積する装置であり、外部記憶装置２００ａ（第１の記憶装置）に時系列データテーブル２１０を有する。加えて、任意の時系列データ管理装置１００ｂの時系列インデクステーブル２２０ｂへ時系列インデクスを作成する処理を行う。具体的には、インデクス書込部１２４が、インデクス生成部１２３により生成された時系列インデクスを、他の管理装置の外部記憶装置へ格納する処理を行う。この際、インデクス生成テーブル１４４を参照して参照先装置を決定する。詳しくは後述するが、インデクス生成テーブル１４４は、第１の実施の形態におけるインデクス生成テーブル１４２の構成要素に加え、時系列インデクスの格納先装置アドレスが格納される。
【０１９６】
さらに、時系列データ管理装置１００ａは、検索用の時系列データ管理装置１００ｂが検索対象とする時系列データを集中管理し、時系列データ管理装置１００ｂからのデータ取得要求に応じて時系列データテーブル２１０からデータ系列を取り出し、時系列データ管理装置１００ｂへ出力する処理を行う。
【０１９７】
検索用の時系列データ管理装置１００ｂは、時系列データの検索を実行するための装置であり、外部記憶装置２００ｂ（２００ｂ１，…，２００ｂｎ）（第２の記憶装置）に時系列インデクステーブル２２０ｂを有する。各検索用の時系列データ管理装置１００ｂを利用するクライアントＰＣ５００ｂ（５００ｂ１、・・・５００ｂｎ）は、それぞれ異なる検索クエリ６００ｂ（６００ｂ１、…６００ｂｎ）を実行することが想定され、各装置には検索パタンに適した時系列インデクステーブル２２０ｂが格納される。データ検索部１３０ｂ（１３０ｂ１、…１３０ｂｎ）は、時系列インデクステーブル２２０ｂを参照することにより対象のデータ系列を絞り込んで抽出し、時系列解析を実行する。
【０１９８】
ここでは、第１の実施の形態における処理とは異なり、対象のデータ系列を絞り込んだ後、各々に接続されている記憶装置からデータ系列を読み込むのではなく、蓄積用の時系列データ管理装置１００ａが管理している時系列データテーブル２１０から、ネットワーク１０７を介して読み込む処理を行う。
【０１９９】
図３３は、インデクス生成テーブル１４４を例示したテーブル図である。インデクス生成テーブル１４４は、図６に示したインデクス生成テーブル１４２に対し、生成先装置アドレス７１４が付加されている。生成先装置アドレス７１４は、時系列インデクスの作成先を示す検索用のデータ管理装置の識別子であり、本実施の形態の例では時系列データ管理装置１００ｂ毎のＩＰアドレスを使用する。１つの時系列データの属性に対して、複数の異なる時系列インデクスを異なる時系列データ管理装置１００ｂに配置することも可能である。例えば図３３における例ではデータソース名が“ガスエンジン１”、属性名が“水温”の場合、アドレスが“１９２．１６８．１０．３”の時系列データ管理装置１００ｂと“１９２．１６８．１０．２”の時系列データ管理装置１００ｂには異なる分割時間幅および特徴量算出関数を持つ時系列インデクスが生成される。
【０２００】
また、１つの時系列データの属性に対して、同一の時系列インデクスを複数の時系列データ管理装置１００ｂ上に作成することも可能である。例えば、データソース名が“ガスエンジン１”、属性名が“圧力”の場合、アドレスが“１９２．１６８．１０．１”と“１９２．１６８．１０．２”の２つの時系列データ管理装置１００ｂに同一の時系列インデクスが生成される。前記以外に関するインデクス生成情報の構成要素は第１の実施の形態と同様であるので説明は省略する。
【０２０１】
図３４は、インデクス生成部１２３が行うインデクス生成処理Ｓ１１００Ｃを例示したフローチャートである。本処理は、第１の実施の形態の図１１に示すインデクス生成処理Ｓ１１００におけるＳ１１０５がＳ３４０５に、Ｓ１１１７がＳ３４１７に置き換わった以外は同じであるため、Ｓ３４０５およびＳ３４１７について説明する。
【０２０２】
インデクス生成部１２３は、インデクスノードを作成する際、時系列データの時系列インデクスの格納先装置を識別するため、インデクス生成テーブル１４４の生成先装置アドレス７１４を読み込む点が第１の実施の形態と異なる。Ｓ３４０５において、インデクス生成部１２３は、インデクス生成テーブル１４４から、属性名に対応する分割時間幅７１２の一覧と特徴量算出関数７１３の一覧、生成先装置アドレス７１４を読み込む。そして、インデクス生成部１２３がインデクス書込処理Ｓ３６００(図３６参照)を呼び出す際、データソース名と属性名、インデクスデータに加え、先に取得した生成先装置アドレスも渡す（Ｓ３４１７）。
【０２０３】
図３６は、インデクス書込部１２４が行うインデクス書込処理Ｓ３６００を例示したフローチャートである。本処理では、インデクス書込部１２４が時系列インデクステーブル２２０ｂへ時系列インデクスを書き込む処理を行う。以下、処理の流れを説明する。
【０２０４】
インデクス書込部１２４は、インデクス生成部１２３からデータソース名と属性名、インデクスツリー、生成先装置アドレスを受信する（Ｓ３６０１）。そして、生成先装置アドレスを示す時系列データ管理装置１００ｂに接続される外部記憶装置２００ｂの時系列インデクステーブル２２０ｂのデータソース名２１１と属性名２２２へ受信した値を書き込み、インデクスデータ２２３へインデクスツリーを書き込む（Ｓ３６０２）。
【０２０５】
なお、本実施の形態ではネットワークを経由して指定されたアドレスへデータを書き込む手段として例えばＪＤＢＣおよびＯＤＢＣ（Open Database Connectivity）などの共通インタフェース（Application Programming Interface；ＡＰＩ）や、その他のＤＢＭＳ（DataBase Management System）固有のＡＰＩとして構成されるデータベース接続ＡＰＩを実装し呼び出すことで実現するものとする。
【０２０６】
図３７は、データ読込部１３４ｂが行う時系列データ読込処理Ｓ１５００Ｃを例示したフローチャートである。本処理は、第１の実施の形態の図１５に示す時系列データ読込処理Ｓ１５００のＳ１５０４がＳ３７０４に置き換わった以外は同じであるため、Ｓ３７０４の処理を説明し、他の処理の説明を省略する。
【０２０７】
データ読込部１３４ｂが行う時系列データ読込処理Ｓ１５００Ｃは、自身の時系列データ管理装置１００ｂに接続される外部記憶装置２００ｂから時系列データを読み込むのではなく、データ読込部１３４ｂは、蓄積用の時系列データ管理装置１００ａに接続される外部記憶装置２００ａからネットワーク１０７を介して時系列データ（センサデータ）を読み込む処理を行う（Ｓ３７０４）。
【０２０８】
なお、本実施の形態ではデータを読み込む際、データ読込部１３４ｂは、蓄積用の時系列データ管理装置１００ａのＩＰアドレスを指定してデータを読み込み、その具体的な手段としては、先の時系列インデクス書込処理と同様、ＪＤＢＣおよびＯＤＢＣなどの共通インタフェースや、その他のＤＢＭＳ固有のＡＰＩとして構成されるデータベース接続ＡＰＩを実装し呼び出すことで実現するものとする。
【０２０９】
以上、本実施の形態の基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【０２１０】
本実施の形態によれば、ディスク上に格納された時系列データに対して時系列解析を行う際、指定された検索パタンに照合する可能性のある時系列データを絞り込んでディスクから読み込むことで、ディスク読み込み時に発生するディスクＩ／Ｏの多発を防止でき、検索にかかる時間を短縮することができる。
【符号の説明】
【０２１１】
１００    時系列データ管理装置
１００ａ    時系列データ管理装置（第１の管理装置）
１００ｂ    時系列データ管理装置（第２の管理装置）
１０１    プロセッサ
１０２    メモリ
１０３    入力装置
１０４    出力装置
１０５    ディスクインタフェース
１１０    時系列データ管理プログラム
１２０    データ蓄積部
１２１    データ受付部
１２２    データ書込部
１２３    インデクス生成部
１２４    インデクス書込部
１３０    データ検索部
１３１    検索受付部
１３２    評価式生成部
１３３    インデクス検索部
１３４    データ読込部
１３５    時系列解析部
１４０    設定情報格納領域
１４１    スキーマ定義テーブル（スキーマ定義情報）
１４２    インデクス生成テーブル（インデクス生成情報）
１４３    評価式生成ルールテーブル（評価式生成ルール情報）
２００    外部記憶装置
２００ａ    外部記憶装置（第１の記憶装置）
２００ｂ    外部記憶装置（第２の記憶装置）
２１０    時系列データテーブル（時系列データ情報）
２２０    時系列インデクステーブル（時系列インデクス情報）
３００    時系列データ
４００    管理者ＰＣ
５００    クライアントＰＣ（クライアント）
６００    検索クエリ
６１０    検索レンジ幅（select_range句）
６２０    検索項目（select_items句）
６３０    検索対象範囲（where_timerange句）
６４０    検索条件（where_condition句）
【図１】
0005503737.tif 000002
【図２】
0005503737.tif 000003
【図３】
0005503737.tif 000004
【図４】
0005503737.tif 000005
【図５】
0005503737.tif 000006
【図６】
0005503737.tif 000007
【図７】
0005503737.tif 000008
【図８】
0005503737.tif 000009
【図９】
0005503737.tif 000010
【図１０】
0005503737.tif 000011
【図１１】
0005503737.tif 000012
【図１２】
0005503737.tif 000013
【図１３】
0005503737.tif 000014
【図１４】
0005503737.tif 000015
【図１５】
0005503737.tif 000016
【図１６】
0005503737.tif 000017
【図１７】
0005503737.tif 000018
【図１８】
0005503737.tif 000019
【図１９】
0005503737.tif 000020
【図２０】
0005503737.tif 000021
【図２１】
0005503737.tif 000022
【図２２】
0005503737.tif 000023
【図２３】
0005503737.tif 000024
【図２４】
0005503737.tif 000025
【図２５】
0005503737.tif 000026
【図２６】
0005503737.tif 000027
【図２７】
0005503737.tif 000028
【図２８】
0005503737.tif 000029
【図２９】
0005503737.tif 000030
【図３０】
0005503737.tif 000031
【図３１】
0005503737.tif 000032
【図３２】
0005503737.tif 000033
【図３３】
0005503737.tif 000034
【図３４】
0005503737.tif 000035
【図３５】
0005503737.tif 000036
【図３６】
0005503737.tif 000037
【図３７】
0005503737.tif 000038
【図３８】
0005503737.tif 000039
【図３９】
0005503737.tif 000040