(57)【要約】  デバイスから送出されたストリームデータを分散して蓄積する複数のストレージノードのそれぞれからデータの発生した時刻が十分近いデータ要素を取得できるようにすること。分散ストレージ装置に含まれる複数のストレージノードは、デバイスから出力されたストリームデータを蓄積するデータ記憶部と、他のストレージノードとの間で同期したタイムフレームを生成するとともに、データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける第１のタイムフレーム生成部と、クライアント端末からのアクセス要求に基づいて、データ記憶部に蓄積されたストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択するデータ選択部と、データ選択部によって選択されたデータ要素をクライアント端末に送信するデータ送信部と、を有する。
2014051071.tif 000002
【特許請求の範囲】
【請求項１】
複数のストレージノードを備え、
前記複数のストレージノードは、
デバイスから出力されたストリームデータを蓄積するデータ記憶部と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける第１のタイムフレーム生成部と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択するデータ選択部と、
前記データ選択部によって選択されたデータ要素を前記クライアント端末に送信するデータ送信部と、を有する、分散ストレージ装置。
【請求項２】
前記データ選択部は、前記選択したデータ要素に関連付けられたタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項１に記載の分散ストレージ装置。
【請求項３】
前記データ選択部は、前記クライアント端末からのアクセス要求に対して他のストレージノードが選択したデータ要素に関連付けられたタイムフレームと同期したタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項１または２に記載の分散ストレージ装置。
【請求項４】
前記データ選択部は、前記クライアント端末からアクセス要求を受けた時点のタイムフレームから所定の数だけ以前のタイムフレームに関連付けられたデータ要素を選択する、請求項１ないし３のいずれか１項に記載の分散ストレージ装置。
【請求項５】
前記データ選択部は、前記所定のタイムフレームに含まれる最新のデータ要素を選択する、請求項１ないし４のいずれか１項に記載の分散ストレージ装置。
【請求項６】
前記アクセス要求は、前記クライアント端末を識別する識別子を含む、請求項１ないし５のいずれか１項に記載の分散ストレージ装置。
【請求項７】
タイムフレームを更新する要求を生成するノード間同期部を備え、
前記第１のタイムフレーム生成部は、前記ノード間同期部が生成した要求に応じてタイムフレームを生成する、請求項１ないし６のいずれか１項に記載の分散ストレージ装置。
【請求項８】
前記複数のストレージノードのデータ記憶部に蓄積されたストリームデータに対するインデックスを蓄積するインデックス記憶部と、
前記複数のストレージノードとの間で同期したタイムフレームを生成するとともに、前記インデックス記憶部に蓄積されたインデックスをいずれかのタイムフレームに関連付ける第２のタイムフレーム生成部と、
前記複数のストレージノードのいずれかのストレージノードから転送された前記アクセス要求に基づいて、前記インデックス記憶部に蓄積されたインデックスの中から所定のタイムフレームに関連付けられたインデックスを選択し、選択したインデックスを前記いずれかのストレージノードに送信するインデックス検索部と、を有するインデックスサーバをさらに備え、
前記複数のストレージノードは、
前記データ記憶部に蓄積されたストリームデータを前記インデックスサーバに送信するデータ更新部と、
クライアント端末からのアクセス要求を前記インデックス検索部に転送するデータ検索部と、をさらに有する、請求項１ないし７のいずれか１項に記載の分散ストレージ装置。
【請求項９】
前記データ選択部は、前記インデックスサーバに転送したクライアント端末からのアクセス要求に対して前記インデックス検索部により選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する自ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項８に記載の分散ストレージ装置。
【請求項１０】
前記データ選択部は、他のストレージノードにより前記インデックスサーバに転送されたクライアント端末からのアクセス要求に対して前記インデックス検索部により選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する自ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項８または９に記載の分散ストレージ装置。
【請求項１１】
分散ストレージ装置に含まれる複数のストレージノードのうちの１のストレージノードであって、
デバイスから出力されたストリームデータを蓄積するデータ記憶部と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける第１のタイムフレーム生成部と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択するデータ選択部と、
前記データ選択部によって選択されたデータ要素を前記クライアント端末に送信するデータ送信部と、を備える、ストレージノード。
【請求項１２】
前記データ選択部は、前記選択したデータ要素に関連付けられたタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項１１に記載のストレージノード。
【請求項１３】
前記データ選択部は、前記クライアント端末からのアクセス要求に対して他のストレージノードが選択したデータ要素に関連付けられたタイムフレームと同期したタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項１１または１２に記載のストレージノード。
【請求項１４】
前記分散ストレージ装置は、タイムフレームを更新する要求を生成するノード間同期部を備え、
前記第１のタイムフレーム生成部は、前記ノード間同期部が生成した要求に応じてタイムフレームを生成する、請求項１１ないし１３のいずれか１項に記載のストレージノード。
【請求項１５】
前記分散ストレージ装置は、前記複数のストレージノードのデータ記憶部に蓄積されたストリームデータに対するインデックスを蓄積するインデックス記憶部と、
前記複数のストレージノードとの間で同期したタイムフレームを生成するとともに、前記インデックス記憶部に蓄積されたインデックスをいずれかのタイムフレームに関連付ける第２のタイムフレーム生成部と、
前記複数のストレージノードのいずれかのストレージから転送された前記アクセス要求に基づいて、前記インデックス記憶部に蓄積されたインデックスの中から所定のタイムフレームに関連付けられたインデックスを選択し、選択したインデックスを前記いずれかのストレージノードに送信するインデックス検索部と、を有するインデックスサーバをさらに備え、
前記ストレージノードは、
前記データ記憶部に蓄積されたストリームデータを前記インデックスサーバに送信するデータ更新部と、
クライアント端末からのアクセス要求を前記インデックス検索部に転送するデータ検索部と、をさらに有する、請求項１１ないし１４のいずれか１項に記載のストレージノード。
【請求項１６】
前記データ選択部は、前記インデックスサーバに転送したクライアント端末からのアクセス要求に対して前記インデックス検索部により選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する前記ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項１５に記載のストレージノード。
【請求項１７】
前記データ選択部は、他のストレージノードにより前記インデックスサーバに転送されたクライアント端末からのアクセス要求に対して前記インデックス検索部により選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する前記ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項１５または１６に記載のストレージノード。
【請求項１８】
分散ストレージ装置に含まれる複数のストレージノードのうちの１のストレージノードが、デバイスから出力されたストリームデータをデータ記憶部に蓄積する工程と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける工程と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択する工程と、
選択したデータ要素を前記クライアント端末に送信する工程と、を含む、データ提供方法。
【請求項１９】
前記ストレージノードが、前記選択したデータ要素に関連付けられたタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項１８に記載のデータ提供方法。
【請求項２０】
前記ストレージノードが、前記クライアント端末からのアクセス要求に対して他のストレージノードが選択したデータ要素に関連付けられたタイムフレームと同期したタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項１８または１９に記載のデータ提供方法。
【請求項２１】
前記ストレージノードが、前記データ記憶部に蓄積されたストリームデータをインデックスサーバに送信する工程と、
前記クライアント端末からのアクセス要求を前記インデックスサーバに転送する工程と、
前記インデックスサーバが、前記複数のストレージノードの記憶部に蓄積されたストリームデータに対するインデックスをインデックス記憶部に蓄積する工程と、
前記複数のストレージノードとの間で同期したタイムフレームを生成するとともに、前記インデックス記憶部に蓄積されたインデックスをいずれかのタイムフレームに関連付ける工程と、
前記複数のストレージノードのいずれかのストレージノードから転送された前記クライアント端末からのアクセス要求に基づいて、前記インデックス記憶部に蓄積されたインデックスの中から所定のタイムフレームに関連付けられたインデックスを選択し、選択したインデックスを前記いずれかのストレージノードに送信する工程と、を含む、請求項１８ないし２０のいずれか１項に記載のデータ提供方法。
【請求項２２】
前記ストレージノードは、前記インデックスサーバに転送した前記クライアント端末からのアクセス要求に対して前記インデックスサーバにより選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する自ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項２１に記載のデータ提供方法。
【請求項２３】
前記ストレージノードは、他のストレージノードにより前記インデックスサーバに転送された前記クライアント端末からのアクセス要求に対して前記インデックスサーバにより選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する前記ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する、請求項２１または２２に記載のデータ提供方法。
【請求項２４】
分散ストレージ装置に含まれるストレージノードに設けられたコンピュータに対して、デバイスから出力されたストリームデータをデータ記憶部に蓄積する処理と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける処理と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択する処理と、
選択したデータ要素を前記クライアント端末に送信する処理と、を実行させる、プログラム。
【請求項２５】
前記選択したデータ要素に関連付けられたタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する処理を、前記コンピュータに実行させる、請求項２４に記載のプログラム。
【請求項２６】
前記クライアント端末からのアクセス要求に対して他のストレージノードが選択したデータ要素に関連付けられたタイムフレームと同期したタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する処理を、前記コンピュータに実行させる、請求項２４または２５に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２０１２−２１７８５２号（２０１２年９月２８日出願）に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、分散ストレージ装置、ストレージノード、データ提供方法およびプログラムに関し、特に、サイバー・フィジカル・システム（ＣＰＳ：Cyber Physical System）においてストリームデータを分散して蓄積するとともに、蓄積したストリームデータを解析処理に対して提供する分散ストレージ装置、ストレージノード、データ提供方法およびプログラムに関する。
【背景技術】
【０００２】
時々刻々と得られる多量のデータ（ストリームデータ）をリアルタイムに分析または解析し、ビジネスに役立つ知見を得るデータ処理システムはサイバー・フィジカル・システム（ＣＰＳ）等と呼ばれ、そのニーズが高まってきている。【０００３】
このようなデータ処理システムの構成の一つとして、ストリームデータをまずストレージ装置（データストア）に格納し、格納されたデータを別のコンピュータによって解析する構成が考えられる。データを蓄積することで、センサーデバイス側のバッファメモリをより早く解放することができる。また、データを蓄積することで、解析を行う複数のコンピュータがデータを使うこともできる。【０００４】
ストレージ装置は、車両、携帯端末、気象観測装置等のセンサないしデバイスから、車両の走行状態、位置、携帯端末のユーザの位置、気象データ等のストリームデータを取得して蓄積するとともに、蓄積したストリームデータを、解析を行うコンピュータに提供する。解析を行うコンピュータは、ストレージ装置に蓄積されたストリームデータを、所定の分析シナリオに応じて解析処理することで分析結果を生成する。解析を行うコンピュータによる処理の一例として、ＣＥＰ（Complex Event Processing）やMapReduce処理等がある。【０００５】
例えば、交通情報の監視システムにおいては、各車両に搭載されたセンサによって検知された各車両の速度等のストリームデータをストレージ装置に蓄積するとともに、解析を行うコンピュータによって、ストレージ装置に蓄積された直近の各車両の位置と速度に基づいて、車の将来の位置を計算し、各車両の将来の位置を突き合わせることで、渋滞や事故等の発生の有無を検出することが可能となる。【０００６】
蓄積すべきデータ量が増大した場合におけるシステムのスケーラビリティを考慮して、ストレージ装置は分散データストア構成に基づいて実現されることが考えられる。図７は、分散データストア構成に基づく分散ストレージ装置１４０の構成を一例として示す図である。図７を参照すると、分散ストレージ装置１４０は、ストレージ間ネットワーク１３０を介して互いに接続された複数のストレージノード１１０ａ〜１１０ｎを備えている。ストレージノード１１０ａ〜１１０ｎは、それぞれ、記憶媒体を有するとともにストレージ間ネットワーク１３０に接続可能な計算機を有する。また、データストアの制御機能は、複数のストレージノード１１０ａ〜１１０ｎによる分散処理によって実現することができる。【０００７】
関連技術として、非特許文献１には、ストレージにおいて静止点イメージを作成するスナップショット（snapshot）が記載されている。また、非特許文献２には、データベースにおいて、あるクライアントには最初のアクセス(BEGIN)前の一貫した静止イメージを送信する技術が記載されている。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】K. M. Chandy and L. Lamport, "Distributed Snapshots: Determining Global States of Distributed Systems," ACM Transactions on Computer Systems, Vol.3, No. 1, February 1985. pp. 63-75.
【非特許文献２】A. Fekete, et al., "Making Snapshot Isolation Serializable," ACM Transactions on Database Systems, Vol. 30, No. 2, June 2005, pp. 492-528.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記の非特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明者らによってなされたものである。【００１０】
複数のセンサによって取得されたセンサデータを分散して蓄積する複数のストレージノード（ノード）（図７）から、同期のとれた最新のデータを取得しようとすると、次の問題が生じる。【００１１】
一般に、ストリームデータは、一意の主キー（primary key)と１または２以上のメタデータ（metadata1, metadata2, …）を含んで格納される。例えば、主キーkeyに加えて２個のメタデータname1, name2の値を含むストリームデータは、以下の構成を有する。【００１２】
{key: hogehoge, name1:value1, name2: value2}【００１３】
図８は、関連技術に係る分散ストレージ装置において主キーに基づいてストリームデータにアクセスしたときの問題点について説明するための図である。【００１４】
図８を参照すると、ストレージノード１１０ａは、センサから送出されたストリームデータＡを蓄積する。ここで、ストリームデータＡは、データ要素Ａ１、Ａ２、…から成る。同様に、ストレージノード１１０ｂ、１１０ｃ、１１０ｄは、それぞれ、センサから送出されたストリームデータＢ（データ要素Ｂ１、Ｂ２、…）、ストリームデータＣ（データ要素Ｃ１、Ｃ２、…）、ストリームデータＤ（データ要素Ｄ１、Ｄ２、…）を蓄積する。【００１５】
ここで、ストレージノード１１０ａ〜１１０ｄに分散して蓄積された全センサの最新のデータ要素を主キーに基づいて取得する、というアクセスを考える。ここでは、時刻ｔ１にアクセスを開始したとする。このとき、データ要素Ｄ８を読み出したクライアント端末に対して、データ要素Ｄ８と一貫した（すなわち、データの発生した時刻が、その後の処理で利用される精度を考えたとき十分近い）データ要素Ｃ８、Ｂ８、Ａ８を提供するようにしたい。しかしながら、図８の破線の矢印で示すように、クライアント端末が全データ要素を読み出すのに時間を要すると、一貫してないデータ要素Ｄ８、Ｃ１０、Ｂ１１、Ａ１２が読み出されてしまう。【００１６】
すなわち、図８に示したケースでは、アクセス開始時刻ｔ１の直後におけるデータ要素Ｄ８、Ｃ８、Ｂ８、Ａ８を取得しようとした場合において、破線の矢印で示すようなアクセス時間を要するときには、分散ストレージ装置からはデータ要素Ｄ８、Ｃ１０、Ｂ１１、Ａ１２が得られ、所望のデータ要素が得られないという問題がある。【００１７】
かかる問題を解消するために、各ストレージノードにデータが蓄積される都度、複数のストレージノード間で同期を取ることが考えられる。しかし、ストレージノードの数が増大した場合、ストレージノード間の通信の負荷が大きいため、同期処理がボトルネックとなり、分散ストレージ装置の性能低下を招くおそれがある。【００１８】
図８に示した例においては、「primary key＝xxx」というアクセス要求に基づいてストリームデータが選択される。一方、ストリームデータを選択する際、主キーではなく、「name=aaaのメタデータのvalue=bbb」等のように、データの内容に基づいてデータを選択したい場合がある。ストリームデータは、主キーを基準として、例えば、分散ハッシュテーブル（ＤＨＴ：Distributed Hash Table）等の方式で複数のストレージノードに分散して蓄積されている。このとき、上述のようにデータの内容に基づくサーチ（メタデータサーチ）を行うと、すべてのデータのサーチを行う必要が生じる。また、データの内容を特定するだけでなく、データの範囲を与える複数のデータを取得する場合もある。したがって、高速なデータ検索を実現するにはインデックスサーバを設ける必要がある。【００１９】
図９は、関連技術に係る分散ストレージ装置においてメタデータを用いてアクセスしたときの問題点について説明するための図である。図９を参照すると、ストレージノード１１０ａ〜１１０ｄは、それぞれ、センサから送出されたストリームデータＡ〜Ｄを蓄積する。ストリームデータＡ〜Ｄは、それぞれ、データ要素Ａ１、Ａ２、…、データ要素Ｂ１、Ｂ２、…、データ要素Ｃ１、Ｃ２、…、データ要素Ｄ１、Ｄ２、…を含む。また、インデックスサーバ１２０は、ストレージノード１１０ａ〜１１０ｃに蓄積されたストリームデータＡ〜Ｃに対するインデックスを蓄積する。【００２０】
インデックスサーバ１２０においてインデックスを生成するには時間を要するため、図９に示した分散ストレージ装置においては、ストレージノード１１０ａ〜１１０ｃと、インデックスサーバ１２０との間における一貫性も問題になる。すなわち、図９に示した分散ストレージ装置においては、データ要素Ａ８、Ｂ８、Ｃ８を取得したい場合に、インデックスの更新遅延、および、ストレージノードへのアクセスの遅延により、データ要素Ａ１２、Ｂ１３、Ｃ１４が読み出され、所望のデータ要素が得られないという問題が生じ得る。【００２１】
なお、上記の非特許文献１に記載された分散スナップショットは処理の負荷が高いため、上述の問題を解消するために適用することは困難である。また、非特許文献２に記載されたトランザクション処理（Snapshot Isolation, Serializable Snapshot Isolation)も、分散制御の処理の負荷が高いため、同様に実現は困難である。【００２２】
そこで、デバイスから送出されたストリームデータを分散して蓄積する複数のストレージノードのそれぞれからデータの発生した時刻が十分近いデータ要素を高速に取得できるようにすることが要望される。本発明の目的は、かかる要望に寄与する分散ストレージ装置、ストレージノード、データ提供方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００２３】
本発明の第１の視点に係る分散ストレージ装置は、
複数のストレージノードを備え、
前記複数のストレージノードは、
デバイスから出力されたストリームデータを蓄積するデータ記憶部と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける第１のタイムフレーム生成部と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択するデータ選択部と、
前記データ選択部によって選択されたデータ要素を前記クライアント端末に送信するデータ送信部と、を有する。【００２４】
本発明の第２の視点に係るストレージノードは、
分散ストレージ装置に含まれる複数のストレージノードのうちの１のストレージノードであって、
デバイスから出力されたストリームデータを蓄積するデータ記憶部と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける第１のタイムフレーム生成部と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択するデータ選択部と、
前記データ選択部によって選択されたデータ要素を前記クライアント端末に送信するデータ送信部と、を備える。【００２５】
本発明の第３の視点に係るデータ提供方法は、
分散ストレージ装置に含まれる複数のストレージノードのうちの１のストレージノードが、デバイスから出力されたストリームデータをデータ記憶部に蓄積する工程と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける工程と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択する工程と、
選択したデータ要素を前記クライアント端末に送信する工程と、を含む。【００２６】
本発明の第４の視点に係るプログラムは、
分散ストレージ装置に含まれるストレージノードに設けられたコンピュータに対して、デバイスから出力されたストリームデータをデータ記憶部に蓄積する処理と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれるデータ要素をいずれかのタイムフレームに関連付ける処理と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択する処理と、
選択したデータ要素を前記クライアント端末に送信する処理と、を実行させる。【００２７】
なお、プログラムは、非トランジエントなコンピュータ読み取り可能な記録媒体（non-transitory computer-readable storage medium）に記録されたプログラム製品として提供することができる。
【発明の効果】
【００２８】
本発明に係る分散ストレージ装置、ストレージノード、データ提供方法およびプログラムによると、デバイスから送出されたストリームデータを分散して蓄積する複数のストレージノードのそれぞれからデータの発生した時刻が十分近いデータ要素を高速に取得することができる。
【図面の簡単な説明】
【００２９】
【図１】第１の実施形態に係る分散ストレージ装置の構成を一例として示すブロック図である。
【図２】第１の実施形態に係る分散ストレージ装置の各ストレージノードがタイムフレームを生成する動作を一例として示す図である。
【図３】第１の実施形態に係る分散ストレージ装置の各ストレージノードに蓄積されたストリームデータとタイムフレームとの関係を例示する図である。
【図４】第２の実施形態に係る分散ストレージ装置の構成を一例として示すブロック図である。
【図５】第２の実施形態に係る分散ストレージ装置の各ストレージノードおよびインデックスサーバがタイムフレームを生成する動作を一例として示す図である。
【図６】第２の実施形態に係る分散ストレージ装置の各ストレージノードおよびインデックスサーバに蓄積されたストリームデータおよびインデックスとタイムフレームとの関係例示する図である。
【図７】分散ストレージ装置の構成を一例として示す図である。
【図８】関連技術に係る分散ストレージ装置において主キーを用いてアクセスしたときの問題点について説明するための図である。
【図９】関連技術に係る分散ストレージ装置においてメタデータを用いてアクセスしたときの問題点について説明するための図である。
【発明を実施するための形態】
【００３０】
はじめに、一実施形態の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００３１】
図１を参照すると、分散ストレージ装置（４０）は、複数のストレージノード（１０ａ〜１０ｎ）を備えている。ストレージノード（１０ａ〜１０ｎ）は、それぞれ、デバイスから出力されたストリームデータを蓄積するデータ記憶部（１４）と、他のストレージノードとの間で同期したタイムフレームを生成するとともに、データ記憶部（１４）に蓄積されたストリームデータに含まれる各データ要素をいずれかのタイムフレーム（すなわち、期間、時間枠）に関連付けるタイムフレーム生成部（１３）と、クライアント端末（５０）からのアクセス要求に基づいて、データ記憶部（１４）に蓄積されたストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択するデータ選択部（１２）と、データ選択部（１２）によって選択されたデータ要素をクライアント端末（５０）に送信するデータ送信部（１１）と、を有する。
【００３２】
ここで、分散ストレージ装置（４０）は、デバイスから出力されたストリームデータを直接受け取る代わりに、一度別のコンピュータが当該ストリームデータを受け取り、当該コンピュータから転送されたストリームデータを分散ストレージ装置が受け取るようにしてもよい。
【００３３】
クライアント端末（５０）は、ストレージノード（１０ａ〜１０ｎ）とは別個のコンピュータやその上で動作するソフトウェア・インスタンス（プロセス、スレッド、ファイバ等）としてもよい。また、クライアント端末（５０）は、ストレージノード（１０ａ〜１０ｎ）や分散ストレージ装置（４０）を構成するその他の装置上で動作するソフトウェア・インスタンスとしてもよい。また、１つ以上の計算機上で動作する複数のソフトウェアを、仮想的に１つのクライアント端末（５０）とみなしてもよい。
【００３４】
データ選択部（１２）は、すでに選択したデータ要素（例えば、図３のＡ６）に関連付けられたタイムフレーム（ｆａ１）に関連付けられたデータ要素（Ａ６）を、クライアント端末（５０）からの以後のアクセス要求に対するデータ要素として選択する。また、ストレージノード（１０ｂ）のデータ選択部（非図示）は、クライアント端末（５０）からのアクセス要求に対して他のストレージノード（例えば、１０ａ）が選択したデータ要素（例えば、Ａ６）に関連付けられたタイムフレーム（ｆａ１）と同期したタイムフレーム（図２のｆｂ１）に関連付けられたデータ要素（例えば、図３のＢ７）を、クライアント端末（５０）からの以後のアクセス要求に対するデータ要素として選択する。
【００３５】
かかる分散ストレージ装置（４０）によると、デバイスから送出されたストリームデータを分散して蓄積する複数のストレージノード（１０ａ〜１０ｎ）のそれぞれから同期のとれたデータ要素（例えば、図３のＡ６、Ｂ７）を取得することが可能となる。
【００３６】
図１を参照すると、分散ストレージ装置（４０）は、タイムフレームを更新する要求を生成するノード間同期部（３０）を備えていてもよい。タイムフレーム生成部（１３）は、ノード間同期部（３０）が生成したタイムフレーム更新要求を受信（受理）するタイミングごとにタイムフレームを生成する。このとき、ストレージノード（１０ａ〜１０ｎ）間で、実時間としては多少の誤差を含み得るものの、論理的に同期のとれたタイムフレームが生成される。例えば、図２においては、論理的に同期のとれたタイムフレームの組（ｆａ１、ｆｂ１）、（ｆａ２、ｆｂ２）、（ｆａ３、ｆｂ３）が得られる。
【００３７】
図４を参照すると、分散ストレージ装置（４０）は、さらに、インデックスサーバ（２０）を備えていることが好ましい。インデックスサーバ（２０）は、複数のストレージノード（１０ａ〜１０ｎ）のそれぞれのデータ記憶部（１４）に蓄積されたストリームデータに対するインデックスを蓄積するインデックス記憶部（２３）と、複数のストレージノード（１０ａ〜１０ｎ）との間で同期したタイムフレームを生成するとともに、インデックス記憶部（２３）に蓄積されたインデックスをいずれかのタイムフレームに関連付けるタイムフレーム生成部（２５）と、複数のストレージノード（１０ａ〜１０ｎ）のいずれかから転送されたアクセス要求に基づいて、インデックス記憶部（２３）に蓄積されたインデックスの中から所定のタイムフレームに関連付けられたインデックスを選択し、選択したインデックスを該いずれかのストレージノードに送信するインデックス検索部（２１）と、を有する。
【００３８】
図６を参照すると、インデックスサーバ（２０）のインデックス記憶部（２３）は、新しいデータがストレージノード（１０ａ〜１０ｎ）に到達した後に更新される。このとき、ストレージノードにデータが到達するタイムフレーム（例えば、図６のｆａ１、ｆｂ１）と、当該データがインデックスサーバで検索可能となるタイムフレーム（ｆｉ３）との間のタイムフレームの差が一定（図６においては２）となるよう設計されている。
【００３９】
例えば、図５においては、論理的に同期のとれたタイムフレームの組（ｆａ１、ｆｂ１、ｆｉ１）、（ｆａ２、ｆｂ２、ｆｉ２）、（ｆａ３、ｆｂ３、ｆｉ３）が得られる。また、図６においては、インデックスサーバ（２０）におけるタイムフレーム（ｆｉ３）は、タイムフレーム２つ分だけずれた、ストレージノード（１０ａ、１０ｂ）におけるタイムフレーム（ｆａ１、ｆｂ１）に対応している。
【００４０】
また、複数のストレージノード（１０ａ〜１０ｎ）は、それぞれ、データ記憶部（１４）に蓄積されたストリームデータをインデックスサーバ（２０）に送信するデータ更新部（１６）と、クライアント端末（５０）からのアクセス要求をインデックス検索部（２１）に転送するデータ検索部（１７）と、をさらに有する。
【００４１】
データ選択部（１２）は、インデックスサーバ（２０）に転送したクライアント端末（５０）からのアクセス要求に対してインデックス検索部（２１）により選択されたインデックス（例えば、図６のデータ要素Ａ１〜Ａ６、Ｂ１〜Ｂ７に対するインデックス）に関連付けられたインデックスサーバ（２０）上のタイムフレーム（図６のｆｉ３）に対応する自ストレージノード（１０ａ）上のタイムフレーム（図６のｆａ１）に関連付けられたデータ要素（例えば、図６のＡ６）を、クライアント端末（５０）からの以後のアクセス要求に対するデータ要素として選択する。また、ストレージノード（１０ｂ）のデータ選択部（非図示）は、他のストレージノード（例えば、１０ａ）によりインデックスサーバ（２０）に転送されたクライアント端末（５０）からのアクセス要求に対してインデックス検索部（２１）により選択されたインデックス（図６のデータ要素Ａ１〜Ａ６、Ｂ１〜Ｂ７に対するインデックス）に関連付けられたインデックスサーバ（２０）上のタイムフレーム（図６のｆｉ３）に対応する自ストレージノード（１０ｂ）上のタイムフレーム（図６のｆｂ１）に関連付けられたデータ要素（例えば、図６のＢ７）を、クライアント端末（５０）からの以後のアクセス要求に対するデータ要素として選択する。
【００４２】
かかる分散ストレージ装置（４０）によると、デバイスから送出されたストリームデータを分散して蓄積する複数のストレージノード（１０ａ〜１０ｎ）およびストレージノード（１０ａ〜１０ｎ）に蓄積されたストリームデータに対するインデックスを蓄積するインデックスサーバ（２０）のそれぞれから、一貫性のあるデータ要素とインデックス（例えば、図６のデータ要素Ａ６、Ｂ７と、データ要素Ａ１〜Ａ６、Ｂ１〜Ｂ７のインデックス）を取得することが可能となる。
【００４３】
（実施形態１）
第１の実施形態に係る分散ストレージ装置について、図面を参照して詳細に説明する。図１は、本実施形態に係る分散ストレージ装置の構成を一例として示すブロック図である。図１を参照すると、分散ストレージ装置４０は、複数のストレージノード１０ａ〜１０ｎを備えている。また、分散ストレージ装置４０は、ノード間同期部３０を備えていてもよい。ストレージノード１０ａ〜１０ｎは、それぞれ、データ送信部１１、データ選択部１２、タイムフレーム生成部１３、データ記憶部１４およびタイムフレーム記憶部１５を有する。なお、図１においては、ストレージノード１０ａについてのみ構成要素を示した。ストレージノード１０ｂ〜１０ｎについては、ストレージノード１０ａと同様の構成を有することから図示を省略した。
【００４４】
クライアント端末５０は、データアクセス部５１を用いて、分散ストレージ装置４０から所望のデータを取得する。
【００４５】
データアクセス部５１は、分散ストレージ装置４０に対してクライアント識別子と、所望のストリームデータを示すデータキー（主キー）を含むアクセス要求を送信し、対応するストリームデータに含まれるデータ要素を取得する。
【００４６】
データ送信部１１は、データアクセス部５１からアクセス要求を受け取り、データ選択部１２を用いて送信すべきデータを特定し、ストリームデータの中から該当するデータ要素を取り出し、データアクセス部５１に返信する。
【００４７】
データ選択部１２は、クライアント識別子に基づいて、該当するクライアントに対して返答すべきタイムフレームを特定し、データキーとタイムフレームからどのデータ要素を送信すべきか選択する。返答すべきタイムフレームは、クライアント端末５０からの最初のアクセスであれば、最新のタイムフレームからｋ（予め定められた数、例えば１）個前のタイムフレームとしてもよい。また、送信すべきデータ要素は、かかるタイムフレーム中のストリームデータに含まれる所定の（例えば、最新の）データ要素としてもよい。
【００４８】
タイムフレーム生成部１３は、複数のストレージノード１０ａ〜１０ｎ間で同期したタイムフレームを生成する。タイムフレーム生成部１３は、他のストレージノードが生成するタイムフレームと同期したタイムフレームを生成するために、ノード間同期部３０を用いるようにしてもよい。タイムフレーム生成部１３は、複数のストレージノードの間で一貫したタイムフレームを更新し、格納されたデータ要素のそれぞれをいずれかのタイムフレームと関連付ける。タイムフレーム生成部１３は、かかる関連付けを示す「タイムフレーム情報」をタイムフレーム記憶部１５に格納してもよい。
【００４９】
データ記憶部１４は、センサ等によって生成されたストリームデータを蓄積する。
【００５０】
タイムフレーム記憶部１５は、データ記憶部１４に蓄積されたストリームデータに含まれるデータ要素のそれぞれがいずれのタイムフレームに関連付けられているかを示す情報を「タイムフレーム情報」として記憶する。
【００５１】
ノード間同期部３０は、複数のストレージノード１０ａ〜１０ｎの間で一貫したタイムフレームを生成するために、タイムフレームを更新する要求を生成する。なお、既存技術である分散同期アルゴリズムや分散合意アルゴリズム（例えば、PAXOS等）を用いて通信を行うことで、タイムフレームを更新するようにしてもよい。また、原子時計等の十分精度の高い時計をストレージノード１０ａ〜１０ｎのそれぞれに設け、通信を行うことなく個々のストレージノードがタイムフレームを決定するようにしてもよい。また、ノード間同期部３０は、ストレージノード１０ａ〜１０ｎのそれぞれに備わっていてもよいし、別個の計算機として実現してもよい。
【００５２】
図２および図３は、本実施形態に係る分散ストレージ装置（図１）の動作を一例として示す図である。図２は、分散ストレージ装置４０の各ストレージノードがタイムフレームを生成する動作を一例として示す図である。一方、図３は、分散ストレージ装置の各ストレージノードに蓄積されたストリームデータとタイムフレームとの関係を例示する図である。なお、本実施形態では、ストレージノード１０ａ、１０ｂ間で完全な同期を行う代わりに、ストレージノード１０ａ、１０ｂ間において離散時間単位で同期を行い、バージョニングを行うものとする。
【００５３】
図２および図３を参照すると、分散ストレージ装置４０は、２つのストレージノード１０ａ、１０ｂを備えている。ストレージノード１０ａ、１０ｂは、それぞれ、デバイス（例えば、センサ）から出力されたストリームデータを蓄積する。ストレージノード１０ａは、データ要素Ａ１、Ａ２、…から成るストリームデータＡを蓄積する。同様に、ストレージノード１０ｂは、データ要素Ｂ１、Ｂ２、…から成るストリームデータＢを蓄積する。
【００５４】
ストレージノード１０ａ、１０ｂは、それぞれ、他のストレージノードとの間で（少なくとも論理的に）同期したタイムフレームを生成するとともに、蓄積したストリームデータに含まれる各データ要素をいずれかのタイムフレームに関連付ける。図２においては、ストレージノード１０ａは、タイムフレームｆａ１〜ｆａ３を生成する。一方、ストレージノード１０ｂは、タイムフレームｆｂ１〜ｆｂ３を生成する。このとき、ストレージノード１０ａと１０ｂとの間で、タイムフレームｆａ１とｆｂ１、タイムフレームｆａ２とｆｂ２、タイムフレームｆａ３とｆｂ３が、それぞれ同期している。
【００５５】
図３を参照すると、一例として、ストレージノード１０ａは、ストリームデータＡに含まれるデータ要素のうちの、データ要素Ａ１〜Ａ６、データ要素Ａ７〜Ａ１１およびデータ要素Ａ１２〜Ａ１５を、それぞれ、タイムフレームｆａ１、ｆａ２およびｆａ３に関連付けるものとする。一方、ストレージノード１０ｂは、ストリームデータＢに含まれるデータ要素のうちの、データ要素Ｂ１〜Ｂ７、データ要素Ｂ８〜Ｂ１２およびデータ要素Ｂ１３〜Ｂ１６を、それぞれ、タイムフレームｆｂ１、ｆｂ２およびｆｂ３に関連付けるものとする。
【００５６】
ここで、時刻ｔ１において、クライアント端末５０がストレージノード１０ａにアクセスしたとする。このとき、ストレージノード１０ａは、蓄積したストリームデータＡのうちの所定のタイムフレームに関連付けられたデータ要素を選択する。一例として、ストレージノード１０ａは、クライアント端末５０からアクセス要求を受けた時点のタイムフレームから所定の数だけ以前のタイムフレームに関連付けられたデータ要素を選択するようにしてもよい。また、ストレージノード１０ａは、当該タイムフレームに含まれる最新のデータ要素を選択するようにしてもよい。例えば、所定の数が１である場合、ストレージノード１０ａは、タイムフレームｆａ１に関連付けられたデータ要素のうちの最新のデータ要素Ａ６を選択する。さらに、ストレージノード１０ａは、選択したデータ要素Ａ６をクライアント端末５０に送信する。
【００５７】
次に、時刻ｔ２において、同一のクライアント端末５０がストレージノード１０ｂにアクセスしたとする。このとき、ストレージノード１０ｂは、クライアント端末５０からのアクセス要求に対してストレージノード１０ａが選択したデータ要素Ａ６に関連付けられたタイムフレームｆａ１と同期したタイムフレーム（すなわち、タイムフレームｆｂ１）に関連付けられたデータ要素を、クライアント端末５０からのアクセス要求に対するデータ要素として選択する。また、ストレージノード１０ｂは、当該タイムフレームｆｂ１に含まれる最新のデータ要素を選択するようにしてもよい。このとき、ストレージノード１０ｂは、データ要素Ｂ７を選択するとともに、選択したデータ要素Ｂ７をクライアント端末５０に送信する。
【００５８】
かかる分散ストレージ装置によると、デバイスから送出されたストリームデータを分散して蓄積する複数のストレージノードのそれぞれから同期のとれたデータ要素（上記の例においては、データ要素Ａ６、Ｂ７）を取得することが可能となる。
【００５９】
また、時刻ｔ２において、クライアント端末５０とは異なるクライアント端末５０ｂ（非図示）がストレージノード１０ｂにアクセスしたとする。このとき、ストレージノード１０ｂは、クライアント端末５０ｂからのアクセス要求に対してタイムフレームｆｂ２に関連付けられたデータ要素を、クライアント端末５０ｂからのアクセス要求に対するデータ要素として選択する。また、ストレージノード１０ｂは、当該タイムフレームｆｂ２に含まれる最新のデータ要素を選択するようにしてもよい。このとき、ストレージノード１０ｂは、データ要素Ｂ７を選択するとともに、選択したデータ要素Ｂ７をクライアント端末５０ｂに送信する。
【００６０】
かかる分散ストレージ装置によると、デバイスから送出されたストリームデータを分散して蓄積する複数のストレージノードのそれぞれから同期のとれたデータ要素（上記の例においては、データ要素Ａ６、Ｂ７）を取得することが可能となる。
【００６１】
（実施形態２）
第２の実施形態に係る分散ストレージ装置について、図面を参照して詳細に説明する。図４は、本実施形態に係る分散ストレージ装置の構成を一例として示すブロック図である。図４を参照すると、分散ストレージ装置４０は、複数のストレージノード１０ａ〜１０ｎおよびインデックスサーバ２０を備えている。また、分散ストレージ装置４０は、ノード間同期部３０を備えていてもよい。
【００６２】
ストレージノード１０ａ〜１０ｎは、それぞれ、第１の実施形態に係る分散ストレージ装置（図１）におけるストレージノードと同様に、データ送信部１１、データ選択部１２、タイムフレーム生成部１３、データ記憶部１４およびタイムフレーム記憶部１５を有し、さらに、データ更新部１６およびデータ検索部１７を有する。
【００６３】
インデックスサーバ２０は、インデックス検索部２１、インデックス更新部２２、インデックス記憶部２３、インデックスタイムフレーム記憶部２４、および、タイムフレーム生成部２５を有する。
【００６４】
データ更新部１６は、センサ等が取得したストリームデータを分散ストレージ装置４０に送信するデバイスからデータを受信し、ストレージノードのデータ記憶部１４にストリームデータを格納するとともに、インデックスサーバ２０のインデックス更新部２２にデータを転送する。
【００６５】
データ検索部１７は、クライアント端末５０のデータアクセス部５１からデータ検索クエリを含むアクセス要求を受ける。データ検索部１７は、アクセス要求をインデックスサーバ２０に転送し、該当するデータを表す情報を取得する。該当するデータを表す情報は、例えば、主キーのリストでもよい。また、該当するデータを表す情報は、データを格納した記憶装置のある記憶領域を表すアドレスと領域サイズの組であってもよい。ただし、該当するデータを表す情報は、これらに限定されない。
【００６６】
インデックスサーバ２０は、分散ストレージ装置４０の格納データに対してデータの内容に従ったクエリと、発行元クライアント情報から該当するデータを検索する。インデックスサーバ２０は、分散ストレージ装置４０に含まれるいずれかのストレージノード上に実装されていてもよいし、複数ストレージノードの分散協調によって実現されるようにしてもよい。また、インデックスサーバ２０は、別個の１つ以上の計算機で実現されるようにしてもよい。
【００６７】
インデックス検索部２１は、インデックスデータとインデックスタイムフレーム情報に基づいて、データ検索クエリに該当し、クライアント端末５０に返すべきデータを表す情報を生成し、データ検索部１７に返答する。クライアント端末５０からの最初のアクセスの場合には、返すべきデータはｎ（予め定められた数）個前のタイムフレームの情報でクエリに合致するものとしてもよい。一方、２度目以降のアクセスの場合には、クライアント端末５０に対応するタイムフレームの情報でクエリに合致するものとしてもよい。
【００６８】
インデックス更新部２２は、 データ更新部１６から得たデータが高速に検索できるように、インデックスデータをインデックス記憶部２３に登録する。インデックス更新部２２は、新しいデータがストレージノードに到達した後更新される。このとき、ストレージノードにデータが到達したタイムフレームｆ１と当該データがインデックスサーバで検索可能となるタイムフレームｆ２との間のタイムフレーム数が一定となるよう設計されている。一例として、すべてのデータに対するインデックスの再構築が３タイムフレーム内に終了するよう設計することができる。また、他の例として、最近更新されたデータだけを格納するインデックスと、それ以前のデータのインデックスの少なくとも２つのインデックスを作成し、これらのインデックスを並行に走査して最寄りのデータを探す構成を用いることで、最近のデータをより短い保証された時間内に検索可能とすることができる。さらに、最近更新されたデータのみについてはインデックスを作成せず全走査により検索し、一方、古いデータについてのみインデックスにより検索することで、最近のデータをより短い保証された時間内に検索可能とすることができる。なお、データ構造は、これらに限定されない。
【００６９】
ここで、インデックスデータは、クエリが高速に処理できるようなデータ構造でデータを保持するものとする。例えば、B+-tree、ハッシュテーブル、R-tree、ビットマップインデックス、Trie等のデータ構造を用いることができる。ただし、インデックスデータのデータ構造は、これらに限定されない。
【００７０】
インデックスタイムフレーム記憶部２４は、インデックスタイムフレーム情報を保持する。ここで、インデックスタイムフレーム情報は、格納された「インデックスデータ」のそれぞれがいずれのタイムフレームと関連付けられているかを示す情報である。また、インデックスタイムフレーム記憶部２４は、インデックスサーバのタイムフレームがストレージサーバのどのタイムフレームと関連付けられているかを示す情報をさらに含んでもよい。
【００７１】
タイムフレーム生成部２５は、ノード間同期部３０を用い、複数のストレージノード１０ａ〜１０ｎとの間で一貫したタイムフレーム更新要求に応じてタイムフレームを更新し、格納された「データ」のそれぞれがいずれのタイムフレームと関連付けられるかを示す「インデックスタイムフレーム情報」を更新する。
【００７２】
図５および図６は、本実施形態に係る分散ストレージ装置（図４）の動作を一例として示す図である。図５は、分散ストレージ装置４０の各ストレージノードがタイムフレームを生成する動作を一例として示す図である。一方、図６は、分散ストレージ装置の各ストレージノードに蓄積されたストリームデータとタイムフレームとの関係を例示する図である。本実施形態では、第１の実施形態と同様に、ストレージノード１０ａ、１０ｂ間において離散時間単位で同期を行い、バージョニングを行う。また、インデックスサーバ２０はストレージノード１０ａ、１０ｂに蓄積されたストリームデータＡ、Ｂに対するインデックスを生成する。
【００７３】
図５を参照すると、分散ストレージ装置４０は、２つのストレージノード１０ａ、１０ｂを備えている。ストレージノード１０ａ、１０ｂは、それぞれ、デバイス（例えば、センサ）から出力されたストリームデータを蓄積する。ストレージノード１０ａは、データ要素Ａ１、Ａ２、…を含むストリームデータＡを蓄積する。一方、ストレージノード１０ｂは、データ要素Ｂ１、Ｂ２、…を含むストリームデータＢを蓄積する。インデックスサーバ２０は、ストレージノード１０ａ、１０ｂに蓄積されたストリームデータに対するインデックスを生成して保持する。
【００７４】
ストレージノード１０ａ、１０ｂおよびインデックスサーバ２０は、それぞれ、他のノードとの間で同期したタイムフレームを生成するとともに、蓄積したストリームデータに含まれる各データ要素をいずれかのタイムフレームに関連付ける。図５においては、ストレージノード１０ａは、タイムフレームｆａ１〜ｆａ３を生成する。一方、ストレージノード１０ｂは、タイムフレームｆｂ１〜ｆｂ３を生成する。また、インデックスサーバ２０は、タイムフレームｆｉ１〜ｆｉ３を生成する。このとき、ストレージノード１０ａ、１０ｂとインデックスサーバ２０との間で、タイムフレームｆａ１とｆｂ１とｆｉ１、タイムフレームｆａ２とｆｂ２とｆｉ２、タイムフレームｆａ３とｆｂ３とｆｉ３が、それぞれ（少なくとも論理的に）同期している。
【００７５】
図６を参照すると、一例として、ストレージノード１０ａは、ストリームデータＡに含まれるデータ要素のうちの、データ要素Ａ１〜Ａ６、データ要素Ａ７〜Ａ１１およびデータ要素Ａ１２〜Ａ１５を、それぞれ、タイムフレームｆａ１、ｆａ２およびｆａ３に関連付けるものとする。一方、ストレージノード１０ｂは、ストリームデータＢに含まれるデータ要素のうちの、データ要素Ｂ１〜Ｂ７、データ要素Ｂ８〜Ｂ１２およびデータ要素Ｂ１３〜Ｂ１６を、それぞれ、タイムフレームｆｂ１、ｆｂ２およびｆｂ３に関連付けるものとする。また、インデックスサーバ２０は、タイムフレームｆａ１、ｆｂ１に関連付けられたデータ要素Ａ１〜Ａ６、Ｂ１〜Ｂ７に対するインデックスをタイムフレームｆｉ２において構築し、構築したインデックスをタイムフレームｆｉ３以降において参照可能とする。このとき、インデックスサーバ２０上のタイムフレームｆｉ３は、タイムフレームｆａ１、ｆｂ１に対応する。この場合、インデックスサーバ２０とストレージノード１０ａ、１０ｂとの間で互いに対応するタイムフレームは、タイムフレーム数２つ分だけずれている。なお、タイムフレーム数のずれは２つに限定されるものではない。
【００７６】
ここで、時刻ｔ１において、クライアント端末５０がデータ検索クエリを含むアクセス要求をストレージノード１０ａに送出し、ストレージノード１０ａはアクセス要求をインデックスサーバ２０に転送したとする。インデックスサーバ２０は、所定のタイムフレームに関連付けられたインデックスデータを選択する。一例として、インデックスサーバ２０は、クライアント端末５０からのアクセス要求を受けた時点のタイムフレームから所定の数だけ以前のタイムフレームに関連付けられたインデックデータを選択するようにしてもよい。例えば、所定の数が０である場合、インデックスサーバ２０は、タイムフレームｆｉ３に関連付けられたインデックスデータ（すなわち、データ要素Ａ１〜Ａ６、Ｂ１〜Ｂ７に対するインデックスデータ）を選択する。さらに、インデックスサーバ２０は、選択したインデックスデータを、ストレージノード１０ａを介してクライアント端末５０に送信する。
【００７７】
次に、時刻ｔ２において、同一のクライアント端末５０がストレージノード１０ａにアクセスしたとする。このとき、ストレージノード１０ａは、クライアント端末５０からのアクセス要求に対してインデックスサーバ２０が選択したインデックスデータに関連付けられたインデックスサーバ２０上のタイムフレームｆｉ３に対応する自ストレージノード１０ａ上のタイムフレームｆａ１に関連付けられたデータ要素を、クライアント端末５０からのアクセス要求に対するデータ要素として選択する。ここで、ストレージノード１０ａは、当該タイムフレームｆａ１に含まれる最新のデータ要素を選択するようにしてもよい。このとき、ストレージノード１０ａは、データ要素Ａ６を選択するとともに、選択したデータ要素Ａ６をクライアント端末５０に送信する。
【００７８】
かかる分散ストレージ装置によると、デバイスから送出されたストリームデータを分散して蓄積する複数のストレージノードおよびストレージノードに蓄積されたストリームデータに対するインデックスを蓄積するインデックスサーバのそれぞれから、一貫性のあるデータ要素およびインデックスを取得することが可能となる。
【００７９】
なお、上記実施形態においては、複数の主体が同時に同一の識別子を持つストリームデータを更新することを禁じる手段をさらに備えていてもよい。例えば、挿入のみとするか、または、ある識別子（ＩＤ）を有するセンサデータを挿入することを事前にシステムに予約することで、新しいクライアントが同一のＩＤのデータを挿入することを防ぐものとする。
【００８０】
また、上記の実施形態では、複数のストレージノードから所定のタイムフレームに含まれる所定の（例えば、最新の）データ要素を取得するクエリを考慮したが、かかるクエリ以外にインクリメンタル処理のためのクエリを追加してもよい。インクリメンタルな処理においては、データを利用するクライアント端末は何度も分散ストレージ装置４０にアクセスをし、前回アクセスして取得したデータ要素から最新のデータ要素までの一連のデータ要素を取得したい場合が考えられる。一例として、分散ストレージ装置４０において、クライアント端末５０ごとの識別子と、どのタイムフレームまで読み出したかを示す情報を保持することにより、インクリメンタルな処理で必要とされるデータ要素をクライアント端末５０に返却することが可能となる。
【００８１】
また、上記の実施形態では、それぞれのストレージノードが別のデータを格納する場合を考慮したが、ストレージノードが故障した際に格納データが喪失するのを防ぐため、２つ以上のストレージノードに同一のデータを格納する構成としてもよい。また、この場合、あるデータに対してそれを保持する複数のストレージノードのうちの１つをプライマリノードとし、プライマリノードにおける当該データと関連するタイムフレーム情報を他のノードに格納して利用するようにしてもよい。
【００８２】
本発明において、以下の形態が可能である。
（形態１）
複数のストレージノードを備え、
前記複数のストレージノードは、それぞれ、
デバイスから出力されたストリームデータを蓄積するデータ記憶部と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれる各データ要素をいずれかのタイムフレームに関連付ける第１のタイムフレーム生成部と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択するデータ選択部と、
前記データ選択部によって選択されたデータ要素を前記クライアント端末に送信するデータ送信部と、を有する、分散ストレージ装置が提供される。
（形態２）
前記データ選択部は、前記選択したデータ要素に関連付けられたタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択してもよい。
（形態３）
前記データ選択部は、前記クライアント端末からのアクセス要求に対して他のストレージノードが選択したデータ要素に関連付けられたタイムフレームと同期したタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択してもよい。
（形態４）
前記データ選択部は、前記クライアント端末からアクセス要求を受けた時点のタイムフレームから所定の数だけ以前のタイムフレームに関連付けられたデータ要素を選択してもよい。
（形態５）
前記データ選択部は、前記所定のタイムフレームに含まれる最新のデータ要素を選択してもよい。
（形態６）
前記アクセス要求は、前記クライアント端末を識別する識別子を含んでいてもよい。
（形態７）
前記分散ストレージ装置は、タイムフレームを更新する要求を生成するノード間同期部を備え、
前記第１のタイムフレーム生成部は、前記ノード間同期部が生成した要求に応じてタイムフレームを生成してもよい。
（形態８）
前記分散ストレージ装置は、前記複数のストレージノードのそれぞれのデータ記憶部に蓄積されたストリームデータに対するインデックスを蓄積するインデックス記憶部と、
前記複数のストレージノードとの間で同期したタイムフレームを生成するとともに、前記インデックス記憶部に蓄積されたインデックスをいずれかのタイムフレームに関連付ける第２のタイムフレーム生成部と、
前記複数のストレージノードのいずれかから転送された前記アクセス要求に基づいて、前記インデックス記憶部に蓄積されたインデックスの中から所定のタイムフレームに関連付けられたインデックスを選択し、選択したインデックスを該いずれかのストレージノードに送信するインデックス検索部と、を有するインデックスサーバをさらに備え、
前記複数のストレージノードは、それぞれ、
前記データ記憶部に蓄積されたストリームデータを前記インデックスサーバに送信するデータ更新部と、
クライアント端末からのアクセス要求を前記インデックス検索部に転送するデータ検索部と、をさらに有していてもよい。
（形態９）
前記データ選択部は、前記インデックスサーバに転送したクライアント端末からのアクセス要求に対して前記インデックス検索部により選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する自ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択してもよい。
（形態１０）
前記データ選択部は、他のストレージノードにより前記インデックスサーバに転送されたクライアント端末からのアクセス要求に対して前記インデックス検索部により選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する自ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択してもよい。
（形態１１）
分散ストレージ装置に含まれる各ストレージノードが、デバイスから出力されたストリームデータをデータ記憶部に蓄積する工程と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれる各データ要素をいずれかのタイムフレームに関連付ける工程と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択する工程と、
選択したデータ要素を前記クライアント端末に送信する工程と、を含む、データ提供方法が提供される。
（形態１２）
前記データ提供方法において、前記各ストレージノードが、前記選択したデータ要素に関連付けられたタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択してもよい。
（形態１３）
前記データ提供方法において、前記各ストレージノードが、前記クライアント端末からのアクセス要求に対して他のストレージノードが選択したデータ要素に関連付けられたタイムフレームと同期したタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択してもよい。
（形態１４）
前記データ提供方法は、前記各ストレージノードが、前記データ記憶部に蓄積されたストリームデータをインデックスサーバに送信する工程と、
前記クライアント端末からのアクセス要求を前記インデックスサーバに転送する工程と、
前記インデックスサーバが、前記各ストレージノードの記憶部に蓄積されたストリームデータに対するインデックスをインデックス記憶部に蓄積する工程と、
前記複数のストレージノードとの間で同期したタイムフレームを生成するとともに、前記インデックス記憶部に蓄積されたインデックスをいずれかのタイムフレームに関連付ける工程と、
前記複数のストレージノードのいずれかから転送された前記クライアント端末からのアクセス要求に基づいて、前記インデックス記憶部に蓄積されたインデックスの中から所定のタイムフレームに関連付けられたインデックスを選択し、選択したインデックスを該いずれかのストレージノードに送信する工程と、を含んでいてもよい。
（形態１５）
前記データ提供方法において、前記各ストレージノードは、前記インデックスサーバに転送した前記クライアント端末からのアクセス要求に対して前記インデックスサーバにより選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する自ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択してもよい。
（形態１６）
前記データ提供方法において、前記各ストレージノードは、他のストレージノードにより前記インデックスサーバに転送された前記クライアント端末からのアクセス要求に対して前記インデックスサーバにより選択されたインデックスに関連付けられた前記インデックスサーバ上のタイムフレームに対応する自ストレージノード上のタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択してもよい。
（形態１７）
分散ストレージ装置に含まれるストレージノードに設けられたコンピュータに対して、デバイスから出力されたストリームデータをデータ記憶部に蓄積する処理と、
他のストレージノードとの間で同期したタイムフレームを生成するとともに、前記データ記憶部に蓄積されたストリームデータに含まれる各データ要素をいずれかのタイムフレームに関連付ける処理と、
クライアント端末からのアクセス要求に基づいて、前記データ記憶部に蓄積された前記ストリームデータの中から所定のタイムフレームに関連付けられたデータ要素を選択する処理と、
選択したデータ要素を前記クライアント端末に送信する処理と、を実行させる、プログラムが提供される。
（形態１８）
前記プログラムは、前記選択したデータ要素に関連付けられたタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する処理を、前記コンピュータに実行させてもよい。
（形態１９）
前記プログラムは、前記クライアント端末からのアクセス要求に対して他のストレージノードが選択したデータ要素に関連付けられたタイムフレームと同期したタイムフレームに関連付けられたデータ要素を、前記クライアント端末からの以後のアクセス要求に対するデータ要素として選択する処理を、前記コンピュータに実行させてもよい。
【００８３】
なお、上記の非特許文献等の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【００８４】
１０ａ〜１０ｎ    ストレージノード
１１    データ送信部
１２    データ選択部
１３    タイムフレーム生成部
１４    データ記憶部
１５    タイムフレーム記憶部
１６    データ更新部
１７    データ検索部
２０、１２０    インデックスサーバ
２１    インデックス検索部
２２    インデックス更新部
２３    インデックス記憶部
２４    インデックスタイムフレーム記憶部
２５    タイムフレーム生成部
３０    ノード間同期部
４０、１４０    分散ストレージ装置
５０    クライアント端末
５１    データアクセス部
１１０ａ〜１１０ｎ    ストレージノード
１３０    ストレージ間ネットワーク
ｆａ１〜ｆａ３、ｆｂ１〜ｆｂ３、ｆｉ１〜ｆｉ３    タイムフレーム
ｔ１、ｔ２    時刻
【図１】
2014051071.tif 000003
【図２】
2014051071.tif 000004
【図３】
2014051071.tif 000005
【図４】
2014051071.tif 000006
【図５】
2014051071.tif 000007
【図６】
2014051071.tif 000008
【図７】
2014051071.tif 000009
【図８】
2014051071.tif 000010
【図９】
2014051071.tif 000011
【国際調査報告】
2014051071.tif 000012
2014051071.tif 000013