(57)【要約】      （修正有）【課題】時空間情報を含む大量のデータを適切に分散して格納できるとともに、時空間情報を用いて効率的かつ高速にデータを検索できる情報管理装置、情報管理方法及び情報管理プログラムの提供。【解決手段】情報管理システム１において、時空間情報管理装置２０は、時空間情報を複数のノードに分散して管理する情報管理装置であって、時空間情報を１次元ビット列に変換、分割し、変換した１次元ビット列の前方ビット列を少なくともキーに格納させ、該キーのバリューに後方ビット列及び対応データを、格納先のノードに格納させる格納部２４と、検索対象の時空間情報の範囲条件を１次元ビット列に変換、分割し、検索先のノードから、少なくとも分割した前方ビットを用いてキーを検索し、検索されたキーのバリューから、分割した後方ビット列に対応するバリューを検索し、検索したバリューに含まれる対応データを検索結果として出力する検索部２５と、を有する。【選択図】図１
2020013539.tif 000002
【特許請求の範囲】
【請求項１】
時間情報及び位置情報を含む時空間情報と該時空間情報に対応する対応データとを、キーバリューストアである複数のノードに分散して管理する情報管理装置であって、
格納対象の情報のうち前記時空間情報を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、格納先のノードに、少なくとも分割した前方ビット列をキーに格納させ、該キーのバリューに、分割した後方ビット列及び前記対応データを格納させる格納部と、
検索対象の時空間情報の範囲条件を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、検索先のノードから、少なくとも分割した前方ビットを用いてキーを検索し、検索されたキーのバリューから、分割した後方ビット列に対応するバリューを検索し、検索したバリューに含まれる対応データを検索結果として出力する検索部と、
を有することを特徴とする情報管理装置。
【請求項２】
前記格納部は、
前記格納対象の情報のうち前記時空間情報を１次元ビット列に変換する第１の変換部と、
前記第１の変換部が変換した１次元ビット列を前方ビット列及び後方ビット列に分割する第１の分割部と、
前記第１の分割部が分割した前方ビット列のハッシュ値を計算する第１のハッシュ値計算部と、
前記第１のハッシュ値計算部が計算したハッシュ値を基に格納先のノードを選択する格納先ノード選択部と、
前記第１の分割部が分割した前方のビット列を、前記格納先のノードのキーに格納する設定を行うキー設定部と、
前記格納先のノードのキーのうち、前記キー設定部が設定したキーのバリューに、前記第１の分割部が分割した後方ビット列及び前記対応データを格納する設定を行うバリュー設定部と、
前記キー設定部及び前記バリュー設定部の設定に応じて、前記格納先のノードにデータを格納させる格納指示部と、
を含むことを特徴とする請求項１に記載の情報管理装置。
【請求項３】
前記検索部は、
検索対象の時空間情報の範囲条件を１次元ビット列に変換する第２の変換部と、
前記第２の変換部が変換した１次元ビット列を前方ビット列及び後方ビット列に分割する第２の分割部と、
前記第２の分割部が分割した前方ビット列のハッシュ値を計算する第２のハッシュ値計算部と、
第２のハッシュ値計算部が計算したハッシュ値を基に検索先のノードを求める検索先ノード取得部と、
前記検索先のノードから、前記第２の分割部が分割した前方ビット列と一致するキーを検索するキー検索部と、
前記キー検索部が検索したキーのバリューから、前記第２の分割部が分割した後方ビット列と前方一致するバリューを検索する後方ビット列検索部と、
前記後方ビット列検索部が検索したバリューに含まれる対応データを検索結果として出力する出力部と、
を有することを特徴とする請求項１または２に記載の情報管理装置。
【請求項４】
前記複数のノードは、クラスタ構成で動作し、
前記格納部は、
前記格納対象の情報のうち前記時空間情報を１次元ビット列に変換する第１の変換部と、
前記第１の変換部が変換した１次元ビット列を前方ビット列及び後方ビット列に分割する第１の分割部と、
前記第１の分割部が分割した前方ビットとともにキーに格納するラベル番号を計算するラベル計算部と、
前記第１の分割部が分割した前方のビット列と前記ラベル計算部が計算したラベル番号とを、前記クラスタ構成で動作する複数のノードのキーに格納する設定を行うキー設定部と、
前記格納先のノードのキーのうち、前記キー設定部が設定したキーのバリューに、前記第１の分割部が分割した後方ビット列及び前記対応データを格納する設定を行うバリュー設定部と、
前記キー設定部及び前記バリュー設定部の設定に応じて、前記格納先のノードにデータを格納させる格納指示部と、
を含むことを特徴とする請求項１に記載の情報管理装置。
【請求項５】
前記検索部は、
検索対象の時空間情報の範囲条件を１次元ビット列に変換する第２の変換部と、
前記第２の変換部が変換した１次元ビット列を前方ビット列及び後方ビット列に分割する第２の分割部と、
検索対象のラベル番号を導出するラベル導出部と、
前記クラスタ構成で動作する複数のノードから、前記第２の分割部が分割した前方ビット列及び前記ラベル導出部が計算したラベル番号と一致するキーを検索するキー検索部と、
前記キー検索部が検索したキーのバリューから、前記第２の分割部が分割した後方ビット列と前方一致するバリューを検索する後方ビット列検索部と、
前記後方ビット列検索部が検索したバリューに含まれる対応データを検索結果として出力する出力部と、
を有することを特徴とする請求項４に記載の情報管理装置。
【請求項６】
時間情報及び位置情報を含む時空間情報と該時空間情報に対応する対応データとを、キーバリューストアである複数のノードに分散して管理する情報管理装置が実行する情報管理方法であって、
格納対象の情報のうち前記時空間情報を１次元ビット列に変換し、少なくとも変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、格納先のノードに、分割した前方ビット列をキーに格納させ、該キーのバリューに、分割した後方ビット列及び前記対応データを格納させる工程と、
検索対象の時空間情報の範囲条件を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、検索先のノードから、少なくとも分割した前方ビットを用いてキーを検索し、検索されたキーのバリューから、分割した後方ビット列に対応するバリューを検索し、検索したバリューに含まれる対応データを検索結果として出力する工程と、
を含んだことを特徴とする情報管理方法。
【請求項７】
格納対象の時間情報及び位置情報を含む時空間情報と該時空間情報に対応する対応データとのうち前記時空間情報を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、格納先のキーバリューストアであるノードに、少なくとも分割した前方ビット列をキーに格納させ、該キーのバリューに、分割した後方ビット列及び前記対応データを格納させるステップと、
検索対象の時空間情報の範囲条件を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、検索先のノードから、少なくとも分割した前方ビットを用いてキーを検索し、検索されたキーのバリューから、分割した後方ビット列に対応するバリューを検索し、検索したバリューに含まれる対応データを検索結果として出力するステップと、
をコンピュータに実行させるための情報管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報管理装置、情報管理方法及び情報管理プログラムに関する。
【背景技術】
【０００２】
ＩｏＴ（Internet  of  Things）時代の到来に伴い、ＩｏＴ機器によって取得されたデータが、ネットワークを介して、多様な使われ方をされるようになっている。このＩｏＴ機器が、車両、ドローン、スマートフォンなどの移動機器である場合、実際の取得データに時間情報及び位置情報(時空間情報)が対応付けられるため、データ量が膨大となる。このため、ＩｏＴ機器のデータを扱う事業者からは、膨大な量のデータを適切に蓄積できるとともに、これらのデータの中から、時空間情報を用いて、効率的かつ高速にデータを検索できるデータベースシステムが求められていた。
【０００３】
そこで、従来、蓄積したデータを表の形式で管理することによって、空間の範囲検索を含み、汎用的な検索に対応することができる関係データベース管理システム（ＲＤＢＭＳ）が提案されている（非特許文献１参照）。
【０００４】
また、他のデータベース技術として、大量のデータを複数のノードに分散して格納し、限られた検索条件に対して高速に検索できる分散キーバリューストアが提案されている（非特許文献２参照）。そして、分散キーバリューストアにおける検索条件の制限を緩和するために、一つのキーに複数のバリューを格納することでセカンダリインデクスを構築する技術が提案されている（非特許文献３参照）。また、時空間情報を扱う技術として、時空間情報を１次元のビット列に変換し、効率的に格納および検索する技術が提案されている（非特許文献４参照）。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】リレーショナルデータベースとは、［online］、［平成３０年２月２日検索］、インターネット＜ＵＲＬ：https://aws.amazon.com/jp/relational-database＞
【非特許文献２】IoTに適したNoSQL・分散Key-Valueストア、［online］、［平成３０年２月２日検索］、インターネット＜ＵＲＬ：https://thinkit.co.jp/story/2014/09/25/5280?page=0%2C1＞
【非特許文献３】redis、［online］、［平成３０年２月２日検索］、インターネット＜ＵＲＬ：https://redis.io/topics/indexes＞
【非特許文献４】STCode:  The  Text  Encoding  Algorithm  for  Latitude/Longitude/Time、［online］、［平成３０年２月２日検索］、インターネット＜ＵＲＬ：https://link.springer.com/chapter/10.1007%2F978-3-319-03611-3_10＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＲＤＢＭＳに時空間情報を蓄積する場合、データを格納または削除する度にインデクスを更新する必要がある。しかしながら、ＲＤＢＭＳでは、インデクス更新のための時間が発生するため、膨大な量のデータを扱う場合、その更新時間も膨大になるという問題があった。
【０００７】
また、分散キーバリューストアでセカンダリインデクスを用い、時空間情報を１次元のビット列に変換した場合であっても、時空間情報という多次元情報による範囲検索が困難であり、時空間情報を用いた効率的かつ高速なデータ検索は難しかった。
【０００８】
さらに、セカンダリインデクスを用いる場合、一つのキーに大量のバリューが格納されると、データストアを構成するノード間で処理負荷が偏り、大幅に性能が低下するというおそれもある。
【０００９】
本発明は、上記に鑑みてなされたものであって、時空間情報を含む大量のデータを適切に分散して格納できるとともに、時空間情報を用いて効率的かつ高速にデータを検索できる情報管理装置、情報管理方法及び情報管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明に係る情報管理装置は、時間情報及び位置情報を含む時空間情報と該時空間情報に対応する対応データとを、キーバリューストアである複数のノードに分散して管理する情報管理装置であって、格納対象の情報のうち時空間情報を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、少なくとも分割した前方ビット列をキーに格納させ、該キーのバリューに、分割した後方ビット列及び対応データを格納先のノードに格納させる格納部と、検索対象の時空間情報の範囲条件を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、検索先のノードから、少なくとも分割した前方ビットを用いてキーを検索し、検索されたキーのバリューから、分割した後方ビット列に対応するバリューを検索し、検索したバリューに含まれる対応データを検索結果として出力する検索部と、を有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、時空間情報を含む大量のデータを適切に分散して格納できるとともに、時空間情報を用いて効率的かつ高速にデータを検索できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施の形態１における情報管理システムの構成の一例を示す図である。
【図２】図２は、図１に示すデータ送信機器が送信する取得データのデータ構成の一例を示す図である。
【図３】図３は、図１に示すノードが記憶するデータのデータ構成の一例を示す図である。
【図４】図４は、図１に示す端末装置が送信する検索要求のデータ構成の一例を示す図である。
【図５】図５は、図１に示す時空間情報管理装置が出力する検索結果のデータ構成の一例を示す図である。
【図６】図６は、図１に示す時空間情報管理装置の構成の一例を示す図である。
【図７】図７は、図１に示す格納部の処理の流れを説明する図である。
【図８】図８は、図１に示すデータ記憶システム内のデータ保持形式を説明する図である。
【図９】図９は、図１に示す検索部の処理の流れを説明する図である。
【図１０】図１０は、図１に示すデータ記憶システム内のデータ保持形式を説明する図である。
【図１１】図１１は、図６に示す時空間情報管理装置による情報の格納処理の処理手順を示すフローチャートである。
【図１２】図１２は、図６に示す時空間情報管理装置による情報の検索処理の処理手順を示すフローチャートである。
【図１３】図１３は、従来のデータベースシステムのデータ分散を説明する図である。
【図１４】図１４は、本実施の形態１に係る時空間情報管理装置が行うデータ分散を説明する図である。
【図１５】図１５は、従来のデータベースシステムのデータ分散を説明する図である。
【図１６】図１６は、本実施の形態１に係る時空間情報管理装置が行うデータ分散を説明する図である。
【図１７】図１７は、実施の形態１の変形例に係る時空間情報管理装置の構成の一例を示す図である。
【図１８】図１８は、分散先ノード組合せ情報のデータ構成の一例を示す図である。
【図１９】図１９は、図１７に示す時空間情報管理装置による情報の格納処理の処理手順を示すフローチャートである。
【図２０】図２０は、図１７に示す時空間情報管理装置による情報の検索処理の処理手順を示すフローチャートである。
【図２１】図２１は、図１７に示す時空間情報管理装置が選択できるノードの組合せを示す図である。
【図２２】図２２は、実施の形態２における情報管理システムの構成の一例を示す図である。
【図２３】図２３は、図２２に示すデータ記憶システムが記憶するデータのデータ構成の一例を示す図である。
【図２４】図２４は、図２２に示す時空間情報管理装置の構成の一例を示す図である。
【図２５】図２５は、図２４に示す格納部の処理の流れを説明する図である。
【図２６】図２６は、図２２に示すデータ記憶システム内のデータ保持形式を説明する図である。
【図２７】図２７は、図２４に示す検索部の処理の流れを説明する図である。
【図２８】図２８は、図２２に示すデータ記憶システム内のデータ保持形式を説明する図である。
【図２９】図２９は、図２４に示す時空間情報管理装置による情報の格納処理の処理手順を示すフローチャートである。
【図３０】図３０は、図２４に示す時空間情報管理装置による情報の検索処理の処理手順を示すフローチャートである。
【図３１】図３１は、プログラムが実行されることにより、時空間情報管理装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施の形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
【００１４】
［実施の形態１］
本発明の実施１の形態について説明する。図１は、実施の形態１における情報管理システムの構成の一例を示す図である。
【００１５】
図１に示すように、実施の形態１に係る情報管理システム１は、データ送信機器１０、時空間情報管理装置２０（情報管理装置）、データ記憶システム３０及び端末装置４０を有する。時空間情報管理装置２０は、データ送信機器１０、データ記憶システム３０及び端末装置４０と、ネットワーク等によって接続する。
【００１６】
データ送信機器１０は、ＩｏＴ機器である。データ送信機器１０は、例えば、車両、ドローン或いはスマートフォンなどの移動機器である。データ送信機器１０は、移動しながら取得したデータを、時空間情報管理装置２０に送信する。データ送信機器１０は、時間情報及び位置情報を含む時空間情報と該時空間情報に対応する対応データとを対応付けた取得データを、時空間情報管理装置２０に送信する。データ送信機器１０は、１台でもよく、複数台でもよい。
【００１７】
図２は、図１に示すデータ送信機器１０が送信する取得データのデータ構成の一例を示す図である。図２のリストＬ１に示すように、データ送信機器１０による取得データは、データ取得時刻を示す時間情報と経度及び緯度を示す位置情報とに、データ送信機器１０が取得した各種データ（データ部）を対応付けた構成を有する。例えば、データ送信機器１０は、時刻「2017/1/1  10:15:30」に、経度「27.1984°」及び緯度「-15.2958°」の位置で取得した「data1」を、時間情報及び位置情報に対応付けて時空間情報管理装置２０に送信する。
【００１８】
図１に戻り、時空間情報管理装置２０の概略について説明する。時空間情報管理装置２０は、データ送信機器１０によって送信された取得データを、キーバリューストアである複数のノード１〜Ｎに分散して格納することで管理する。また、時空間情報管理装置２０は、ノード１〜Ｎが格納するデータの中から、検索対象の時空間情報の範囲条件に対応する対応データを検索結果として出力する。時空間情報管理装置２０は、要部として、格納部２４及び検索部２５を有する。なお、時空間情報管理装置２０は、データ送信機器１０またはアプリケーション４１に組み込まれた構成でもよい。
【００１９】
格納部２４は、取得データをノード１〜Ｎに分散して格納する。格納部２４は、格納対象の情報のうち時空間情報を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割する。そして、格納部２４は、分割した前方ビット列をキーに格納させ、該キーのバリューに、分割した後方ビット列及び対応データを格納先のノードに格納させる。後述するように、格納部２４は、ある時間、ある地域にデータが偏った場合であっても、それぞれのデータに対して、異なるノードを格納先として設定するため、格納先を分散させることができる。
【００２０】
検索部２５は、検索対象の時空間情報の範囲条件に対応する対応データを検索結果として出力する。検索部２５は、検索対象の時空間情報の範囲条件を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割する。そして、検索部２５は、検索先のノードから、分割した前方ビットを用いてキーを検索し、検索されたキーのバリューから、分割した後方ビット列に対応するバリューを検索し、検索したバリューに含まれる対応データを検索結果として出力する。後述するように、検索部２５は、検索先のノードの台数を絞って検索を行うことから、１台のノードに検索が集中することもなく検索の負荷を低減することができるとともに、全ノードに検索をおこなうこともないため、検索処理の高速化を図ることができる。
【００２１】
データ記憶システム３０は、キーバリューストアである複数のノード１〜Ｎを有する。ノード１〜Ｎは、例えば、ストレージを有し、ストレージへのデータ入出力を実行するサーバであり、それぞれのサーバが連動してデータ入出力に関する動作を行う。
【００２２】
図３は、図１に示すノード１〜Ｎが記憶するデータのデータ構成の一例を示す図である。図３のリストＬ２に示すように、ノード１〜Ｎが記憶するデータのデータ構成は、セカンダリインデクス部を有するキーバリュー型を想定している。
【００２３】
具体的には、ノード１〜Ｎは、リストＬ２のように、ノードの識別情報、キー、バリューの項目を有する構成でデータを記憶する。そして、リストＬ２に示すように、バリューには、セカンダリインデクス部と、対応データが格納されるデータ部とが設けられる。後述するように、キーには、時空間情報をビット列変換した際の前方ビット列が格納される。また、バリューのセカンダリインデクスには、時空間情報をビット列変換した際の後方ビット列が格納される。
【００２４】
具体的には、リストＬ２では、例えば、ノードＮ１が、「前方ビット列1」を格納するキーのバリューのうち、セカンダリインデクス部に「後方ビット列1」が格納され、データ部に「data1」を格納することを示す。
【００２５】
図１に戻り、端末装置４０について説明する。端末装置４０は、ユーザが所有するスマートフォン等であり、アプリケーション４１を有する。アプリケーション４１は、ルート案内や障害地点通知などのための検索を、時空間情報管理装置２０に要求する機能を有する。例えば、端末装置４０は、検索対象の時空間情報の範囲条件を検索条件として、時空間情報管理装置２０に検索要求を送信する。
【００２６】
図４は、図１に示す端末装置４０が送信する検索要求のデータ構成の一例を示す図である。図４のリストＬ３に示すように、検索要求データは、検索対象の時空間情報の始端を示すデータ列と終端となるデータ列とが対応付けられたデータ構成を有する。リストＬ３では、検索対象の時空間情報の範囲を示す始端及び終端のそれぞれについて、時刻、経度、緯度が示される。端末装置４０は、リストＬ３の例では、時刻が「2017/1/1  09:00:00」から「2017/1/1  09:15:00」の範囲であり、経度「27°」から「28°」であって緯度が「-16°」から「-15°」の範囲を、検索対象の時空間情報の範囲条件として要求する。
【００２７】
図５は、図１に示す時空間情報管理装置２０が出力する検索結果のデータ構成の一例を示す図である。時空間情報管理装置２０は、図３に示す検索条件を基にノード１〜Ｎのデータを検索する。そして、時空間情報管理装置２０は、例えば、図５に示すリストＬ４を検索結果として、端末装置４０に返却する。時空間情報管理装置２０は、リストＬ４に示すように、検索条件に該当する該当バリューとして、「data1」を返却する。
【００２８】
［時空間情報管理装置の構成］
次に、時空間情報管理装置２０の構成について説明する。図６は、図１に示す時空間情報管理装置２０の構成の一例を示す図である。図６に示すように、時空間情報管理装置２０は、通信部２１、記憶部２２及び制御部２３を有する。なお、時空間情報管理装置２０は、物理サーバであってもよいし、物理サーバ上に展開された仮想サーバであってもよい。
【００２９】
通信部２１は、ネットワーク２等を介して接続された他の装置との間で、各種情報を送受信する通信インタフェースである。通信部２１は、ＮＩＣ（Network  Interface  Card）等で実現され、ＬＡＮ（Local  Area  Network）やインターネットなどの電気通信回線を介した他の装置と制御部２３（後述）との間の通信を行う。
【００３０】
記憶部２２は、ＨＤＤ（Hard  Disk  Drive）、ＳＳＤ（Solid  State  Drive）、光ディスク等の記憶装置である。なお、記憶部２２は、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ、ＮＶＳＲＡＭ（Non  Volatile  Static  Random  Access  Memory）等のデータを書き換え可能な半導体メモリであってもよい。記憶部２２は、時空間情報管理装置２０で実行されるＯＳ（Operating  System）や各種プログラムを記憶する。さらに、記憶部２２は、プログラムの実行で用いられる各種情報を記憶する。
【００３１】
制御部２３は、時空間情報管理装置２０全体を制御する。制御部２３は、例えば、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）等の電子回路や、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路である。また、制御部２３は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、内部メモリを用いて各処理を実行する。また、制御部２３は、各種のプログラムが動作することにより各種の処理部として機能する。制御部２３は、格納部２４及び検索部２５を有する。
【００３２】
［格納部の構成］
格納部２４は、格納受付部２４１、第１の変換部２４２、第１の分割部２４３、第１のハッシュ値計算部２４４、格納先ノード計算部２４５（格納先ノード選択部）、キー設定部２４６、バリュー設定部２４７及び格納指示部２４８を有する。
【００３３】
格納受付部２４１は、データ送信機器１０から送信された取得データを、格納対象のデータとして、入力を受付ける。取得データは、前述したように、時間情報及び位置情報を含む時空間情報と該時空間に対応する対応データとを対応付けたものである。具体的には、取得データは、時刻、経度、緯度、データ部を有する。
【００３４】
第１の変換部２４２は、入力を受け付けた取得データのうち、時空間情報を１次元ビット列に変換する。すなわち、第１の変換部２４２は、時刻、経度、緯度を１次元ビット列に変換する。
【００３５】
第１の分割部２４３は、第１の変換部２４２が変換した１次元ビット列を、前方ビット列及び後方ビット列に分割する。そして、第１のハッシュ値計算部２４４は、第１の変換部２４２が変換した前方ビット列のハッシュ値を計算する。
【００３６】
格納先ノード計算部２４５は、第１のハッシュ値計算部２４４が計算したハッシュ値を基に格納先のノードを選択する。具体的には、格納先ノード計算部２４５は、（１）式を用いて、格納先のノード番号を計算し、計算結果として得られた番号のノードを格納先のノードとして選択する。なお、（１）式では、分散先のノード数が設定されており、１台のノードの番号が解として算出される。
【００３７】
【数１】
2020013539.tif 000003
【００３８】
キー設定部２４６は、第１の分割部２４３が分割した前方のビット列を、格納先のノードのキーに格納する設定を行う。そして、バリュー設定部２４７は、格納先のノードのキーのうち、キー設定部２４６が設定したキーのバリューに、第１の分割部２４３が分割した後方ビット列及び対応データを格納する設定を行う。格納指示部２４８は、キー設定２４６部及びバリュー設定部２４７の設定に応じて、格納先のノードにデータを格納させる。
【００３９】
このように、格納部２４は、（１）式を用いることによって、各キーの違いに応じて、異なるノードを格納先として選択する。したがって、格納部２４は、同じ時間や同じ地域のデータであっても、複数のノードに分けて格納して、格納先を分散するため、ノードに対する格納の負荷を低減することができる。また、格納部２４は、時空間情報を、１次元ビット列変換法を用いて変換し、１次元ビット列に変換した時空間情報のうちの前方ビットをキーとして使用する。このように、格納部２４は、比較的簡易な変換処理である１次元ビット列変換法を用いて、キーを作成するため、キー作成に要する時間を短縮することができる。
【００４０】
［検索部の構成］
次に、検索部２５について説明する。検索部２５は、検索受付部２５１、第２の変換部２５２、第２の分割部２５３、第２のハッシュ値計算部２５４、検索先ノード計算部２５５（検索先ノード取得部）、キー検索部２５６、後方ビット列検索部２５７及びバリュー返却部２５８（出力部）を有する。
【００４１】
検索受付部２５１は、端末装置４０から送信された検索条件の入力を受け付ける。検索条件は、ルート案内や障害地点通知などに用いるための、検索対象の時空間情報の範囲条件である。具体的には、検索情報は、図４のリストＬ３に示すように、時刻、経度、緯度の始端及び終端を示す情報である。
【００４２】
第２の変換部２５２は、検索を受けた検索対象の時空間情報の範囲条件を、１次元ビット列に変換する。第２の分割部２５３は、第２の変換部２５２が変換した１次元ビット列を前方ビット列及び後方ビット列に分割する。第２のハッシュ値計算部２５４は、第２の分割部２５３が分割した前方ビット列のハッシュ値を計算する。
【００４３】
検索先ノード計算部２５５は、第２のハッシュ値計算部２５４が計算したハッシュ値を基に検索先のノードを求める。具体的には、検索先ノード計算部２５５は、（２）式を用いて、検索先のノード番号を計算し、計算結果として得られた番号のノードを検索の際のノードとする。（２）式では、（１）式で分散先のノード数Ｄが複数台設定されている場合には、（１）式で設定された台数分の解が出る。
【００４４】
【数２】
2020013539.tif 000004
【００４５】
キー検索部２５６は、検索先のノードから、第２の分割部２５３が分割した前方ビット列と一致するキーを検索する。そして、後方ビット列検索部２５７は、キー検索部２５６が検索したキーのバリューから、第２の分割部が分割した後方ビット列と前方一致するバリューを検索する。
【００４６】
バリュー返却部２５８は、後方ビット列検索部２５７が検索したバリューに含まれる対応データを、検索結果として出力する。言い換えると、バリュー返却部２５８は、後方ビット列検索部２５７が検索したバリューに含まれる対応データを、端末装置４０に返却する。
【００４７】
検索部２５は、（２）式を用いることによって、検索先のノードの台数を絞って検索処理を実行する。したがって、実施の形態１では、１台のノードに検索が集中することもなく検索の負荷を低減することができるとともに、全ノードに検索を行うこともないため、検索処理の高速化を図ることができる。
【００４８】
［格納部の処理の流れ］
次に、図７を参照して、格納部２４の処理の流れについて具体的に説明する。図７は、図１に示す格納部２４の処理の流れを説明する図である。
【００４９】
図７に示すように、例えば、格納受付部２４１が、「時刻(unix_timestamp):1483196400，経度：40.7212905884，緯度：-73.8441925049，データ部:“test_data1”」であるデータの入力を受け付けた場合について説明する。
【００５０】
この場合、第１の変換部２４２は、３次元Ｚ曲線により時刻「1483196400」、経度「40.7212905884」，緯度「-73.8441925049」を1次元ビット列(例:96ビット)に変換する。得られた１次元ビット列は、「101010101101111001010110100110111010110010100010001000100011101001110111000100110011001000011011」である。
【００５１】
続いて、第１の分割部２４３は、１次元ビット列を前方ビット列(例:４５ビット)、後方ビット列(例：５１ビット)に分割する。具体的には、第１の分割部２４３は、「101010101101111001010110100110111010110010100010001000100011101001110111000100110011001000011011」のうち、前方の４５ビット「101010101101111001010110100110111010110010100」を前方ビット列とし、後方の５１ビット「010001000100011101001110111000100110011001000011011」を後方ビット列として分割する。
【００５２】
第１のハッシュ値計算部２４４は、前方ビット列「101010101101111001010110100110111010110010100」のハッシュ値を計算する。例えば、第１のハッシュ値計算部２４４は、ハッシュ関数としてmurmurhashを用い、前方ビット列「101010101101111001010110100110111010110010100」のハッシュ値を「8088516515490849671」と計算する。
【００５３】
そして、格納先ノード計算部２４５は、第１のハッシュ値計算部２４４が計算したハッシュ値「8088516515490849671」を（１）式に適用し、格納先ノードの番号を計算する。例えば、Ｄ＝３、Ｎ＝１０の場合であって、ノード番号Ｗ＝１、Ｗ＝２またはＷ＝３のうち、今回は、Ｗ＝１が選ばれたものとする。
【００５４】
キー設定部２４６は、ノードＷ１のキーに前方ビット列「101010101101111001010110100110111010110010100」を格納するように設定する。そして、バリュー設定部２４７は、格納先のノードＷ１のキー「101010101101111001010110100110111010110010100」のバリューのうち、セカンダリインデクス部に、後方ビット列「010001000100011101001110111000100110011001000011011」を格納し、データ部に「test_data1」を格納する設定を行う。そして、この格納指示部２４８は、キー設定２４６部及びバリュー設定部２４７の設定に応じて、格納先のノードにデータを格納させる。
【００５５】
図８は、図１に示すデータ記憶システム３０内のデータ保持形式を説明する図である。図８のリストＬ２ａに示すように、図７に示す格納部２４の設定に従い、ノード「１」のキーに「101010101101111001010110100110111010110010100」が格納される。そして、リストＬ２ａに示すように、このキー「101010101101111001010110100110111010110010100」のバリューのうち、セカンダリインデクス部に、「010001000100011101001110111000100110011001000011011」が格納され、データ部に「test_data1」が格納される。
【００５６】
［検索部の処理の流れ］
次に、図９を参照して、検索部２５の処理の流れについて具体的に説明する。図９は、図１に示す検索部２５の処理の流れを説明する図である。また、図１０は、図１に示すデータ記憶システム３０内のデータ保持形式を説明する図である。
【００５７】
図９に示すように、例えば、検索受付部２５１が、検索条件として、「時刻(unix_timestamp)：1483194823〜1483196748，経度:40.7211685180〜40.7213401794，緯度：-73.8442611694〜-73.8439178466」の入力を受け付けた場合について説明する。
【００５８】
この場合、第２の変換部２５２は、３次元Ｚ曲線により時刻「1483194823〜1483196748」、経度「経度:40.7211685180〜40.7213401794」、緯度「-73.8442611694〜-73.8439178466」の入力範囲を１次元ビット列に変換する。この例では、６０ビットで表現が可能であり、第２の変換部２５２は、ビット列「101010101101111001010110100110111010110010100010001000100011」を得ることができる。
【００５９】
続いて、第２の分割部２５３は、１次元ビット列を前方ビット列(例:４５ビット)、後方ビット列(例：５１ビット)に分割する。具体的には、第２の分割部２５３は、「101010101101111001010110100110111010110010100010001000100011」のうち前方の４５ビット「101010101101111001010110100110111010110010100」を前方ビット列とし、後方の１５ビット「010001000100011」を後方ビット列として分割する。
【００６０】
第２のハッシュ値計算部２５４は、前方ビット列「101010101101111001010110100110111010110010100」のハッシュ値を計算する。例えば、第２のハッシュ値計算部２５４は、ハッシュ関数としてmurmurhashを用い、前方ビット列「101010101101111001010110100110111010110010100」のハッシュ値を「8088516515490849670」と計算する。
【００６１】
そして、検索先ノード計算部２５５は、第２のハッシュ値計算部２５４が計算したハッシュ値「8088516515490849670」を（２）式に適用し、検索先ノードの番号を計算する。例えば、Ｄ＝３、Ｎ＝１０の場合であって、（２）式により、検索先ノードが、Ｒ１＝１、かつ、Ｒ２＝２、かつ、Ｒ３＝３であると求められる。したがって、図１０のリストＬ２ａのうち、ノード「１」，「２」，「３」が検索先ノードとして求められる（図１０の（１）参照）。
【００６２】
そして、キー検索部２５６は、検索先のノードから、前方ビット列「101010101101111001010110100110111010110010100」と一致するキーを検索する。この結果、リストＬ２ａに示すように、ノード「１」の欄Ｃ１のキーが検索キーとして検索される（図１０の（２）参照）。
【００６３】
続いて、後方ビット列検索部２５７は、キー検索部２５６が検索したキーのバリューから、後方ビット列「010001000100011」と前方一致するセカンダリインデクス部を検索する。この結果、ノード「１」の欄Ｃ１のキーに対応するバリューのうち、後方ビット列「010001000100011」と前方一致する欄Ｃ２が検索バリューとして検索される（図１０の（３）参照）。
【００６４】
そして、バリュー返却部２５８は、後方ビット列検索部２５７が検索した欄Ｃ２のセカンダリインデクス部に対応するデータ部のデータ「test_data1」（図１０の欄Ｃ３参照）を、検索に該当するバリューとして、端末装置４０に返却する（図１０の（４）参照）。
【００６５】
［格納処理の処理手順］
次に、時空間情報管理装置２０による情報の格納処理の処理手順について説明する。図１１は、図６に示す時空間情報管理装置２０による情報の格納処理の処理手順を示すフローチャートである。
【００６６】
図１１に示すように、格納受付部２４１がデータ送信機器１０から送信された取得データの入力を受け付けると（ステップＳ１１）、第１の変換部２４２は、入力を受け付けた取得データのうち、時空間情報である時刻、経度、緯度を１次元ビット列に変換する（ステップＳ１２）。
【００６７】
続いて、第１の分割部２４３は、第１の変換部２４２が変換した１次元ビット列を、前方ビット列及び後方ビット列に分割する（ステップＳ１３）。そして、第１のハッシュ値計算部２４４は、第１の変換部２４２が変換した前方ビット列のハッシュ値を計算する（ステップＳ１４）。
【００６８】
格納先ノード計算部２４５は、第１のハッシュ値計算部２４４が計算したハッシュ値を基に格納先のノードを計算する（ステップＳ１５）。具体的には、格納先ノード計算部２４５は、（１）式を用いて、格納先のノード番号を計算し、計算結果として得られた番号のノードを格納先のノードとして選択する。
【００６９】
キー設定部２４６は、第１の分割部２４３が分割した前方のビット列を、格納先のノードのキーに格納する設定を行う（ステップＳ１６）。そして、バリュー設定部２４７は、格納先のノードのキーのうち、キー設定部２４６が設定したキーのバリューに、第１の分割部２４３が分割した後方ビット列及び対応データを格納する設定を行う（ステップＳ１７）。格納指示部２４８は、キー設定２４６部及びバリュー設定部２４７の設定に応じて、格納先のノードにデータを格納させる指示を行い（ステップＳ１８）、格納処理を終了する。
【００７０】
［検索処理の処理手順］
次に、時空間情報管理装置２０による情報の検索処理の処理手順について説明する。図１２は、図６に示す時空間情報管理装置２０による情報の検索処理の処理手順を示すフローチャートである。
【００７１】
図１２に示すように、まず、検索受付部２５１は、端末装置４０から送信された時刻、経度、緯度の始端及び終端を示す情報を、検索条件として、入力を受け付ける（ステップＳ２１）。そして、第２の変換部２５２は、入力値を、１次元ビット列に変換する（ステップＳ２２）。
【００７２】
続いて、第２の分割部２５３は、第２の変換部２５２が変換した１次元ビット列を前方ビット列及び後方ビット列に分割する（ステップＳ２３）。そして、第２のハッシュ値計算部２５４は、第２の分割部２５３が分割した前方ビット列のハッシュ値を計算する（ステップＳ２４）。
【００７３】
検索先ノード計算部２５５は、第２のハッシュ値計算部２５４が計算したハッシュ値を基に検索先のノードを計算する（ステップＳ２５）。具体的には、検索先ノード計算部２５５は、（２）式を用いて、検索先のノード番号を計算し、計算結果として得られた番号のノードを検索際のノードとする。
【００７４】
そして、キー検索部２５６は、検索先のノードから、第２の分割部２５３が分割した前方ビット列と一致する（等価である）キーを検索する（ステップＳ２６）。そして、後方ビット列検索部２５７は、キー検索部２５６が検索したキーのバリューに存在する後方ビット列に対し、第２の分割部が分割した後方ビット列と前方一致するバリューを検索する（ステップＳ２７）。
【００７５】
バリュー返却部２５８は、後方ビット列検索部２５７が検索したバリューに含まれる対応データを、検索に該当するバリューとして端末装置４０に返却し（ステップＳ２８）、検索処理を終了する。
【００７６】
［実施の形態１の効果］
このように、実施の形態１に係る時空間情報管理装置２０は、格納対象の情報のうち時空間情報を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割し、分割した前方ビット列をキーに格納させ、該キーのバリューに、分割した後方ビット列及び対応データを格納先のノードに格納させる。この際、時空間情報管理装置２０は、前方ビット列のハッシュ値を計算し、計算したハッシュ値を（１）式に適用して、格納先のノード番号を取得している。ここで、（１）式では１つのノード番号を求めている。
【００７７】
本実施の形態１では、（１）式において、分散先のノード数Ｄを設定する。これによって、データが同じキー「Ａ」を有する場合でも、各データは、Ｄ台のノードに分かれて格納される。また、本実施の形態１では、データがキー「Ｂ」を有すれば、（１）式において異なるキーのハッシュ値が計算されるため、キー「Ａ」のデータが格納されるノードとは、別の複数台のノードのいずれかに格納される。
【００７８】
したがって、時空間情報管理装置２０によれば、ある時間及びある地域において、データが偏った場合であっても、それぞれのデータに対し、格納先のノードとして、それぞれ異なるノードが算出される。このため、時空間情報管理装置２０によれば、同じ時間や同じ地域のデータを格納する場合であっても、複数のノードにそれぞれ分散して格納することができ、ノード間での負荷の偏りを軽減することができる。この結果、時空間情報管理装置２０によれば、時空間情報を含む大量のデータを適切に分散して格納できる。
【００７９】
図１３及び図１５は、従来のデータベースシステムのデータ分散を説明する図である。図１４及び図１６は、本実施の形態１に係る時空間情報管理装置２０が行うデータ分散を説明する図である。
【００８０】
図１３に示すように、従来のデータ処理装置２０Ｐは、予め定義した領域で時空間データを分割し、データ配置を決定する。このため、従来では、領域に応じてデータの粗密が異なり、特定のノードに負荷を集中していた。したがって、従来では、特定のノードの負荷を分散させるために、ノードの追加に伴うデータの再配置が発生してしまい（図１３の（１）参照）、格納先情報の追加及び更新が必要となる。
【００８１】
また、図１５に示すように、事前の定義領域の割り当てる従来の手法では、ノード間で負荷が偏るという問題があった（図１５の（１），（２）参照）。例えば、東京都を４地域に事前に分割し、４つのノードにそれぞれエリア１〜４を割り当てた場合、エリア１では、データが少なく負荷が少ないのに対し、エリア４ではデータが多く負荷が大きくなる。このように、従来手法では、エリアに応じてデータの粗密が異なり、特定のノードに負荷が集中していた。
【００８２】
特に、移動するＩｏＴ機器は、時間帯（ラッシュ時と夜間）や地域（都会と郊外）によって存在する機器の数が大幅に異なる。このため、従来手法では、キーに時間情報や位置情報を保持した状態でセカンダリインデクスを利用すると、一つのキーが保持するバリュー数が大幅に異なり、結果として分散キーバリューストアを構成するノード間で負荷の偏りが発生していた。すなわち、従来手法では、特定のノードへの負荷集中が発生していた。
【００８３】
これに対し、図１４に示すように、時空間情報管理装置２０では、常に複数のノードにデータを分散するため、各ノードが保持するデータ量が均等に分散し、性能を維持することができる。また、図１６に示すように、本実施の形態１によれば、データを複数のノードに分散して格納し、検索時に複数のノードからデータを取得するため、ノード間で負荷が均一になる。言い換えると、時間帯や地域に応じたデータの偏りに影響を受けずにデータを分散できる。したがって、時空間情報管理装置２０によれば、時空間情報という多次元の情報をデータストアに効率的に格納することができる。
【００８４】
また、時空間情報管理装置２０は、検索対象の時空間情報の範囲条件を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割して、検索先のノードから、分割した前方ビットを用いてキーを検索し、検索されたキーのバリューから、分割した後方ビット列に対応するバリューを検索し、検索したバリューに含まれる対応データを検索結果として出力する。
【００８５】
ここで、時空間情報管理装置２０は、全ノードに対して検索を行うのではなく、（２）式を用いて計算した一定数（Ｄ台）のノードに絞ってキー検索を行う。その後、検索されたキーのセカンダリインデクス部による前方一致検索を行い、格納されたデータを検索する。このため、時空間情報管理装置２０は、１台のノードに検索が集中することもない。また、時空間情報管理装置２０は、一定数のノードに絞ってキー検索を行うため、全ノードにキー検索を行う場合と比して、検索処理の負荷を低減しながら、検索処理を効率かつ高速に実行することができる。
【００８６】
また、従来のＲＤＢＭＳでは、時空間情報の格納時に、大量のデータが格納されるたびにインデクスの作成および更新が必要となり、インデクス作成処理のために一定以上の時間が必要となる。これに対し、時空間情報管理装置２０は、時空間情報の格納時に、１次元ビット列変換法を用いて時空間情報を変換し、このうちの前方ビットをキーとして用いる。１次元ビット列変換法は比較的簡易な処理であるため、時空間情報管理装置２０は、従来よりも、インデクス作成処理の時間を削減することができる。したがって、時空間情報管理装置２０は、従来の格納手法に比して、多次元の情報である時空間情報の格納を高速化かつ効率化できる。
【００８７】
このように、本実施の形態１に係る時空間情報管理装置２０を用いて、時空間情報を格納及び検索することによって、データストアを構成するノード間での処理負荷を分散することができる。このため、時空間情報管理装置２０によれば、移動するＩｏＴ機器のデータを扱う事業者は、膨大な量のデータを高速に格納することができる。また、時空間情報管理装置２０によれば、事業者は、時空間情報の範囲条件による高速な検索を行えることが可能になるため、展開可能なサービスを拡大する効果が期待できる。
【００８８】
［実施の形態１の変形例］
次に、実施の形態の変形例１について説明する。図１７は、実施の形態１の変形例に係る時空間情報管理装置の構成の一例を示す図である。図１７に示すように、時空間情報管理装置２０Ａは、図６に示す時空間情報管理装置２０の制御部２３に代えて制御部２３Ａを有する。時空間情報管理装置２０Ａは、記憶部２２に、分散先ノード組合せ情報２２１Ａを有する。
【００８９】
分散先ノード組合せ情報２２１Ａは、予め作成された格納先のノードの組合せ表である。図１８は、分散先ノード組合せ情報２２１Ａのデータ構成の一例を示す図である。図１８に示すように、分散先ノード組合せ情報２２１Ａは、パターン番号ｋ（ｋ＝０，１，２，３，・・・，ｎＣｄ−１）と、分散先のノード番号の組合せｉｍとが対応付けられた一覧表である。なお、ｎは、ノードの台数であり、ｄは、格納先のノードの台数である。
【００９０】
制御部２３Ａは、格納部２４Ａ及び検索部２５Ａを有する。格納部２４Ａは、図６に示す格納先ノード計算部２４５に代えて、格納先ノード計算部２４５Ａを有する。格納先計算部２４５Ａは、分散先のノードの組合せを選択する。格納先計算部２４５Ａは、第１の分割部２４３が分割した前方ビットをキーとし、第１のハッシュ値計算部２４４が計算したハッシュ値を用いて、分散先のノードの組合せを選択する。
【００９１】
具体的には、格納先計算部２４５Ａは、（３）式を用いて、分散先のノード番号の組合せのパターン番号ｋを計算する。
【００９２】
【数３】
2020013539.tif 000005
【００９３】
続いて、格納先ノード計算部２４５Ａは、パターン番号ｋに対応するノード番号の組合せｉｍを、分散先ノードの組合せ情報２２１Ａから取得し、組合せｉｍに含まれるノード中から、格納先のノードを（４）式を用いて計算する。
【００９４】
【数４】
2020013539.tif 000006
【００９５】
そして、実施の形態と同様に、キー設定部２４６、バリュー設定部２４７及び格納指示部２４８は、格納先ノード計算部２４５Ａが計算した格納先のノードにデータを格納させる。
【００９６】
また、検索部２５Ａは、検索先ノード計算部２５５に代えて、検索先ノード計算部２５５Ａを有する。検索先ノード計算部２５５Ａは、検索先のノードの組合せを選択する。検索先ノード計算部２５５Ａは、第２の分割部２５３が分割した前方ビットをキーとして、第２のハッシュ値計算部２５４が計算したハッシュ値を、（３）式に適用し、検索先のノードの組合せを計算する。
【００９７】
具体的には、格納先計算部２４５Ａは、（３）式を用いて、分散先のノード番号の組合せのパターン番号ｋを計算する。
【００９８】
続いて、キー設定部２５６は、パターン番号ｋに対応するノード番号の組合せｉｍを、分散先ノードの組合せ情報２２１Ａから取得し、組合せｉｍに含まれるノードの中から、第２の分割部２５３が分割した前方ビット列と一致するキーを検索する。そして、実施の形態１と同様に、後方ビット列検索部２５７は、キー検索部２５６が検索したキーのバリューから、第２の分割部が分割した後方ビット列と前方一致するバリューを検索する。そして、バリュー返却部２５８は、後方ビット列検索部２５７が検索したバリューに含まれる対応データを、検索結果として出力する。
【００９９】
［格納処理の処理手順］
次に、時空間情報管理装置２０Ａによる情報の格納処理の処理手順について説明する。図１９は、図１７に示す時空間情報管理装置２０Ａによる情報の格納処理の処理手順を示すフローチャートである。図１９に示すステップＳ１１Ａ〜ステップＳ１４Ａは、図１１に示すステップＳ１１〜ステップＳ１４と同じ処理である。
【０１００】
格納先計算部２４５Ａは、（３）式を用いて、分散先のノードの組合せのパターン番号ｋを取得する（ステップＳ１５−１Ａ）。格納先ノード計算部２４５Ａは、パターン番号ｋに対応するノード番号の組合せｉｍを、分散先ノードの組合せ情報２２１Ａから取得し、組合せｉｍに含まれるノード中から、格納先のノードを、（４）式を用いて計算する（ステップＳ１５−２Ａ）。図１９に示すステップＳ１６Ａ〜ステップＳ１８Ａは、図１１に示すステップＳ１６〜ステップＳ１８と同じ処理である。
【０１０１】
［検索処理の処理手順］
次に、時空間情報管理装置２０Ａによる情報の検索処理の処理手順について説明する。図２０は、図１７に示す時空間情報管理装置２０Ａによる情報の検索処理の処理手順を示すフローチャートである。図２０に示すステップＳ２１Ａ〜ステップＳ２４Ａは、図１２に示すステップＳ２１〜ステップＳ２４と同じ処理である。
【０１０２】
検索先ノード計算部２５５Ａは、第２のハッシュ値計算部２５４が計算したハッシュ値を基に、検索先のノードの組合せを取得する（ステップＳ２５Ａ）。検索先ノード計算部２５５Ａは、第２のハッシュ値計算部２５４が計算したハッシュ値を、（３）式に適用し、検索先のノードの組合せのパターン番号ｋを計算し、パターン番号ｋに対応するノード番号の組合せｉｍを、分散先ノードの組合せ情報２２１Ａから取得する。
【０１０３】
そして、キー検索部２５６は、検索先ノード計算部２５５Ａが求めた組合せのノードから、第２の分割部２５３が分割した前方ビット列と一致する（等価である）キーを検索する（ステップＳ２６Ａ）。図２０のステップＳ２７及びステップＳ２８は、図１２のステップＳ２７及びステップＳ２８と同じ処理である。
【０１０４】
［実施の形態１の変形例の効果］
このように、時空間情報管理装置２０では、予め、格納先のノードの組合せ表を作成しておき、格納時には、第１の分割部２４３が分割した前方ビットの値をキーとして、ノードの組合せを選択し、選択したノードのいずれかに格納処理を行う。また、時空間情報管理装置２０では、検索時には、第２の分割部２５３が分割した前方ビットの値をキーとして、検索先のノードの組合せを求め、求めた組合せのノードに対して検索を行う。
【０１０５】
図２１は、図１７に示す時空間情報管理装置２０Ａが選択できるノードの組合せを示す図である。図２１では、Ｎを４台とし、Ｄを２台とした例を示す。図２１に示すように、時空間情報管理装置２０Ａは、全ノードに対する全ての組合せを、格納先として選択できるため、全ノードに均等に負荷を分散することができる。また、時空間情報管理装置２０Ａは、検索先のノードの組合せを正確に取得できるため、適切な検索も実現することができる。
【０１０６】
［実施の形態２］
本発明の実施の形態２について説明する。図２２は、実施の形態２における情報管理システムの構成の一例を示す図である。
【０１０７】
図２２に示すように、実施の形態２に係る情報管理システム２０１は、複数のノード１〜Ｎがクラスタ構成で動作するデータ記憶システム２３０を有する。そして、情報管理システム２０１は、格納部２２４及び検索部２２５を有する時空間情報管理装置２２０（情報管理装置）を有する。時空間情報管理装置２２０は、データ送信機器１０によって送信された取得データ（例えば、図２のリストＬ１）を、データ記憶システム２３０に格納することで管理する。また、時空間情報管理装置２２０は、データ記憶システム２３０が格納するデータの中から、検索対象の時空間情報の範囲条件に対応する対応データを検索結果として出力する。
【０１０８】
格納部２２４は、格納対象の情報のうち時空間情報を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割する。そして、格納部２２４は、格納対象の情報についてラベル番号を計算し、分割した前方ビット列及びラベル番号をキーに格納させ、該キーのバリューに、分割した後方ビット列及び対応データをデータ記憶システム２３０に格納させる。
【０１０９】
検索部２２５は、検索対象の時空間情報の範囲条件に対応する対応データを検索結果として出力する。検索部２２５は、検索対象の時空間情報の範囲条件を１次元ビット列に変換し、変換した１次元ビット列を前方ビット列及び後方ビット列に分割する。そして、検索部２５は、検索先のノードから、分割した前方ビット及びラベル番号と等価であるキーを検索し、検索されたキーのバリューから、分割した後方ビット列に対応するバリューを検索し、検索したバリューに含まれる対応データを検索結果として出力する。
【０１１０】
データ記憶システム２３０は、キーバリューストアである複数のノード１〜Ｎがクラスタ構成で動作する。図２３は、図２２に示すデータ記憶システム２３０が記憶するデータのデータ構成の一例を示す図である。図２３のリストＬ２２に示すように、ノード１〜Ｎが記憶するデータのデータ構成は、セカンダリインデクス部を有するキーバリュー型を想定している。
【０１１１】
具体的には、ノード１〜Ｎは、リストＬ２２のように、リストＬ２（図３参照）と同様に、ノードの識別情報、キー、バリューの項目を有する構成でデータを記憶する。リストＬ２２は、リスト２と異なり、キーには、時空間情報をビット列変換した際の前方ビット列及びラベル番号が格納される。
【０１１２】
そして、リストＬ２２では、例えば、ノードＮ１が、「前方ビット列1_ラベル番号」を格納するキーのバリューのうち、セカンダリインデクス部に「後方ビット列1」が格納され、データ部に「data1」を格納することを示す。
【０１１３】
［時空間情報管理装置の構成］
次に、時空間情報管理装置２２０の構成について説明する。図２４は、図２２に示す時空間情報管理装置２２０の構成の一例を示す図である。図２４に示すように、時空間情報管理装置２２０は、時空間情報管理装置２０と比して、格納部２２４及び検索部２２５を有する制御部２２３を有する。
【０１１４】
［格納部の構成］
格納部２２４は、格納受付部２４１、第１の変換部２４２、第１の分割部２４３、ラベル計算部２２４５、キー設定部２２４６、バリュー設定部２４７及び格納指示部２４８を有する。格納受付部２４１、第１の変換部２４２、第１の分割部２４３、キー設定部２２４６、バリュー設定部２４７及び格納指示部２４８は、図６に示す第１の変換部２４２、第１の分割部２４３、バリュー設定部２４７及び格納指示部２４８と同じ処理を行う。なお、ノードの台数であるＤの値は、可変であり、格納時には決められている。
【０１１５】
ラベル計算部２２４５は、第１の分割部２４３が分割した前方ビットとともにキーに格納するラベル番号を計算する。ラベル計算部２２４５は、（５）式を用いてラベル番号を計算する。
【０１１６】
【数５】
2020013539.tif 000007
【０１１７】
キー設定部２２４６は、第１の分割部２４３が分割した前方のビット列と、ラベル計算部２２４５が計算したラベル番号とを１組として、データ記憶システム２３０のキーへ格納する設定を行う。そして、バリュー設定部２４７は、格納先のノードのキーのうち、キー設定部２２４６が設定したキーのバリューに、第１の分割部２４３が分割した後方ビット列及び対応データを格納する設定を行う。格納指示部２４８は、キー設定２４６部及びバリュー設定部２４７の設定に応じて、格納先のノードにデータを格納させる。
【０１１８】
このように、格納部２２４は、（５）式を用いることによって、ラベル番号を求め、求めたラベル番号を前方ビット列に対応付けてキーに格納する。
【０１１９】
［検索部の構成］
次に、検索部２２５について説明する。検索部２２５は、検索受付部２５１、第２の変換部２５２、第２の分割部２５３、ラベル導出部２２５５、キー検索部２２５６、後方ビット列検索部２５７及びバリュー返却部２５８（出力部）を有する。検索受付部２５１、第２の変換部２５２、第２の分割部２５３、後方ビット列検索部２５７及びバリュー返却部２５８は、図６に示す検索受付部２５１、第２の変換部２５２、第２の分割部２５３、後方ビット列検索部２５７及びバリュー返却部２５８と同じ処理を行う。
【０１２０】
ラベル導出部２２５５は、格納時に決められたＤの値から検索対象のラベル番号を導出する。
【０１２１】
キー検索部２２５６は、データ管理システム２３０から、第２の分割部２５３が分割した前方ビット列及びラベル番号と一致するキーを検索する。そして、後方ビット列検索部２５７は、キー検索部２２５６が検索したキーのバリューから、第２の分割部が分割した後方ビット列と前方一致するバリューを検索する。バリュー返却部２５８は、後方ビット列検索部２５７が検索したバリューに含まれる対応データを、検索結果として出力する。
【０１２２】
［格納部の処理の流れ］
次に、図２５を参照して、格納部２２４の処理の流れについて具体的に説明する。図２５は、図２４に示す格納部２２４の処理の流れを説明する図である。
【０１２３】
図２５に示すように、例えば、格納受付部２４１が、「時刻(unix_timestamp):1483196400，経度：40.7212905884，緯度：-73.8441925049，データ部:“test_data1”」であるデータの入力を受け付けた場合について説明する。
【０１２４】
この場合、第１の変換部２４２は、３次元Ｚ曲線により時刻「1483196400」、経度「40.7212905884」，緯度「-73.8441925049」を1次元ビット列(例:96ビット)に変換する。得られた１次元ビット列は、「101010101101111001010110100110111010110010100010001000100011101001110111000100110011001000011011」である。
【０１２５】
続いて、第１の分割部２４３は、１次元ビット列を前方ビット列(例:４５ビット)、後方ビット列(例：５１ビット)に分割する。具体的には、第１の分割部２４３は、「101010101101111001010110100110111010110010100010001000100011101001110111000100110011001000011011」のうち、前方の４５ビット「101010101101111001010110100110111010110010100」を前方ビット列とし、後方の５１ビット「010001000100011101001110111000100110011001000011011」を後方ビット列として分割する。
【０１２６】
続いて、ラベル計算部２２４５は、（５）式に基づきラベル番号を計算する。例えば、Ｄ＝３の場合、ラベル番号Ｌ＝０、Ｌ＝１またはＬ＝２のうち、今回は、Ｌ＝０が選ばれたものとする。
【０１２７】
キー設定部２２４６は、データ記憶システム２３０のキーに前方ビット列及びラベル番号「101010101101111001010110100110111010110010100-0」を格納するように設定する。そして、バリュー設定部２４７は、キー「101010101101111001010110100110111010110010100-0」のバリューのうち、セカンダリインデクス部に、後方ビット列「010001000100011101001110111000100110011001000011011」を格納し、データ部に「test_data1」を格納する設定を行う。そして、この格納指示部２４８は、キー設定２２４６部及びバリュー設定部２４７の設定に応じて、データ記憶システム２３０にデータを格納させる。
【０１２８】
図２６は、図２２に示すデータ記憶システム２３０内のデータ保持形式を説明する図である。図２６のリストＬ２２ａに示すように、図２４に示す格納部２２４の設定に従い、ノード「１」のキーに「101010101101111001010110100110111010110010100-0」が格納される。そして、リストＬ２２ａに示すように、このキー「101010101101111001010110100110111010110010100-0」のバリューのうち、セカンダリインデクス部に、「010001000100011101001110111000100110011001000011011」が格納され、データ部に「test_data1」が格納される。
【０１２９】
［検索部の処理の流れ］
次に、図２７を参照して、検索部２２５の処理の流れについて具体的に説明する。図２７は、図２４に示す検索部２２５の処理の流れを説明する図である。また、図２８は、図２２に示すデータ記憶システム２３０内のデータ保持形式を説明する図である。
【０１３０】
図２７に示すように、例えば、検索受付部２５１が、検索条件として、「時刻(unix_timestamp)：1483194823〜1483196748，経度:40.7211685180〜40.7213401794，緯度：-73.8442611694〜-73.8439178466」の入力を受け付けた場合について説明する。
【０１３１】
この場合、第２の変換部２５２は、３次元Ｚ曲線により時刻「1483194823〜1483196748」、経度「経度:40.7211685180〜40.7213401794」、緯度「-73.8442611694〜-73.8439178466」の入力範囲を１次元ビット列に変換する。この例では、６０ビットで表現が可能であり、第２の変換部２５２は、ビット列「101010101101111001010110100110111010110010100010001000100011」を得ることができる。
【０１３２】
続いて、第２の分割部２５３は、１次元ビット列を前方ビット列(例:４５ビット)、後方ビット列(例：５１ビット)に分割する。具体的には、第２の分割部２５３は、「101010101101111001010110100110111010110010100010001000100011」のうち前方の４５ビット「101010101101111001010110100110111010110010100」を前方ビット列とし、後方の１５ビット「010001000100011」を後方ビット列として分割する。
【０１３３】
ラベル導出部２２５５は、Ｄの値から検索対象のラベル番号を導出する。そして、キー検索部２２５６は、データ記憶システム２３０から、前方ビット列及びラベル番号と等価であるキーを検索する。例えば、Ｄ＝３の場合、「101010101101111001010110100110111010110010100-0」、「101010101101111001010110100110111010110010100-1」、「101010101101111001010110100110111010110010100-2」のキーを検索する。この結果、リストＬ２２ａに示すように、ノード「１」の欄Ｃ１１のキーが検索キーとして検索される（図２８の（１），（２）参照）。
【０１３４】
続いて、後方ビット列検索部２５７は、キー検索部２５６が検索したキーのバリューから、後方ビット列「010001000100011」と前方一致するセカンダリインデクス部を検索する。この結果、ノード「１」の欄Ｃ１１のキーに対応するバリューのうち、後方ビット列「010001000100011」と前方一致する欄Ｃ１２が検索バリューとして検索される（図２８の（３）参照）。
【０１３５】
そして、バリュー返却部２５８は、後方ビット列検索部２５７が検索した欄Ｃ１２のセカンダリインデクス部に対応するデータ部のデータ「test_data1」（図２８の欄Ｃ１３参照）を、検索に該当するバリューとして、端末装置４０に返却する。（図２８の（４）参照）。
【０１３６】
［格納処理の処理手順］
次に、時空間情報管理装置２２０による情報の格納処理の処理手順について説明する。図２９は、図２４に示す時空間情報管理装置２２０による情報の格納処理の処理手順を示すフローチャートである。
【０１３７】
図２９に示すステップＳ３１〜ステップＳ３３は、図１１に示すステップＳ１１〜ステップＳ１３と同じ処理である。ラベル計算部２２４５は、第１の分割部２４３が分割した前方ビットとともにキーに格納するラベル番号を（５）式を用いて計算する（ステップＳ３４）。キー設定部２２４６は、第１の分割部２４３が分割した前方のビット列と、ラベル計算部２２４５が計算したラベル番号とを１組として、データ記憶システム２３０のキーへ格納する設定を行う（ステップＳ３５）。図２９に示すステップＳ３６及びステップＳ３７は、図１１に示すステップＳ１７及びステップＳ１８と同じ処理である。
【０１３８】
［検索処理の処理手順］
次に、時空間情報管理装置２２０による情報の検索処理の処理手順について説明する。図３０は、図２４に示す時空間情報管理装置２２０による情報の検索処理の処理手順を示すフローチャートである。
【０１３９】
図３０に示すステップＳ４１〜ステップＳ４３は、図１２に示すステップＳ２１〜ステップＳ２３と同じ処理である。ラベル導出部２２５５は、Ｄの値から検索対象のラベル番号を導出する（ステップＳ４４）。
【０１４０】
キー検索部２２５６は、データ記憶システム２３０のから、第２の分割部２５３が分割した前方ビット列及びラベル番号と等価であるキーを検索する（ステップＳ４５）。図３０に示すステップＳ４６及びステップＳ４７は、図１２に示すステップＳ２７及びステップＳ２８と同じ処理である。
【０１４１】
この実施の形態２の処理を行うことによって、複数のノード１〜Ｎがクラスタ構成で動作するデータ記憶システム２３０についても適用が可能であり、複数のノードにそれぞれ分散して格納することができ、ノード間での負荷の偏りを軽減することができる。
【０１４２】
［システム構成等］
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部又は任意の一部が、ＣＰＵ及び当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１４３】
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的におこなうこともでき、あるいは、手動的に行なわれるものとして説明した処理の全部又は一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１４４】
［プログラム］
図３１は、プログラムが実行されることにより、時空間情報管理装置２０が実現されるコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【０１４５】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１１００に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１１３０に接続される。
【０１４６】
ハードディスクドライブ１０９０は、例えば、ＯＳ（Operating  System）１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、時空間情報管理装置２０の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０９０に記憶される。例えば、時空間情報管理装置２０における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。なお、ハードディスクドライブ１０９０は、ＳＳＤ（Solid  State  Drive）により代替されてもよい。
【０１４７】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【０１４８】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３及びプログラムデータ１０９４は、ネットワーク（ＬＡＮ、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３及びプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【０１４９】
以上、本発明者によってなされた発明を適用した実施形態について説明したが、本実施形態による本発明の開示の一部をなす記述及び図面により本発明は限定されることはない。すなわち、本実施形態に基づいて当業者等によりなされる他の実施形態、実施例及び運用技術等は全て本発明の範疇に含まれる。
【符号の説明】
【０１５０】
１，２０１  情報管理システム
１０  データ送信機器
２０，２０Ａ，２２０  時空間情報管理装置
２１  通信部
２２  記憶部
２３，２３Ａ，２２３  制御部
２４，２４Ａ，２２４  格納部
２５，２５Ａ，２２５  検索部
３０，２３０  データ記憶システム
４０  端末装置
４１  アプリケーション
２２１Ａ  分散先ノード組合せ情報
２４１  格納受付部
２４２  第１の変換部
２４３  第１の分割部
２４４  第１のハッシュ値計算部
２４５，２４５Ａ  格納先ノード計算部
２４６，２２４６  キー設定部
２４７  バリュー設定部
２４８  格納指示部
２５１  検索受付部
２５２  第２の変換部
２５３  第２の分割部
２５４  第２のハッシュ値計算部
２５５，２５５Ａ  検索先ノード計算部
２５６，２２５６  キー検索部
２５７  後方ビット列検索部
２５８  バリュー返却部
２２４５  ラベル計算部
２２５５  ラベル導出部
【図１】
2020013539.tif 000008
【図２】
2020013539.tif 000009
【図３】
2020013539.tif 000010
【図４】
2020013539.tif 000011
【図５】
2020013539.tif 000012
【図６】
2020013539.tif 000013
【図７】
2020013539.tif 000014
【図８】
2020013539.tif 000015
【図９】
2020013539.tif 000016
【図１０】
2020013539.tif 000017
【図１１】
2020013539.tif 000018
【図１２】
2020013539.tif 000019
【図１３】
2020013539.tif 000020
【図１４】
2020013539.tif 000021
【図１５】
2020013539.tif 000022
【図１６】
2020013539.tif 000023
【図１７】
2020013539.tif 000024
【図１８】
2020013539.tif 000025
【図１９】
2020013539.tif 000026
【図２０】
2020013539.tif 000027
【図２１】
2020013539.tif 000028
【図２２】
2020013539.tif 000029
【図２３】
2020013539.tif 000030
【図２４】
2020013539.tif 000031
【図２５】
2020013539.tif 000032
【図２６】
2020013539.tif 000033
【図２７】
2020013539.tif 000034
【図２８】
2020013539.tif 000035
【図２９】
2020013539.tif 000036
【図３０】
2020013539.tif 000037
【図３１】
2020013539.tif 000038