(57)【要約】  デバイス（３０）によって生成されたデータを、当該データが生成された時刻順に到着した場合、データが到着した順に実データ記録部（１２ｂ）へ追記（書き込み）しつつ、当該実データ記録部（１２ｂ）に追記したデータが生成された時刻、データサイズ、および実データファイルにおける追記位置を、当該データが記録された実データファイルと対応するファイル名を有するｉｎｄｅｘファイル（１２ａ）にインデックス情報として追記する。
2019092990.tif 000002
【特許請求の範囲】
【請求項１】
データが生成された時刻と、当該データの記録される位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするｉｎｄｅｘファイルを記録するインデックス記録部と、
前記ｉｎｄｅｘファイルのファイル名と、第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ位置情報、および前記データが生成された時刻、を前記ｉｎｄｅｘファイルにインデックス情報として書き込む書き込み処理部と、
時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記ｉｎｄｅｘファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、
を備える情報蓄積装置。
【請求項２】
前記データが生成された時刻と、当該データの記録される位置情報と、を含んだデータ列であるインデックス情報は、固定長のデータ列である、請求項１に記載の情報蓄積装置。
【請求項３】
前記書き込み処理部は、生成されたデータの時刻順に前記実データファイルに当該データを追記する、請求項１または請求項２に記載の情報蓄積装置。
【請求項４】
前記実データファイルへの書き込み対象となるデータの生成された時刻が、前記ｉｎｄｅｘファイルの先頭行に記述された前記インデックス情報が含む時刻より過去の時刻である場合に行う処理として、
前記書き込み処理部は、
前記データの生成された時刻に基づき、前記インデックス情報を挿入すべきｉｎｄｅｘファイルを検索するｉｎｄｅｘファイル検索と、
前記ｉｎｄｅｘファイル検索により検索されたｉｎｄｅｘファイルに前記書き込み対象となるデータの生成された時刻を含むインデックス情報を挿入する行を検索するインデックス情報挿入行検索と、
前記ｉｎｄｅｘファイル検索により検索されたｉｎｄｅｘファイルのファイル名と、前記第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名の実データファイルに前記データを書き込み、当該書き込んだデータが生成された時刻およびそのデータが書き込まれた位置情報を含むインデックス情報を、前記インデックス情報挿入行検索により検索されたｉｎｄｅｘファイル内の挿入すべき行に挿入するインデックス情報挿入と、
を行う、請求項１または請求項２に記載の情報蓄積装置。
【請求項５】
前記実データファイルへの書き込み対象となるデータの生成された時刻が、前記ｉｎｄｅｘファイルの先頭行に記述された前記インデックス情報が含む時刻より新しい時刻である場合に行う処理として、
前記書き込み処理部は、
前記データの生成された時刻に基づき、前記ｉｎｄｅｘファイルに前記書き込み対象となるデータの生成された時刻を含むインデックス情報を挿入する行を検索するインデックス情報挿入行検索と、
前記ｉｎｄｅｘファイル検索により検索されたｉｎｄｅｘファイルのファイル名と、前記第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名の実データファイルに前記データを書き込み、当該書き込んだデータが生成された時刻およびそのデータが書き込まれた位置情報を含むインデックス情報を、前記ｉｎｄｅｘファイル内の挿入すべき行に挿入するインデックス情報挿入と、
を行う、請求項１または請求項２に記載の情報蓄積装置。
【請求項６】
前記読み出し処理部は、
読み出し対象とされるデータの読み出し開始時刻とその終了時刻とがそれぞれ指定されると、当該開始時刻と終了時刻とを含んだインデックス情報が同一のｉｎｄｅｘファイル内であるか否かを判断するファイル判断と、
前記ファイル判断により、前記同一のｉｎｄｅｘファイル内に前記データの読み出し開始時刻と終了時刻とを含んだインデックス情報が含まれると判断された場合、当該開始時刻と終了時刻とがそれぞれ含まれるインデックス情報に従い、前記実データファイルからデータを読み出す実ファイルデータ読み出しと、
前記ファイル判断により、前記データの読み出し開始時刻と終了時刻とを含むインデックス情報が複数のｉｎｄｅｘファイルに跨がっていると判断された場合、当該開始時刻と終了時刻とがそれぞれ含まれるインデックス情報に従い、複数の前記実データファイルからデータを読み出す複数実ファイルデータ読み出しと、
を行う、請求項１に記載の情報蓄積装置。
【請求項７】
前記読み出し処理部は、
読み出し対象とされるデータの読み出し時刻が指定されると、当該時刻を含んだインデックス情報に基づいて、前記実データファイルを検索する実データファイル検索と、
前記実データファイル検索によって検索された実データファイルから、前記インデックス情報に基づいて、前記指定された時刻のデータを読み出すデータ読み出しと、
を行う、請求項１に記載の情報蓄積装置。
【請求項８】
前記ｉｎｄｅｘファイルのファイルサイズは、ＯＳのページングサイズの倍数である、請求項１乃至請求項７のいずれか一項に記載の情報蓄積装置。
【請求項９】
時刻と、この時刻に対応したデータと、を生成するデータ生成装置と、
前記データ生成装置によって生成されたデータを実データファイルに書き込み、書き込んだ当該データを、外部からの読み出し要求に応じて読み出す情報蓄積装置と、
を備え、
前記情報蓄積装置は、
前記データ生成装置によって生成されたデータの記録される位置情報と、このデータが生成された時刻と、を含んだ固定長のデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするｉｎｄｅｘファイルを記録するインデックス記録部と、
前記ｉｎｄｅｘファイルのファイル名と、第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、当該インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ位置情報、および前記データが生成された時刻、を前記ｉｎｄｅｘファイルにインデックス情報として書き込む書き込み処理部と、
時刻に基づいた前記読み出し要求を受信すると、当該時刻に対応するファイル名を含む前記ｉｎｄｅｘファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、
を具備する、データ処理システム。
【請求項１０】
コンピュータに、
データが生成された時刻と、当該データの記録される位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするｉｎｄｅｘファイルを、インデックス記録部に記録する機能と、
前記ｉｎｄｅｘファイルのファイル名と、第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを、実データ記録部に記録する機能と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ位置情報、および前記データが生成された時刻、を前記ｉｎｄｅｘファイルにインデックス情報として書き込む機能と、
時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記ｉｎｄｅｘファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩｏＴデータを高速に読み書き可能な情報蓄積装置、データ処理システム、およびプログラムに関する。
【背景技術】
【０００２】
近年、種々のデータを取得可能なセンサなどの様々なデバイスをネットワークに接続して構成されるシステムで、前記デバイスが生成するデータを活用したＩｏＴ（Ｉｎｔｅｒｎｅｔ  Ｏｆ  Ｔｈｉｎｇｓ）が注目されている。【０００３】
ＩｏＴを用いたシステムでは様々なデバイスから継続的または定期的にデータを取得することから、時間経過とともに順次生成される多量のデータを高速に書き込み・読み出し可能なデータベースが必要となる。【０００４】
また、ＩｏＴを用いた分野では様々なデバイスを多量に用いて種々のデータを取得する場合が多いことから、使用されるデバイスは安価であることが求められる。そのため、大容量メモリを有する高価なデバイスを利用することが困難な場合が多い。【０００５】
一方、時間経過とともに順次生成されるデータを書き込むデータベースとして、従来ではＰｏｓｔｇｒｅＳＱＬなどの追記型データベースが利用されている（例えば、非特許文献１参照。）。【０００６】
一部の追記型データベースでは、ディスクへのデータの書き込み時にインデックス作成等の処理を行う場合がある。ここで、インデックスとは、ファイルに書き込んだデータをより早く検索したり、抽出したりするように作られた検索データのことをいう。【０００７】
一般的に、アプリから書き込みを依頼されたデータに対して生成されるインデックスの数や種類が増加すると、当該インデックスの数や種類に応じてインデックスの生成やインデックスデータの書き込みが書き込み処理全体のオーバーヘッドとなる。【０００８】
また、データのサイズが固定長とは限らないため、データの書き込み時に特別な処理をせず追記を行うと、読み出し時にデータの線型探索の演算量Ｏ（ｎ）が必要となり、データの増加に応じて読み出し速度が遅くなるといった問題がある（例えば、非特許文献２参照。）。【０００９】
データ書き込み時のインデックス生成等の処理は、データの読み出し速度を高めるが、ＩｏＴ向けのデータベースでは、書き込み速度の確保のため、データの書き込み時の処理負荷をなるべく小さくすることが望ましい。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】赤間浩樹, et al. "追記・参照型データ管理システムの設計と評価," 情報処理学会論文誌 49.2 (2008): 749-764.
【非特許文献２】大駒誠一, 西村恕彦, and 昆野誠司, "情報検索特集号: ファイルの蓄積と探索," 情報処理 7.6 (1966).
【発明の概要】
【００１１】
ＩｏＴデータの特性として、時間経過とともにデバイスにより順次生成されたデータは、ネットワーク等を通る間に順序が入れ替わらない限り、当該生成された順にデータベースに到着するという特徴がある。
【００１２】
また、ＩｏＴでは時刻を指定してデータベースから必要なデータを読み出すケースが多いため、時刻に基づいた検索および読み出し処理が高速なデータベースが求められる。特に、直近の時刻における最新値を参照するアプリケーションが多いため、最新値の読み出し速度が高速であることも重要となる。
【００１３】
このように、ＩｏＴを用いた分野では、前記デバイスにより時間経過とともに順次生成され、生成された時刻順に到着するデータをデータベースに高速に書き込むとともに、日付・時刻等の情報（特定の時刻、時刻範囲、および直近の時刻）の指定により高速にデータを検索し、読み出すことのできるデータベースが求められる。
【００１４】
前述の通り、従来の技術では、データベースのメモリ領域上にインデックスを持たせることにより読み出しの高速化を行う手法が用いられていたが、インデックスのサイズと検索性能にはトレードオフ関係がある。
【００１５】
さらに、ＩｏＴで使用するデータは膨大な量であるため当然インデックスも膨大となる。そのため省メモリでの処理が難しいという課題があった。
【００１６】
さらに、副次的な課題として、ＩｏＴでは前記デバイスが生成するデータと、これに比べてデータ量の大きい画像・動画等のメディアデータと、を共通のデータベースで処理する場合があるが、これらはデータサイズや特性の違いから共通の仕組みで蓄積することが難しいといった問題があった。
【００１７】
本発明は、前記課題に鑑みてなされたものであり、第１に書き込み時の処理を最小限にとどめることで、省メモリ且つ高速にデータの読み書きを可能とし、第２にデバイスが生成するデータと画像等のメディアデータを共通のデータベースで高速に読み書き可能とする情報蓄積装置、データ処理システム、およびプログラムを提供することを目的とする。
【００１８】
本発明に係る情報蓄積装置は、データが生成された時刻と、当該データの記録される位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするｉｎｄｅｘファイルを記録するインデックス記録部と、前記ｉｎｄｅｘファイルのファイル名と、第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ位置情報、および前記データが生成された時刻、を前記ｉｎｄｅｘファイルにインデックス情報として書き込む書き込み処理部と、時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記ｉｎｄｅｘファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、を備える。
【００１９】
本発明によれば、第１に書き込み時の処理を最小限にとどめることで、省メモリ且つ高速にデータの読み書きが可能となり、第２にデバイスが生成するデータと画像等のメディアデータを共通のデータベースで高速に読み書き可能となる。
【図面の簡単な説明】
【００２０】
【図１】図１は、実施形態の情報蓄積装置１０を備えたデータ処理システムを示す図である。
【図２】図２は、前記情報蓄積装置１０において、データ記録部１２を外部に配置した場合を示す図である。
【図３】図３は、前記情報蓄積装置１０に設けられるインデックス記録部１２ａに格納されたｎ個のｉｎｄｅｘファイル（１〜ｎ、ｎ：自然数）を一例として示す図である。
【図４】図４は、前記情報蓄積装置１０に設けられる実データ記録部１２ｂに格納されたｎ個の実データ（１〜ｎ、ｎ：自然数）を示す図である。
【図５】図５は、前記実データ記録部１２ｂにＢＬＯＢデータが格納された場合のｎ個の実データ（１〜ｎ、ｎ：自然数）を示す図である。
【図６Ａ】図６Ａは、前記情報蓄積装置１０の書き込み処理にて使用される処理ステップ（初期化処理）を示すフローチャートである。
【図６Ｂ】図６Ｂは、前記情報蓄積装置１０の書き込み処理にて使用される処理ステップ（サブルーチン）を示すフローチャートである。
【図６Ｃ】図６Ｃは、前記情報蓄積装置１０の書き込み処理にて使用される処理ステップ（サブルーチン）を示すフローチャートである。
【図７】図７は、前記情報蓄積装置１０のデータｄの書き込み処理を示すフローチャートである。
【図８Ａ】図８Ａは、前記情報蓄積装置１０のデータｄの読み出し処理にて使用される処理ステップ（サブルーチン）を示すフローチャートである。
【図８Ｂ】図８Ｂは、前記情報蓄積装置１０のデータｄの読み出し処理にて使用される処理ステップ（サブルーチン）を示すフローチャートである。
【図８Ｃ】図８Ｃは、前記情報蓄積装置１０のデータｄの読み出し処理にて使用される処理ステップ（サブルーチン）を示すフローチャートである。
【図９】図９は、前記実データ記録部１２ｂに書き込まれたデータｄの読み出し処理を示すフローチャートである。
【図１０Ａ】図１０Ａは、前記情報蓄積装置１０の前記データｄの読み出し処理を実行するための処理ステップ（サブルーチン）を示すフローチャートである。
【図１０Ｂ】図１０Ｂは、前記情報蓄積装置１０の前記データｄの読み出し処理を実行するための処理ステップ（サブルーチン）を示すフローチャートである。
【図１１】図１１は、前記実データ記録部１２ｂに書き込まれたデータｄを読み出す処理を示すフローチャートである。
【発明を実施するための形態】
【００２１】
以下、本発明の実施形態に係る情報蓄積装置、データ処理システム、およびプログラムについて、図面を参照して説明する。
【００２２】
図１は、実施形態の情報蓄積装置１０を備えたデータ処理システムの構成を示す機能ブロック図である。
【００２３】
前記データ処理システムは、情報蓄積装置１０、メッセージブローカー２０、デバイス３０（センサ）（３０ａ〜３０ｃ）、Ｗｅｂサーバ４０、およびアプリケーション５０（５０ａ〜５０ｃ）を含んで構成される。
【００２４】
デバイス（センサ）３０（３０ａ〜３０ｃ）は、継続的または定期的に計測した種々のデータｄと、このデータｄが計測された時刻ｔと、を生成し、メッセージブローカー２０に送信する機能を有するデータ生成装置に相当する。以下、デバイス（センサ）３０を、単にデバイス３０と呼ぶ。
【００２５】
本実施形態では、このデバイス３０から送信されるデータｄを、生成された順にメッセージブローカー２０へ送信するといったＩｏＴ独自の特性を活かし、これらのデータｄを情報蓄積装置１０にて管理する。
【００２６】
このため前記デバイス３０は、情報蓄積装置１０に送信したデータｄおよび時刻ｔをデバイス３０内部に蓄積する必要のない構成とされる。
【００２７】
これにより、本データ処理システムでは、安価なデバイス３０を採用することができる。
【００２８】
メッセージブローカー２０は、前記デバイス３０によって生成されたデータｄおよびそのデータｄが生成された時刻ｔ（以下、生成時刻ｔと呼ぶことがある）を受信し、当該データｄと時刻ｔとを情報蓄積装置１０内に送信する機能を有する。
【００２９】
前記情報蓄積装置１０は、メッセージブローカー２０から受信したデータｄを前記デバイス３０による生成時刻ｔに従って、データ記録部１２に書き込む機能および前記Ｗｅｂサーバ４０を介したアプリケーション５０からの時刻ｔを指定したデータ読み出し要求に従って前記データ記録部１２からデータｄを読み出す機能を有する。
【００３０】
Ｗｅｂサーバ４０は、アプリケーション５０（５０ａ〜５０ｃ）から前記データ要求があると、情報蓄積装置１０へアクセスし、当該情報蓄積装置１０の前記データ記録部１２から読み出したデータｄを受信し、アプリケーション５０（５０ａ〜５０ｃ）へデータｄを送信する。
【００３１】
前記情報蓄積装置１０は、データ処理制御部１１およびデータ記録部１２を備える。
【００３２】
前記データ処理制御部１１は、予めＲＯＭ等の記憶部（図示せぬ）に記憶されたデータ処理制御プログラムに従い本情報蓄積装置１０を制御するＣＰＵ（Central Processing Unit）を備える。前記データ処理制御プログラムに従って動作するＣＰＵが、書き込み処理を行う書き込み処理部１１ａおよび読み出し処理を行う読み出し処理部１１ｂとして機能する。
【００３３】
そして、このデータ処理制御部１１の書き込み処理部１１ａは、後述する動作説明において詳述する書き込み処理に従い、受信したデータｄを実データ記録部１２ｂに書き込みつつ、当該データｄに関する固定長のデータ列から構成されるインデックス情報ＩＪとして“生成された時刻ｔ（日時）、データｄの容量（サイズ）、および前記実データ記録部１２ｂにデータｄを書き込みした領域（読み出し開始位置）”を、前記デバイス３０がデータｄを生成した時刻順にインデックス記録部１２ａに書き込む機能を有する。
【００３４】
更にこのデータ処理制御部１１の読み出し処理部１１ｂは、後述する動作説明において詳述する読み出し処理に従い、特定の時刻ｔまたは特定の時刻範囲をクエリ（ｑｕｅｒｙ：情報要求）として、前記インデックス記録部１２ａから当該時刻ｔを含むｉｎｄｅｘファイル（１〜ｎ、ｎ：自然数）を検索および取得する機能の他、当該検索および取得したｉｎｄｅｘファイルに設けられ、前記時刻ｔをデータ列に含む前記インデックス情報ＩＪを検索する機能を有する。
【００３５】
なお、ｉｎｄｅｘファイル１〜ｉｎｄｅｘファイルｎを区別しない場合には、単にｉｎｄｅｘファイルと呼ぶ。
【００３６】
図２は、図１に示す情報蓄積装置１０において、前記データ記録部１２（以下、データ記録領域１４と呼ぶ）を外部に配置した場合を示す図である。
【００３７】
データ記録領域１４は、前記データ記録部１２を前記情報蓄積装置１０の外部に配置したものであって、当該情報蓄積装置１０と、例えばバスＢＵＳで接続された構成であってもよい。
【００３８】
つまり、データ記録領域１４は、前記インデックス記録部１２ａおよび実データ記録部１２ｂと同一の機能を有するインデックス記録部１４ａおよび実データ記録部１４ｂを備える。以下では、データ記録部１２を用いて説明する。
【００３９】
図３は、前記インデックス記録部１２ａに格納されたｎ個のｉｎｄｅｘファイル（１〜ｎ）を一例として示す図である。
【００４０】
以下、ｉｎｄｅｘファイル１に着目し、他のｉｎｄｅｘファイル２〜ｉｎｄｅｘファイルｎについて説明を省略する。
【００４１】
図示するように、ｉｎｄｅｘファイル１には、先頭行（１行目）〜最終行（ｍ行目）の各行にインデックス情報ＩＪ１〜ＩＪｍが順に記録される。なお、インデックス情報ＩＪ１〜インデックス情報ＩＪｍを区別しない場合には、単にインデックス情報ＩＪと呼ぶ。
【００４２】
前記インデックス情報ＩＪ毎に“データｄに関する情報（日時、サイズ、読出開始位置）”が記述され、１行目に、例えばｉｎｄｅｘファイル１内で一番古い時刻ｔを含むインデックス情報ＩＪ１が配置され、最後のｍ行目に当該ｉｎｄｅｘファイル１内で一番新しい時刻ｔを含むインデックス情報ＩＪｍが配置される。なお、前記日時は、日付を変換した情報であってもよい。
【００４３】
また、前記インデックス情報ＩＪの一例として、“６４ｂｉｔのバイナリ表現で表される時刻”、“データサイズ”、“実データファイル内のデータ記録位置ＰＯＳ”、および“データ書き込み時のシステムクロック”から構成される３２ｂｙｔｅの情報を利用してもよい。
【００４４】
そして、ｉｎｄｅｘファイル１にインデックス情報ＩＪｍまでが記録され、当該ファイル１が許容する容量に達すると、新たなｉｎｄｅｘファイル２が生成され、当該ｉｎｄｅｘファイル２の先頭から順にインデックス情報ＩＪが記録される。
【００４５】
データの読み書き速度および記憶領域利用の効率を高めるために、ｉｎｄｅｘファイルのファイルサイズ（容量）をＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のページングサイズの倍数とすることができる。
【００４６】
前記ＯＳのカーネルがＨＤＤ（Ｈａｒｄ  ＤｉｓＫ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などの補助記憶装置から読み書きする処理は、ページングサイズを単位として行われるため、特に頻繁に読み書きされるｉｎｄｅｘファイルのサイズをページングサイズの倍数とすることで、ｉｎｄｅｘファイルの読み書き速度および記憶領域利用の効率が向上する。
【００４７】
ここで、例えばページングサイズとは、メモリセルアレイＭＣＡを構成する、例えばｌ行×ｋ列に配置されたメモリセルＭＣにおいて、「１行×ｋ列のメモリセルＭＣ群の各々が記録するデータで構成されるデータ列の単位」をいう。
【００４８】
尚、ｉｎｄｅｘファイル３、…、ｉｎｄｅｘファイルｎについても必要に応じて新規作成され、これらのファイル３〜ファイルｎに順次前記インデックス情報ＩＪが記録されることになる。
【００４９】
また、これらｉｎｄｅｘファイル１〜ｉｎｄｅｘファイルｎに設定するファイル名は、以下、第１〜第３のいずれかの手法により採用してもよい。
【００５０】
すなわち、第１に、例えばインデックス情報ＩＪに記述された日時から１つを選択する一定の基準の一例として、ｉｎｄｅｘファイルの先頭行に記載されたデータｄの日時を選択として、これをｉｎｄｅｘファイル名としてもよい。
【００５１】
第２に、ｉｎｄｅｘファイル名と、実データファイル名と、をｉｎｄｅｘファイル内の選択されたデータｄの日時を用いて、小さい計算量で相互に変換できる単純な規則で設定する一例として、インデックス情報ＩＪに６４ｂｉｔの符号なし整数表現した日時を記述する他、１２８ｂｉｔのバイナリ表現で記述された日時を、４ｂｉｔずつ１６進ＡＳＣＩＩ文字で連結した文字列を含むファイル名を、これらファイル名としてもよい。
【００５２】
第３に、前記基準と規則との組み合わせの一例として、インデックス情報ＩＪに６４ｂｉｔのバイナリ表現で記述された日時のうちｉｎｄｅｘファイルの先頭に記載されたものを選択し、１２８ｂｉｔの１６進数で表現した文字列を、ｉｎｄｅｘファイルおよび実データファイルのファイル名の一部としてもよい。
【００５３】
図４は、実データ記録部１２ｂに格納されたｎ個の実データファイル（１〜ｎ、ｎ：自然数）を示す図である。
【００５４】
以下、実データファイル１に着目し、他の実データファイル２〜実データファイルｎについては説明を省略する。  
図示するように、実データファイル１には、先頭から、例えば領域１（ＰＯＳＡＬ１）にデータｄ１、領域２（ＰＯＳＡＬ２）にデータｄ２、…、領域ｍ（ＰＯＳＡＬｍ）にデータｄｍが順に記録される。なお、ＰＯＳＡＬ１〜ＰＯＳＡＬｍは、書き込み対象のデータｄが記録される実データファイル１内の位置情報である。また、例えばデータｄ１とデータｄ２との間に、当該データｄ１、データｄ２を区別するための任意の記号を挿入してもよい。
【００５５】
そして、前記データｄ１〜データｄｍは、前記ｉｎｄｅｘファイル１に記録された１行目からｍ行目までのインデックス情報ＩＪ１〜インデックス情報ＩＪｍに対応している。
【００５６】
つまり、当該ｉｎｄｅｘファイル１内に記録されたインデックス情報ＩＪ１〜インデックス情報ＩＪｍに対応するデータｄ１〜データｄｍが、この実データファイル１に記録される。
【００５７】
これは、例えばｉｎｄｅｘファイルｎと実データファイルｎについても同様の関係が成立する。
【００５８】
そして、ｉｎｄｅｘファイルに基づいて容易かつ迅速に実データファイルからデータｄの読み出し処理ができるよう、例えば、当該実データファイル１を、前記ｉｎｄｅｘファイル１と対応するファイル名にしている。ｉｎｄｅｘファイルｎと実データファイルｎについても同様の関係が成立する。
【００５９】
また、以下説明する容量の大きな画像、動画および音声などのＢＬＯＢ（Ｂｉｎａｒｙ  Ｌａｒｇｅ  Ｏｂｊｅｃｔ）データを、例えば実データファイル１に記録する場合であっても、ｉｎｄｅｘファイル１と同様の対応関係が維持されている。
【００６０】
具体的には、ＢＬＯＢデータを記録する実データファイル名は、ｉｎｄｅｘファイル内のインデックス情報ＩＪに記述された対応するＢＬＯＢデータの生成時刻に基づいて設定される。具体的には、実データファイル名と、前記ＢＬＯＢデータの生成時刻と、が小さい計算量で一意かつ相互に変換できる単純な規則で対応づけられる。
【００６１】
図５は、前記ＢＬＯＢデータが実データ記録部１２ｂに記録された場合を示す図であり、前記実データ記録部１２ｂには、実データファイル１〜実データファイルｎ（１〜ｎ、ｎ：自然数）が記録される。
【００６２】
以下、実データファイル１に着目し、他の実データファイル２〜実データファイルｎについては説明を省略する。  
図示するように、実データファイル１内に、１つのＢＬＯＢデータが記録される。すなわち、ｎ個の実データファイル１〜実データファイルｎが実データ記録部１２ｂに記録されていれば、全部でｎ個のＢＬＯＢデータが記録されることになる。
【００６３】
このような構成を採用することで、デバイス３０が生成するデータｄと、画像・動画等のＢＬＯＢデータと、を共通のデータベースで処理することができ、例えばこれらデータｄやＢＬＯＢデータのサイズや特性の違いから共通の仕組みで蓄積することが難しいといった問題を解消することができる。
【００６４】
このように構成された情報蓄積装置１０は、前記データ処理制御部１１内のＣＰＵが前記データ処理制御プログラムに記述された命令に従い各部の動作を制御し、ソフトウエアとハードウエアとが協働して動作することにより、以下の動作説明で述べるような、各種のデータ書き込み処理の機能およびデータ読み出し処理の機能を実現する。
【００６５】
次に情報蓄積装置１０による（書き込み、読み出し）動作について説明する。  
［書き込み処理（ｔ、ｄ）］  
図６Ａ，図６Ｂ，図６Ｃは、後述するデータｄの書き込み処理（ステップＳ１〜ステップＳ１０）にて使用される処理ステップを示すフローチャートである。
【００６６】
具体的には、図６Ａは初期化処理、図６Ｂは書き込み対象となるデータｄ用のｉｎｄｅｘファイルを検索する処理を示すサブルーチンＡ（ｔ）、そして図６Ｃは書き込み対象となるｉｎｄｅｘファイルにインデックス情報ＩＪを挿入する位置情報ＰＯＳを取得するためのサブルーチンＢ（Ｉｔ、ｔ）を示す。
【００６７】
なお、前記サブルーチンＡ（ｔ）およびサブルーチンＢ（Ｉｔ、ｔ）は、データｄの生成順に当該データｄが情報蓄積装置１０に到着できず、通信経路の途中で順序が逆転してしまったデータｄを、書き込むべきｉｎｄｅｘファイルおよび実データファイルに割り込んで書き込む際に使用する処理フローである。
【００６８】
ここで、図６Ａ，図６Ｂ，図６Ｃにおいて、  
ｔＬ：書き込み済みのデータｄの中で最新のデータｄの生成時刻ｔ、  
ＩＬ：時刻ｔＬのデータｄに関するインデックス情報ＩＪを含むｉｎｄｅｘファイル、  ＡＬ：時刻ｔＬのデータｄを含む実データファイル、  
とする。
【００６９】
まず初期化処理を実行し、前記デバイス３０によりこの先生成される全データｄの生成時刻ｔ（例えば、２０ｘｘ年ｙｙ月ｚｚ日ｎｎ時ｍｍ分ｌｌ秒）よりも過去の時刻（例えば、１９ＸＸ年ＹＹ月ＺＺ日ＮＮ時ＭＭ分ＬＬ秒）をパラメータｔＬに代入する（ステップＰ１）。
【００７０】
ついで、ｉｎｄｅｘファイル用のパラメータＩＬに“ＮＵＬＬ”を代入し（ステップＰ２）、実データ記録部１２ｂ内の実データファイル用のパラメータＡＬにも同様に“ＮＵＬＬ”を代入し、初期化処理を終了する（ステップＰ３）。
【００７１】
この初期化処理により、インデックス記録部１２ａおよび実データ記録部１２ｂには、ｉｎｄｅｘファイルや実データファイルが生成されておらず、当然データｄも記録されていない空の状態となる。
【００７２】
次に、図６Ｂに示すサブルーチンＡ（ｔ）処理により、データｄの生成された時刻ｔと一致するｉｎｄｅｘファイル名、または当該時刻ｔよりも過去であって且つその中でも最新のｉｎｄｅｘファイル名が検索、取得される（ステップＰ１０）。
【００７３】
ここで、各ｉｎｄｅｘファイル名は、固定長のデータ列（例えば８ｂｙｔｅの“０”および“１”のデータ列）から構成されるバイナリデータで記載されている。このため、検索方法の一つであるバイナリサーチ（二分探索）といったＯＳのシステムコールにより高速にファイルを検索することができる。
【００７４】
さらに図６Ｃに示すサブルーチンＢ（Ｉｔ、ｔ）処理により、前記サブルーチンＡ（ｔ）による処理で得られたｉｎｄｅｘファイル内で、書き込み対象とされるデータｄが生成された時刻ｔが含まれるインデックス情報ＩＪ、またはこの時刻ｔよりも過去の時刻であって且つその中でも最新の時刻を含むインデックス情報ＩＪを検索し、新規のインデックス情報ＩＪを挿入する位置情報ＰＯＳ（行）が取得される（ステップＰ２０）。
【００７５】
この取得された位置情報ＰＯＳ（行）は、後述するパラメータＰＯＳＩｔに代入される。
【００７６】
以上の初期化処理、サブルーチンＡ（ｔ）、およびＢ（Ｉｔ、ｔ）処理を踏まえて、以下説明するメインの書き込み処理を実行する。
【００７７】
図７は、前記サブルーチンＡ（ｔ）、およびサブルーチンＢ（Ｉｔ、ｔ）を含むデータｄの書き込み処理を示すフローチャートである。
【００７８】
ここで、図７において、  
Ｉｔ：時刻ｔに生成されたデータｄのインデックス情報ＩＪが書き込まれるｉｎｄｅｘファイル、  
ＰＯＳＩｔ：Ｉｔ内で時刻ｔのデータｄに関するインデックス情報ＩＪが書き込まれる位置、  
Ａｔ：時刻ｔに生成されたデータｄが書き込まれる実データファイル、  
ＰＯＳＡｔ：Ａｔ内でデータｄが書き込まれる位置、  
ＰＯＳＡＬ：ＡＬ内で時刻ｔに生成されたデータｄが書き込まれる位置、  
とする。
【００７９】
まず、書き込み対象となるデータｄの生成時刻ｔが、前記パラメータｔＬに対して新しい時刻の場合（ステップＳ１、ＹＥＳ）、すなわち、前記初期化処理により前記パラメータｔＬに格納された初期値（あらゆる生成時刻ｔよりも古い時刻）よりも新しい時刻ｔに生成されたデータｄが、その生成時刻ｔに従って順当に情報蓄積装置１０に到着したと判断されると（ステップＳ１、ＹＥＳ）、次いでインデックス記録部１２ａ内にｉｎｄｅｘファイルが作成されている（図中、ＩＬ＝＝ＮＵＬＬと表記）か否か、または仮にｉｎｄｅｘファイルが既に生成されている場合には、データｄをこの先書き込もうとしているこのｉｎｄｅｘファイルの容量が上限に達しているか否か、の判断がなされる（ステップＳ２）。
【００８０】
この結果、未だｉｎｄｅｘファイルが作成されておらず（ＩＬ＝＝ＮＵＬＬ）、または既に作成済みのｉｎｄｅｘファイルの容量が上限に達していると判断されると（ステップＳ２、ＹＥＳ）、前記パラメータＩＬおよびＡＬのそれぞれに、（未だｉｎｄｅｘファイルが作成されていない場合には）“１”を、（ｉｎｄｅｘファイルの容量が上限に達している場合には）例えば“２”を代入する。これにより、データｄを書き込むべき、例えばｉｎｄｅｘファイル１やｉｎｄｅｘファイル２が新規作成され、またこれらｉｎｄｅｘファイル１やｉｎｄｅｘファイル２に対応する新たな実データファイル１や実データファイル２が新規に作成される（ステップＳ３）。
【００８１】
なお、以下では、一例としてｉｎｄｅｘファイル２およびこれに対応する実データファイル２を用いて説明を続ける。
【００８２】
次いで、新規作成された実データファイル２の末尾（何ら書き込みデータｄがなければ先頭）に、書き込み対象となるデータｄを追記し、またこのデータｄを書き込んだ実データファイル２の位置を位置情報用のパラメータＰＯＳＡＬに代入する（ステップＳ４）。
【００８３】
そして、ｉｎｄｅｘファイル２の最終行（何ら書き込みデータｄがなければ先頭行）に、インデックス情報ＩＪとして“日時（データｄが生成された時刻ｔ）、サイズ（データｄの容量）、読み出し開始位置（実データファイル２にデータｄを書き込んだ位置情報ＰＯＳが格納されたパラメータＰＯＳＡＬ）”を追記し（ステップＳ５）、パラメータｔＬに、実データファイル２に書き込んだ最新のデータｄの生成時刻ｔを代入して（ステップＳ６）、次の時刻に生成されたデータｄの書き込み処理に備える。
【００８４】
つまり、この時点で、パラメータｔＬの値は、実データ記録部１２ｂに記録された書き込み済みのデータｄの中で最新のデータ生成時刻ｔとなる。
【００８５】
これに対して、前記ステップＳ１にて、デバイス３０によってデータｄが生成された時刻ｔが、前記ｔＬよりも過去の場合（ステップＳ１、ＮＯ）、すなわち、一部のデータｄが遅れて情報蓄積装置１０に到着したと判断されると、前記サブルーチンＡ（ｔ）による処理結果（時刻ｔにて生成されたデータｄを書き込むべきｉｎｄｅｘファイル名（日時からなるデータ列））がパラメータＩｔに代入される（ステップＳ７）。
【００８６】
次いで、前記サブルーチンＢ（Ｉｔ、ｔ）による処理結果（サブルーチンＡ（ｔ）にて検索、取得されたｉｎｄｅｘファイルに基づき、時刻ｔを含むインデックス情報ＩＪに記述されている書き込むべきデータｄの位置情報ＰＯＳ）が、前記パラメータＰＯＳＩｔに代入される（ステップＳ８）。
【００８７】
その後、時刻ｔにて生成されたデータｄを、前記ステップＳ７にて取得されたｉｎｄｅｘファイル名に対応するファイル名を有する実データファイル内の末尾に追記し、この末尾の位置情報ＰＯＳをパラメータＰＯＳＡｔに代入する（ステップＳ９）。すなわち、パラメータＰＯＳＡｔは、実データファイルにて前記データｄを書き込みした末尾の位置情報となる。
【００８８】
そして、前記パラメータＰＯＳＩｔに対応する、ｉｎｄｅｘファイル内の行に“日時（データｄが生成された時刻ｔ）、サイズ（データｄの容量）、読み出し開始位置（前記末尾の位置情報ＰＯＳＡｔ）”を割り込んで書き込む（ステップＳ１０）。
【００８９】
このように、データｄが生成された時刻順に到着する場合での書き込み処理（ステップＳ１（ＹＥＳ）→ステップＳ２〜ステップＳ６）は、ｉｎｄｅｘファイルへのインデックス情報ＩＪの追記、および実データファイルへのデータｄの追記、またはこれら追記に加え、ｉｎｄｅｘファイルおよび実データファイルの新規作成により、生成されたデータｄを蓄積だけで済むため、ソートや挿入等に伴うメモリコピーが発生せず、高速にデータｄの書き込みが可能である。
【００９０】
また、生成されたデータｄが生成された時刻順に情報蓄積装置１０に到着せずその到着時刻が逆転した場合（ステップＳ１（ＮＯ）→ステップＳ７〜ステップＳ１０）であっても、例えば前記バイナリサーチにより高速に書き込むべきデータｄを挿入するｉｎｄｅｘファイルおよびその挿入すべき位置情報ＰＯＳを特定することができる。これは、ｉｎｄｅｘファイル、およびインデックス情報ＩＪ１〜インデックス情報ＩＪｍの各行が固定長であることを用いて、前記バイナリサーチといったＯＳのシステムコールを利用したからであり、これによって高速な既存データｄの移動、新データｄの高速な書き込みが可能となる。
【００９１】
［読み出し処理（ｔｓ、ｔｅ）］  
図８Ａ，図８Ｂ，図８Ｃは、データｄの読み出し処理（後述するステップＵ１〜ステップＵ１７）にて使用される処理ステップ（サブルーチン）を示すフローチャートである。
【００９２】
具体的には、図８Ａは、読み出し対象のｉｎｄｅｘファイルを検索、取得するためのサブルーチンＡ（ｔ）、図８Ｂおよび図８Ｃは、前記検索、取得されたｉｎｄｅｘファイル内に記述されるインデックス情報ＩＪのうち、時刻ｔをデータ列として含むインデックス情報ＩＪの行を検索するためのサブルーチンＢ（Ｉｔ、ｔ）、およびサブルーチンＣ（Ｉｔ、ｔ）を示す。
【００９３】
図９は、前記サブルーチンＡ（ｔ）〜サブルーチンＣ（Ｉｔ、ｔ）を含み、前記実データ記録部１２ｂに書き込まれたデータｄの読み出し処理を示すフローチャートである。
【００９４】
具体的には、ユーザによるデータｄの読み出し要求にて、時刻範囲Ｔ（開始時刻ｔｓと終了時刻ｔｅ）が設定されると、この時刻範囲Ｔをクエリとして指定し、当該時刻範囲Ｔに生成されたデータｄを読み出すフローチャートである。
【００９５】
このように、前記クエリとして開始時刻ｔｓ〜終了時刻ｔｅまでの時刻範囲Ｔを指定してデータｄの読み出し処理を行うため、以下説明するサブルーチンＡ（ｔ）、Ｂ（ｔ）、およびＣ（ｔ）では、データｄを読み出す開始時刻ｔｓと終了時刻ｔｅとの両方、或いはそのいずれかの時刻ｔ（ｔｓまたはｔｅのいずれか）を指定した処理が行われる。
【００９６】
図８Ａに示すサブルーチンＡ（ｔ）では、データｄの読み出し開始時刻ｔｓと読み出し終了時刻ｔｅとの両方が指定される。すなわち、ここでは、サブルーチンＡ（ｔｓ）およびＡ（ｔｅ）が実行される。
【００９７】
ここで、図８Ａ，図８Ｂ，図８Ｃ、および図９において、  
Ｉｓ：時刻ｔｓに生成されたデータｄのインデックス情報ＩＪを含むｉｎｄｅｘファイル、  
ＰＯＳＩｓ：Ｉｓ内の時刻ｔｓに生成されたデータｄのインデックス情報ＩＪが記録された位置、  
Ａｓ：時刻ｔｓに生成されたデータｄが記録される実データファイル、  
ＰＯＳＡｓ：Ａｓ内の時刻ｔｓに生成されたデータｄの記録される位置、  
Ｉｅ：時刻ｔｅに生成されたデータｄのインデックス情報ＩＪを含むｉｎｄｅｘファイル、  
ＰＯＳＩｅ：Ｉｅ内の時刻ｔｅに生成されたデータｄのインデックス情報ＩＪが記録された位置、  
Ａｅ：時刻ｔｅに生成されたデータｄが記録される実データファイル、  
ＰＯＳＡｅ：Ａｅ内の時刻ｔｅに生成されたデータｄの記録される位置、  
とする。
【００９８】
まず、サブルーチンＡ（ｔｓ）が実行されると、データｄの読み出し開始時刻ｔｓと一致、またはこの開始時刻ｔｓよりも過去の時刻であって、且つその中でも最新の時刻が含まれるインデックス情報ＩＪが記録されたｉｎｄｅｘファイル名が検索され、取得される（ステップＴ１）。
【００９９】
また、終了時刻ｔｅについても同様の処理を行う。すなわち、サブルーチンＡ（ｔｅ）が実行されると、データｄの読み出し終了時刻ｔｅと一致、またはこの終了時刻ｔｅよりも過去の時刻であって、且つその中でも最新の時刻が含まれるインデックス情報ＩＪが記述されたｉｎｄｅｘファイル名が検索され、取得される（ステップＴ１）。
【０１００】
したがって、サブルーチンＡ（ｔｓ、ｔｅ）により、検索結果として１つ（例えば、ｉｎｄｅｘファイル１のみ）または複数のｉｎｄｅｘファイル（例えば、ｉｎｄｅｘファイル１およびｉｎｄｅｘファイル２）が読み出し対象のｉｎｄｅｘファイルとして得られる。
【０１０１】
次に、図８Ｂに示すサブルーチンＢ（Ｉｔ、ｔ）では、データｄの読み出し終了時刻ｔｅが指定される。
【０１０２】
サブルーチンＢ（Ｉｅ、ｔｅ）が実行されると、前記サブルーチンＡ（ｔｅ）にて検索され取得されたｉｎｄｅｘファイルの中から、読み出し終了時刻ｔｅに一致、または読み出し終了時刻ｔｅよりも過去の時刻であって、且つ前記ｉｎｄｅｘファイルの中で一番新しい時刻が記述されたインデックス情報ＩＪの位置情報ＰＯＳが取得される（ステップＴ１０）。
【０１０３】
図８Ｃに示すサブルーチンＣ（Ｉｓ、ｔｓ）では、データｄの読み出し開始時刻ｔｓが指定される。
【０１０４】
サブルーチンＣ（Ｉｓ、ｔｓ）が実行されると、前記サブルーチンＡ（ｔｓ）にて検索され取得されたｉｎｄｅｘファイルの中から、読み出し開始時刻ｔｓと一致、または読み出し開始時刻ｔｓよりも過去の時刻であって、且つその中でも先頭の時刻が記述されたインデックス情報ＩＪの位置情報ＰＯＳが取得される（ステップＴ２０）。
【０１０５】
以上のサブルーチンＡ（ｔｓ、ｅ）〜サブルーチンＣ（Ｉｓ、ｔｓ）を踏まえて、以下図９に示すデータｄの読み出し処理を実行する。
【０１０６】
まず、本読み出し処理で読み出すデータｄを格納するための空リストｌｉｓｔまたは配列ａｒをパラメータｒｅｔに格納する（ステップＵ１）。
【０１０７】
次いで、前記サブルーチンＡ（ｔｓ）で得られた検索結果（読み出し開始の対象とされたｉｎｄｅｘファイル名（日時からなるデータ列））を、パラメータＩｓに代入する（ステップＵ２）。
【０１０８】
しかし、サブルーチンＡ（ｔ）で読み出し対象となるｉｎｄｅｘファイルが得られず、前記パラメータＩｓが空である場合には（ステップＵ３、ＹＥＳ）、検索結果が得られなかった旨をＷｅｂサーバ４０を介して、アプリケーション５０に送信する（ステップＵ４）。
【０１０９】
これに対して、前記パラメータＩｓ内に前記サブルーチンＡ（ｔｓ）で得られた検索結果が格納されている場合には（ステップＵ３、ＮＯ）、当該サブルーチンＡ（ｔｅ）の検索結果（読み出し終了の対象とされたｉｎｄｅｘファイル）をパラメータＩｅに代入し（ステップＵ５）、次いで前記サブルーチンＣ（Ｉｓ、ｔｓ）の検索結果（読み出し開始時刻ｔｓに一致するインデックス情報ＩＪの位置情報ＰＯＳ、または前記ｉｎｄｅｘファイルの中で一番古い時刻が記述された位置情報ＰＯＳ）をパラメータＰＯＳＩｓに代入する（ステップＵ６）。
【０１１０】
しかし、サブルーチンＣ（Ｉｓ、ｔｓ）にて、時刻ｔｓに対応する位置情報ＰＯＳが得られず、パラメータＰＯＳＩｓが空である場合には（ステップＵ７、ＹＥＳ）、検索結果が得られなかった旨をＷｅｂサーバ４０を介して、アプリケーション５０に送信する（ステップＵ４）。
【０１１１】
これに対して、前記パラメータＰＯＳＩｓ内に前記検索結果が格納されている場合には（ステップＵ７、ＮＯ）、次いでサブルーチンＢ（Ｉｅ、ｔｅ）の検索結果（読み出し終了時刻ｔｅに一致、または読み出し終了時刻ｔｅよりも過去の時刻であって、且つ前記ｉｎｄｅｘファイルの中で一番新しい時刻が記述されたインデックス情報ＩＪの位置情報ＰＯＳ）をパラメータＰＯＳＩｅに代入する（ステップＵ８）。これにより、パラメータＰＯＳＩｅには、前記終了時刻ｔｅに対応するデータｄが書き込まれた位置情報ＰＯＳが格納されている。
【０１１２】
その後、前記パラメータＩｓ（開始時刻ｔｓが含まれるｉｎｄｅｘファイルを指す）の値をパラメータｘに代入し、前記パラメータＰＯＳＩｓ（読み出し開始時刻ｔｓに一致するインデックス情報ＩＪの位置情報ＰＯＳ、または前記ｉｎｄｅｘファイルの中で一番古い時刻が記述された位置情報ＰＯＳ）の値をパラメータｙに代入する（ステップＵ９）。
【０１１３】
ここでパラメータｘに代入された値を、以下ではパラメータＩｘとする。  
その後、前記パラメータＩｘおよびパラメータｙに従って読み出すデータｄのサイズと、その読み出すデータｄの（開始および終了）位置と、をパラメータ（Ｓｉｚｅ、ＰＯＳ）に代入する（ステップＵ１０）。
【０１１４】
更に、前記パラメータ（Ｓｉｚｅ、ＰＯＳ）に従って、実データファイルに記録されたデータｄを読み出し、この読み出したデータｄをパラメータＤに代入する（ステップＵ１１）。
【０１１５】
その後、パラメータＤに代入されたデータｄが、前記パラメータｒｅｔの末尾（初めての読み出しであれば、先頭）に追記される（ステップＵ１２）。
【０１１６】
次いで、前記パラメータｘに格納された「開始時刻ｔｓが含まれるｉｎｄｅｘファイル名（日時のデータ列）」と、パラメータＩｅに格納された「終了時刻ｔｅが含まれるｉｎｄｅｘファイル名（日時のデータ列）」と、が一致（すなわち、読み出し対象が１つのｉｎｄｅｘファイルで完結）し、且つ前記パラメータｙに格納された「インデックス情報ＩＪの読み出し開始位置ＰＯＳＩｓ」と、パラメータＰＯＳＩｅに格納された「インデックス情報ＩＪの読み出し終了位置ＰＯＳＩｅ」と、が一致する（１行のインデックス情報ＩＪが読み出し対象）か否かを判断する（ステップＵ１３）。
【０１１７】
ステップＵ１３の結果、それぞれの条件が一致すると判断すると、すなわち、読み出し対象のデータｄが、ある単一のｉｎｄｅｘファイル内のある１行分のインデックス情報ＩＪで完結する場合には（ステップＵ１３、ＹＥＳ）、ステップＵ１２にてパラメータｒｅｔに追加されたデータｄがＷｅｂサーバ４０を介してアプリケーション５０へ送信される（ステップＵ１４）。
【０１１８】
これに対して、ステップＵ１３にて、いずれかの条件が一致しないと判断されると（ステップＵ１３、ＮＯ）、まずパラメータｙに格納されたデータｄの読み出し開始位置ＰＯＳＩｓが、検索対象であるｉｎｄｅｘファイルの最終行、すなわちｍ行目と一致するか否かの判断がなされる（ステップＵ１５）。
【０１１９】
前記開始位置ＰＯＳＩｓが、前記ｍ行目でなければ（ステップＵ１５、ＮＯ）、ｙ＝ｙ＋１とし、読み出し対象のインデックス情報ＩＪを１行下げ（ステップＵ１７）、再度ステップＵ１０の動作に戻り、１行下げたインデックス情報ＩＪについてデータｄの読み出し処理を実行する。
【０１２０】
すなわち、読み出し対象のｉｎｄｅｘファイルにて、１行下のインデックス情報ＩＪに従って、対応する実データファイルから前記パラメータＳｉｚｅに相当するデータ長さのデータｄを読み出し、次いで読み出したデータｄをパラメータＤに格納し、そのデータｄをパラメータｒｅｔの末尾に追加する（ステップＵ１０→ステップＵ１１→ステップＵ１２）。
【０１２１】
その後、前記ｙ＝ｙ＋１とされた際の前記１行下の「インデックス情報ＩＪの読み出し開始位置ＰＯＳＩｓ」と、パラメータＰＯＳＩｅに格納された「インデックス情報ＩＪの読み出し終了位置ＰＯＳＩｅ」と、が一致したと判断すると（ステップＵ１３、ＹＥＳ）、前記ステップＵ１２にてパラメータｒｅｔに追加された、例えば２行分のインデックス情報ＩＪに相当するデータｄがＷｅｂサーバ４０を介してアプリケーション５０へ送信される（ステップＵ１４）。
【０１２２】
また、前記開始位置ＰＯＳＩｓが、前記ｍ行目である場合には（ステップＵ１５、ＹＥＳ）、読み出し対象のｉｎｄｅｘファイルが複数に亘ることから、ｘ＝ｘ＋１とし、読み出し対象となるｉｎｄｅｘファイルを隣接するｉｎｄｅｘファイルに設定し、且つｙの値、すなわち開始位置ＰＯＳＩｓに“０行”を代入することで（ステップＵ１６）、当該読み出し対象となったｉｎｄｅｘファイルの先頭行（１行目）から前記ステップＵ１０以降の動作を実行する。
【０１２３】
以上の読み出し処理を実行することで、ユーザが指定した時刻範囲Ｔにて生成されたデータｄを読み出すことができる。
【０１２４】
［読み出し処理（ｔｒｅｑ）］  
図１０Ａおよび図１０Ｂは、ユーザによって指定された特定の時刻ｔｒｅｑに生成されたデータｄの読み出し処理（後述するステップＸ１〜ステップＸ９）を実行するための処理ステップ（サブルーチン）を示すフローチャートである。
【０１２５】
具体的には、図１０Ａは、時刻ｔｒｅｑに基づいて読み出し対象となるｉｎｄｅｘファイルを検索、取得するためのサブルーチンＡ（ｔｒｅｑ）、図１０Ｂは、検索、取得されたｉｎｄｅｘファイル内であって、当該時刻ｔｒｅｑを含むインデックス情報ＩＪの行を検索するためのサブルーチンＤ（Ｉｒｅｑ、ｔ）を示す。
【０１２６】
図１１は、前記サブルーチンＡ（ｔ）およびサブルーチンＤ（Ｉｒｅｑ、ｔ）を含み、実データ記録部１２ｂに書き込まれたデータｄを読み出す処理を示すフローチャートである。  
ここでは、前記図８Ａ，図８Ｂ，図８Ｃ、および図９（読み出し処理（ｔｓ、ｔｅ））と異なり、クエリとして特定の時刻ｔｒｅｑにおけるデータｄを読み出す処理を行うため、以下に説明するサブルーチンＡ（ｔｒｅｑ）、Ｄ（Iｒｅｑ、ｔｒｅｑ）の各処理は、この時刻ｔｒｅｑに基づいて実行されることになる。
【０１２７】
ここで、図１０Ａおよび図１０Ｂ、および図１１において、  
Ｉreｑ：時刻ｔreｑに生成されたデータｄのインデックス情報ＩＪを含むｉｎｄｅｘファイル、  
ＰＯＳＩreｑ：Ｉreｑ内の時刻ｔreｑに生成されたデータｄのインデックス情報ＩＪが記録された位置、  
Ａreｑ：時刻ｔreｑに生成されたデータｄが記録される実データファイル、  
ＰＯＳＡreｑ：Ａreｑ内の時刻ｔreｑに生成されたデータｄの記録される位置、
とする。
【０１２８】
まず、図１０Ａに示すサブルーチンＡ（ｔｒｅｑ）を実行すると、指定した読み出し時刻ｔｒｅｑと一致、またはこの時刻ｔｒｅｑよりも過去の時刻であって、且つその中でも最新の時刻を含むｉｎｄｅｘファイル名が検索され、取得される（ステップＶ１）。
【０１２９】
また、図１０Ｂに示すサブルーチンＤ（Ｉｒｅｑ、ｔｒｅｑ）を実行すると、前記サブルーチンＡ（ｔｒｅｑ）にて検索、取得されたＩｎｄｅｘファイル内であって、時刻ｔｒｅｑと一致する時刻ｔを含むインデックス情報ＩＪに記述された位置情報ＰＯＳが取得される（ステップＶ１０）。
【０１３０】
以上のサブルーチンＡ（ｔｒｅｑ）、およびＤ（Ｉｒｅｑ、ｔｒｅｑ）を踏まえて、以下図１１に示す読み出し処理を実行する。
【０１３１】
まず、パラメータｒｅｔに、読み出し処理によって読み出すデータｄを格納するための空リストｌｉｓｔまたは配列ａｒを格納する（ステップＸ１）。
【０１３２】
次いで、前記サブルーチンＡ（ｔｒｅｑ）で得られた検索結果（読み出し対象とされるｉｎｄｅｘファイル名（日時からなるデータ列））を、パラメータＩｒｅｑに代入する（ステップＸ２）。
【０１３３】
しかし、サブルーチンＡ（ｔｒｅｑ）で読み出し対象となるｉｎｄｅｘファイル名が得られず、当該パラメータＩｒｅｑが空である場合には（ステップＸ３、ＹＥＳ）、検索結果が得られなかった旨をＷｅｂサーバ４０を介して、アプリケーション５０に送信する（ステップＸ４）。
【０１３４】
これに対して、前記パラメータＩｒｅｑ内に検索結果が格納されている場合には（ステップＸ３、ＮＯ）、次いでサブルーチンＤ（Ｉｒｅｑ、ｔｒｅｑ）の検索結果（時刻ｔｒｅｑを含むインデックス情報ＩＪに記述された位置情報ＰＯＳ）をパラメータＰＯＳＩｒｅｑに代入する（ステップＸ５）。
【０１３５】
ステップＸ５の結果、サブルーチンＤ（Ｉｒｅｑ、ｔｒｅｑ）にて、時刻ｔｒｅｑを含むインデックス情報ＩＪに対応する位置情報ＰＯＳが得られず、前記パラメータＰＯＳＩｒｅｑが空である場合には（ステップＸ６、ＹＥＳ）、検索結果が得られなかった旨をＷｅｂサーバ４０を介して、アプリケーション５０に送信する（ステップＸ４）。
【０１３６】
これに対して、前記パラメータＰＯＳＩｒｅｑ内に検索結果（指定時刻ｔｒｅｑを含むインデックス情報ＩＪが記述された位置情報ＰＯＳ）が格納されている場合には（ステップＸ６、ＮＯ）、当該時刻ｔｒｅｑを含むインデックス情報ＩＪに記述された“サイズ”および“読み出し開始位置”のそれぞれをパラメータ（Ｓｉｚｅ、ＰＯＳ）に代入する（ステップＸ７）。
【０１３７】
その後、前記パラメータ（Ｓｉｚｅ、ＰＯＳ）に従い、ｉｎｄｅｘファイル名と対応するファイル名を有する実データファイルに記録された、前記パラメータＳｉｚｅに相当するデータ長のデータｄを読み出し、この読み出したデータｄをパラメータｒｅｔに代入する（ステップＸ８）。
【０１３８】
そして、最後に前記パラメータｒｅｔに格納された値（読み出し対象のデータｄ）をＷｅｂサーバ４０を介して、アプリケーション５０に送信する（ステップＸ９）。
【０１３９】
このように、ｉｎｄｅｘファイル１〜ｉｎｄｅｘファイルｎのそれぞれに設定されたファイル名が、データｄの生成された時刻であるため、読み出そうとする時刻ｔｒｅｑに基づき前記バイナリサーチを行うことで目的のインデックス情報ＩＪを有するｉｎｄｅｘファイルを容易且つ迅速に特定することができることから、読み出し対象とされるデータｄの記録位置を容易且つ迅速に把握することができる。
【０１４０】
したがって、前記構成の情報蓄積装置１０によれば、デバイス３０によって生成されたデータｄが生成された時刻ｔ順に到着した場合、データｄが到着した順に実データファイル１２へ追記（書き込み）しつつ、当該実データファイルに追記したデータｄの生成時刻ｔ、データサイズ、および実データファイルにおける追記位置を、当該データｄが記録された実データファイルと対応するファイル名を有するｉｎｄｅｘファイル内にインデックス情報ＩＪとして追記する。
【０１４１】
これにより、データｄが到着した順に単に当該データｄのインデックス情報ＩＪを生成し、実データファイルへのデータｄの追記をすればよく、またｉｎｄｅｘファイルや実データファイルの容量が限界に達した場合には、これらファイルの新規作成により、生成したデータｄを蓄積するだけでよいため、ソートや挿入等に伴うメモリコピーが発生せず、高速にデータｄの書き込みが可能である。
【０１４２】
また、データ記録部１２は、１つの実データファイル内に、１つのＢＬＯＢデータが記録される実データ記録部１２ｂを備える。
【０１４３】
このような構成を採用することで、デバイス３０が生成するデータｄと、画像・動画等のＢＬＯＢデータと、を共通のデータベースで処理することができ、例えばこれらデータｄやＢＬＯＢデータのサイズや特性の違いから共通の仕組みで蓄積することが難しいといった問題を解消することができる。
【０１４４】
また、生成されたデータｄの情報蓄積装置１０への到着時刻が入れ替わった場合であっても、各ｉｎｄｅｘファイル名を、固定長のバイナリデータで構成したことから、バイナリサーチにより高速に書き込むべきデータｄを挿入するファイルおよびその挿入位置を特定することができる。このように、ｉｎｄｅｘファイル名、およびインデックス情報ＩＪ１〜インデックス情報ＩＪｍの各行が固定長であることを利用して、前記バイナリサーチといったＯＳのシステムコールによって高速な既存データｄの移動と、新データｄの高速な書き込みが可能である。
【０１４５】
更に、前記構成の情報蓄積装置１０によれば、ｉｎｄｅｘファイルと実データファイルとのファイル名がそれぞれデータｄの生成された時刻ｔに基づいて設定されているため、時刻ｔの指定により容易に当該時刻ｔを含むｉｎｄｅｘファイルおよびこのｉｎｄｅｘファイル内のインデックス情報ＩＪを容易に検索できる。そして、このインデックス情報ＩＪには、データｄが書き込まれた位置ＰＯＳが記述されていることから、検索されたインデックス情報ＩＪに基づいて容易にデータｄを読み出すことができる。
【０１４６】
これは、読み出そうとする時刻ｔｒｅｑを指定した場合に限らず、開始時刻ｔｓと終了時刻ｔｅとを指定して、この時刻範囲Ｔに書き込まれたデータｄを読み出す場合であっても同様である。
【０１４７】
なお、例えば、ｉｎｄｅｘファイルに対応する実データファイルが複数ある場合には、これらの複数の実データファイルを１つのディレクトリに纏め、当該ディレクトリ名を、対応するｉｎｄｅｘファイル名と小さい計算量で一意に変換可能な規則で対応づけられた名前に設定してもよい。これにより、一意に実データファイルが定まり、高速にデータｄの読み出しが可能となる。
【０１４８】
また、実データファイルにおけるデータｄが記録される領域（ＰＯＳＡＬ）を、インデックス情報ＩＪに記述される“サイズ”と“読み出し開始位置”との組み合わせ、その領域を示してもよい。
【０１４９】
さらに、固定長のデータ列であるインデックス情報ＩＪのサイズを、ページ単位としてもよいし、このページ単位の約数としても良い。
【０１５０】
また、前記ｉｎｄｅｘ記録部１２ａ内に記録される、例えばｉｎｄｅｘファイル１を分割してもよい。この場合、ｉｎｄｅｘファイル１を分割して生成された２つのｉｎｄｅｘファイルを、実データファイル１に対応させた構成であってもよい。
【０１５１】
本発明は、前記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、前記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されたり、幾つかの構成要件が異なる形態にして組み合わされても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除されたり組み合わされた構成が発明として抽出され得るものである。
【０１５２】
また、前記実施形態に記載した手法は、計算機（コンピュータ）に実行させることができるプログラム（ソフトウエア（Software）手段）として、例えば磁気ディスク（フロッピー（登録商標）ディスク（Floppy disk）、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ、ＭＯ等）、半導体メモリ（ＲＯＭ、ＲＡＭ、フラッシュメモリ（Flash memory）等）等の記憶媒体に格納し、また通信媒体により伝送して頒布することもできる。なお、媒体側に格納されるプログラムには、計算機に実行させるソフトウエア手段（実行プログラムのみならずテーブル（Table）構造およびデータ構造も含む）を計算機内に構成させる設定プログラムをも含む。本装置を実現する計算機は、記憶媒体に記憶されたプログラムを読み込み、また場合により設定プログラムによりソフトウエア手段を構築し、このソフトウエア手段によって動作が制御されることにより上述した処理を実行する。なお、本明細書でいう記憶媒体は、頒布用に限らず、計算機内部あるいはネットワークを介して接続される機器に設けられた磁気ディスクおよび半導体メモリ等の記憶媒体を含む。
【図１】
2019092990.tif 000003
【図２】
2019092990.tif 000004
【図３】
2019092990.tif 000005
【図４】
2019092990.tif 000006
【図５】
2019092990.tif 000007
【図６Ａ】
2019092990.tif 000008
【図６Ｂ】
2019092990.tif 000009
【図６Ｃ】
2019092990.tif 000010
【図７】
2019092990.tif 000011
【図８Ａ】
2019092990.tif 000012
【図８Ｂ】
2019092990.tif 000013
【図８Ｃ】
2019092990.tif 000014
【図９】
2019092990.tif 000015
【図１０Ａ】
2019092990.tif 000016
【図１０Ｂ】
2019092990.tif 000017
【図１１】
2019092990.tif 000018
【手続補正書】
【提出日】平成31年2月5日(2019.2.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ送信元のデバイスによってデータが生成された時刻と、当該データを受信して書き込んだ領域を示す位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするｉｎｄｅｘファイルを記録するインデックス記録部と、
前記ｉｎｄｅｘファイルのファイル名と、第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ領域を示す位置情報、および前記データが生成された時刻、を前記ｉｎｄｅｘファイルにインデックス情報として書き込む書き込み処理部と、
時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記ｉｎｄｅｘファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、
を備える情報蓄積装置。
【請求項２】
前記データが生成された時刻と、当該データを書き込んだ領域を示す位置情報と、を含んだデータ列であるインデックス情報は、固定長のデータ列である、請求項１に記載の情報蓄積装置。
【請求項３】
前記書き込み処理部は、生成されたデータの時刻順に前記実データファイルに当該データを追記する、請求項１または請求項２に記載の情報蓄積装置。
【請求項４】
前記実データファイルへの書き込み対象となるデータの生成された時刻が、前記ｉｎｄｅｘファイルの先頭行に記述された前記インデックス情報が含む時刻より過去の時刻である場合に行う処理として、
前記書き込み処理部は、
前記データの生成された時刻に基づき、前記インデックス情報を挿入すべきｉｎｄｅｘファイルを検索するｉｎｄｅｘファイル検索と、
前記ｉｎｄｅｘファイル検索により検索されたｉｎｄｅｘファイルに前記書き込み対象となるデータの生成された時刻を含むインデックス情報を挿入する行を検索するインデックス情報挿入行検索と、
前記ｉｎｄｅｘファイル検索により検索されたｉｎｄｅｘファイルのファイル名と、前記第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名の実データファイルに前記データを書き込み、当該書き込んだデータが生成された時刻およびそのデータが書き込まれた領域を示す位置情報を含むインデックス情報を、前記インデックス情報挿入行検索により検索されたｉｎｄｅｘファイル内の挿入すべき行に挿入するインデックス情報挿入と、
を行う、請求項１または請求項２に記載の情報蓄積装置。
【請求項５】
前記実データファイルへの書き込み対象となるデータの生成された時刻が、前記ｉｎｄｅｘファイルの先頭行に記述された前記インデックス情報が含む時刻より新しい時刻である場合に行う処理として、
前記書き込み処理部は、
前記データの生成された時刻に基づき、前記ｉｎｄｅｘファイルに前記書き込み対象となるデータの生成された時刻を含むインデックス情報を挿入する行を検索するインデックス情報挿入行検索と、
前記ｉｎｄｅｘファイル検索により検索されたｉｎｄｅｘファイルのファイル名と、前記第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名の実データファイルに前記データを書き込み、当該書き込んだデータが生成された時刻およびそのデータが書き込まれた領域を示す位置情報を含むインデックス情報を、前記ｉｎｄｅｘファイル内の挿入すべき行に挿入するインデックス情報挿入と、
を行う、請求項１または請求項２に記載の情報蓄積装置。
【請求項６】
前記読み出し処理部は、
読み出し対象とされるデータの読み出し開始時刻とその終了時刻とがそれぞれ指定されると、当該開始時刻と終了時刻とを含んだインデックス情報が同一のｉｎｄｅｘファイル内であるか否かを判断するファイル判断と、
前記ファイル判断により、前記同一のｉｎｄｅｘファイル内に前記データの読み出し開始時刻と終了時刻とを含んだインデックス情報が含まれると判断された場合、当該開始時刻と終了時刻とがそれぞれ含まれるインデックス情報に従い、前記実データファイルからデータを読み出す実ファイルデータ読み出しと、
前記ファイル判断により、前記データの読み出し開始時刻と終了時刻とを含むインデックス情報が複数のｉｎｄｅｘファイルに跨がっていると判断された場合、当該開始時刻と終了時刻とがそれぞれ含まれるインデックス情報に従い、複数の前記実データファイルからデータを読み出す複数実ファイルデータ読み出しと、
を行う、請求項１に記載の情報蓄積装置。
【請求項７】
前記読み出し処理部は、
読み出し対象とされるデータの読み出し時刻が指定されると、当該時刻を含んだインデックス情報に基づいて、前記実データファイルを検索する実データファイル検索と、
前記実データファイル検索によって検索された実データファイルから、前記インデックス情報に基づいて、前記指定された時刻のデータを読み出すデータ読み出しと、
を行う、請求項１に記載の情報蓄積装置。
【請求項８】
前記ｉｎｄｅｘファイルのファイルサイズは、ＯＳのページングサイズの倍数である、請求項１乃至請求項７のいずれか一項に記載の情報蓄積装置。
【請求項９】
時刻と、この時刻に対応したデータと、を生成するデータ送信元のデータ生成装置と、
前記データ生成装置によって生成されたデータを受信して実データファイルに書き込み、書き込んだ当該データを、外部からの読み出し要求に応じて読み出す情報蓄積装置と、
を備え、
前記情報蓄積装置は、
前記データ生成装置によって生成されたデータを受信して書き込んだ領域を示す位置情報と、このデータが生成された時刻と、を含んだ固定長のデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするｉｎｄｅｘファイルを記録するインデックス記録部と、
前記ｉｎｄｅｘファイルのファイル名と、第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、当該インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ領域を示す位置情報、および前記データが生成された時刻、を前記ｉｎｄｅｘファイルにインデックス情報として書き込む書き込み処理部と、
時刻に基づいた前記読み出し要求を受信すると、当該時刻に対応するファイル名を含む前記ｉｎｄｅｘファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、
を具備する、データ処理システム。
【請求項１０】
コンピュータに、
データ送信元のデバイスによってデータが生成された時刻と、当該データを受信して書き込んだ領域を示す位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするｉｎｄｅｘファイルを、インデックス記録部に記録する機能と、
前記ｉｎｄｅｘファイルのファイル名と、第１の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを、実データ記録部に記録する機能と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ領域を示す位置情報、および前記データが生成された時刻、を前記ｉｎｄｅｘファイルにインデックス情報として書き込む機能と、
時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記ｉｎｄｅｘファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す機能と、
を実現させるためのプログラム。
【国際調査報告】
2019092990.tif 000019
2019092990.tif 000020
2019092990.tif 000021
2019092990.tif 000022