特表-19092990IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電信電話株式会社の特許一覧
再表2019-92990情報蓄積装置、データ処理システム、およびプログラム
(19)【発行国】日本国特許庁(JP)
【公報種別】再公表特許(A1)
(11)【国際公開番号】WO/0
(43)【国際公開日】2019年5月16日
【発行日】2020年4月2日
(54)【発明の名称】情報蓄積装置、データ処理システム、およびプログラム
(51)【国際特許分類】
   G06F 16/901 20190101AFI20200306BHJP
   G06F 16/909 20190101ALI20200306BHJP
【FI】
   G06F16/901
   G06F16/909
【審査請求】有
【予備審査請求】未請求
【全頁数】31
【出願番号】特願2019-551903(P2019-551903)
(21)【国際出願番号】PCT/0/0
(22)【国際出願日】2018年9月20日
(31)【優先権主張番号】特願2017-216648(P2017-216648)
(32)【優先日】2017年11月9日
(33)【優先権主張国】JP
(81)【指定国】 AP(BW,GH,GM,KE,LR,LS,MW,MZ,NA,RW,SD,SL,ST,SZ,TZ,UG,ZM,ZW),EA(AM,AZ,BY,KG,KZ,RU,TJ,TM),EP(AL,AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LT,LU,LV,MC,MK,MT,NL,NO,PL,PT,RO,RS,SE,SI,SK,SM,TR),OA(BF,BJ,CF,CG,CI,CM,GA,GN,GQ,GW,KM,ML,MR,NE,SN,TD,TG),AE,AG,AL,AM,AO,AT,AU,AZ,BA,BB,BG,BH,BN,BR,BW,BY,BZ,CA,CH,CL,CN,CO,CR,CU,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,ES,FI,GB,GD,GE,GH,GM,GT,HN,HR,HU,ID,IL,IN,IR,IS,JO,JP,KE,KG,KH,KN,KP,KR,KW,KZ,LA,LC,LK,LR,LS,LU,LY,MA,MD,ME,MG,MK,MN,MW,MX,MY,MZ,NA,NG,NI,NO,NZ,OM,PA,PE,PG,PH,PL,PT,QA,RO,RS,RU,RW,SA,SC,SD,SE,SG,SK,SL,SM,ST,SV,SY,TH,TJ,TM,TN,TR,TT
(71)【出願人】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100108855
【弁理士】
【氏名又は名称】蔵田 昌俊
(74)【代理人】
【識別番号】100103034
【弁理士】
【氏名又は名称】野河 信久
(74)【代理人】
【識別番号】100075672
【弁理士】
【氏名又は名称】峰 隆司
(74)【代理人】
【識別番号】100179062
【弁理士】
【氏名又は名称】井上 正
(72)【発明者】
【氏名】柏木 啓一郎
(72)【発明者】
【氏名】石井 久治
(72)【発明者】
【氏名】吉田 由唯
(72)【発明者】
【氏名】藤野 知之
(57)【要約】
デバイス(30)によって生成されたデータを、当該データが生成された時刻順に到着した場合、データが到着した順に実データ記録部(12b)へ追記(書き込み)しつつ、当該実データ記録部(12b)に追記したデータが生成された時刻、データサイズ、および実データファイルにおける追記位置を、当該データが記録された実データファイルと対応するファイル名を有するindexファイル(12a)にインデックス情報として追記する。
【特許請求の範囲】
【請求項1】
データが生成された時刻と、当該データの記録される位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするindexファイルを記録するインデックス記録部と、
前記indexファイルのファイル名と、第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ位置情報、および前記データが生成された時刻、を前記indexファイルにインデックス情報として書き込む書き込み処理部と、
時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記indexファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、
を備える情報蓄積装置。
【請求項2】
前記データが生成された時刻と、当該データの記録される位置情報と、を含んだデータ列であるインデックス情報は、固定長のデータ列である、請求項1に記載の情報蓄積装置。
【請求項3】
前記書き込み処理部は、生成されたデータの時刻順に前記実データファイルに当該データを追記する、請求項1または請求項2に記載の情報蓄積装置。
【請求項4】
前記実データファイルへの書き込み対象となるデータの生成された時刻が、前記indexファイルの先頭行に記述された前記インデックス情報が含む時刻より過去の時刻である場合に行う処理として、
前記書き込み処理部は、
前記データの生成された時刻に基づき、前記インデックス情報を挿入すべきindexファイルを検索するindexファイル検索と、
前記indexファイル検索により検索されたindexファイルに前記書き込み対象となるデータの生成された時刻を含むインデックス情報を挿入する行を検索するインデックス情報挿入行検索と、
前記indexファイル検索により検索されたindexファイルのファイル名と、前記第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名の実データファイルに前記データを書き込み、当該書き込んだデータが生成された時刻およびそのデータが書き込まれた位置情報を含むインデックス情報を、前記インデックス情報挿入行検索により検索されたindexファイル内の挿入すべき行に挿入するインデックス情報挿入と、
を行う、請求項1または請求項2に記載の情報蓄積装置。
【請求項5】
前記実データファイルへの書き込み対象となるデータの生成された時刻が、前記indexファイルの先頭行に記述された前記インデックス情報が含む時刻より新しい時刻である場合に行う処理として、
前記書き込み処理部は、
前記データの生成された時刻に基づき、前記indexファイルに前記書き込み対象となるデータの生成された時刻を含むインデックス情報を挿入する行を検索するインデックス情報挿入行検索と、
前記indexファイル検索により検索されたindexファイルのファイル名と、前記第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名の実データファイルに前記データを書き込み、当該書き込んだデータが生成された時刻およびそのデータが書き込まれた位置情報を含むインデックス情報を、前記indexファイル内の挿入すべき行に挿入するインデックス情報挿入と、
を行う、請求項1または請求項2に記載の情報蓄積装置。
【請求項6】
前記読み出し処理部は、
読み出し対象とされるデータの読み出し開始時刻とその終了時刻とがそれぞれ指定されると、当該開始時刻と終了時刻とを含んだインデックス情報が同一のindexファイル内であるか否かを判断するファイル判断と、
前記ファイル判断により、前記同一のindexファイル内に前記データの読み出し開始時刻と終了時刻とを含んだインデックス情報が含まれると判断された場合、当該開始時刻と終了時刻とがそれぞれ含まれるインデックス情報に従い、前記実データファイルからデータを読み出す実ファイルデータ読み出しと、
前記ファイル判断により、前記データの読み出し開始時刻と終了時刻とを含むインデックス情報が複数のindexファイルに跨がっていると判断された場合、当該開始時刻と終了時刻とがそれぞれ含まれるインデックス情報に従い、複数の前記実データファイルからデータを読み出す複数実ファイルデータ読み出しと、
を行う、請求項1に記載の情報蓄積装置。
【請求項7】
前記読み出し処理部は、
読み出し対象とされるデータの読み出し時刻が指定されると、当該時刻を含んだインデックス情報に基づいて、前記実データファイルを検索する実データファイル検索と、
前記実データファイル検索によって検索された実データファイルから、前記インデックス情報に基づいて、前記指定された時刻のデータを読み出すデータ読み出しと、
を行う、請求項1に記載の情報蓄積装置。
【請求項8】
前記indexファイルのファイルサイズは、OSのページングサイズの倍数である、請求項1乃至請求項7のいずれか一項に記載の情報蓄積装置。
【請求項9】
時刻と、この時刻に対応したデータと、を生成するデータ生成装置と、
前記データ生成装置によって生成されたデータを実データファイルに書き込み、書き込んだ当該データを、外部からの読み出し要求に応じて読み出す情報蓄積装置と、
を備え、
前記情報蓄積装置は、
前記データ生成装置によって生成されたデータの記録される位置情報と、このデータが生成された時刻と、を含んだ固定長のデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするindexファイルを記録するインデックス記録部と、
前記indexファイルのファイル名と、第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、当該インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ位置情報、および前記データが生成された時刻、を前記indexファイルにインデックス情報として書き込む書き込み処理部と、
時刻に基づいた前記読み出し要求を受信すると、当該時刻に対応するファイル名を含む前記indexファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、
を具備する、データ処理システム。
【請求項10】
コンピュータに、
データが生成された時刻と、当該データの記録される位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするindexファイルを、インデックス記録部に記録する機能と、
前記indexファイルのファイル名と、第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを、実データ記録部に記録する機能と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ位置情報、および前記データが生成された時刻、を前記indexファイルにインデックス情報として書き込む機能と、
時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記indexファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、IoTデータを高速に読み書き可能な情報蓄積装置、データ処理システム、およびプログラムに関する。
【背景技術】
【0002】
近年、種々のデータを取得可能なセンサなどの様々なデバイスをネットワークに接続して構成されるシステムで、前記デバイスが生成するデータを活用したIoT(Internet Of Things)が注目されている。
【0003】
IoTを用いたシステムでは様々なデバイスから継続的または定期的にデータを取得することから、時間経過とともに順次生成される多量のデータを高速に書き込み・読み出し可能なデータベースが必要となる。
【0004】
また、IoTを用いた分野では様々なデバイスを多量に用いて種々のデータを取得する場合が多いことから、使用されるデバイスは安価であることが求められる。そのため、大容量メモリを有する高価なデバイスを利用することが困難な場合が多い。
【0005】
一方、時間経過とともに順次生成されるデータを書き込むデータベースとして、従来ではPostgreSQLなどの追記型データベースが利用されている(例えば、非特許文献1参照。)。
【0006】
一部の追記型データベースでは、ディスクへのデータの書き込み時にインデックス作成等の処理を行う場合がある。ここで、インデックスとは、ファイルに書き込んだデータをより早く検索したり、抽出したりするように作られた検索データのことをいう。
【0007】
一般的に、アプリから書き込みを依頼されたデータに対して生成されるインデックスの数や種類が増加すると、当該インデックスの数や種類に応じてインデックスの生成やインデックスデータの書き込みが書き込み処理全体のオーバーヘッドとなる。
【0008】
また、データのサイズが固定長とは限らないため、データの書き込み時に特別な処理をせず追記を行うと、読み出し時にデータの線型探索の演算量O(n)が必要となり、データの増加に応じて読み出し速度が遅くなるといった問題がある(例えば、非特許文献2参照。)。
【0009】
データ書き込み時のインデックス生成等の処理は、データの読み出し速度を高めるが、IoT向けのデータベースでは、書き込み速度の確保のため、データの書き込み時の処理負荷をなるべく小さくすることが望ましい。
【先行技術文献】
【非特許文献】
【0010】
【非特許文献1】赤間浩樹, et al. "追記・参照型データ管理システムの設計と評価," 情報処理学会論文誌 49.2 (2008): 749-764.
【非特許文献2】大駒誠一, 西村恕彦, and 昆野誠司, "情報検索特集号: ファイルの蓄積と探索," 情報処理 7.6 (1966).
【発明の概要】
【0011】
IoTデータの特性として、時間経過とともにデバイスにより順次生成されたデータは、ネットワーク等を通る間に順序が入れ替わらない限り、当該生成された順にデータベースに到着するという特徴がある。
【0012】
また、IoTでは時刻を指定してデータベースから必要なデータを読み出すケースが多いため、時刻に基づいた検索および読み出し処理が高速なデータベースが求められる。特に、直近の時刻における最新値を参照するアプリケーションが多いため、最新値の読み出し速度が高速であることも重要となる。
【0013】
このように、IoTを用いた分野では、前記デバイスにより時間経過とともに順次生成され、生成された時刻順に到着するデータをデータベースに高速に書き込むとともに、日付・時刻等の情報(特定の時刻、時刻範囲、および直近の時刻)の指定により高速にデータを検索し、読み出すことのできるデータベースが求められる。
【0014】
前述の通り、従来の技術では、データベースのメモリ領域上にインデックスを持たせることにより読み出しの高速化を行う手法が用いられていたが、インデックスのサイズと検索性能にはトレードオフ関係がある。
【0015】
さらに、IoTで使用するデータは膨大な量であるため当然インデックスも膨大となる。そのため省メモリでの処理が難しいという課題があった。
【0016】
さらに、副次的な課題として、IoTでは前記デバイスが生成するデータと、これに比べてデータ量の大きい画像・動画等のメディアデータと、を共通のデータベースで処理する場合があるが、これらはデータサイズや特性の違いから共通の仕組みで蓄積することが難しいといった問題があった。
【0017】
本発明は、前記課題に鑑みてなされたものであり、第1に書き込み時の処理を最小限にとどめることで、省メモリ且つ高速にデータの読み書きを可能とし、第2にデバイスが生成するデータと画像等のメディアデータを共通のデータベースで高速に読み書き可能とする情報蓄積装置、データ処理システム、およびプログラムを提供することを目的とする。
【0018】
本発明に係る情報蓄積装置は、データが生成された時刻と、当該データの記録される位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするindexファイルを記録するインデックス記録部と、前記indexファイルのファイル名と、第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ位置情報、および前記データが生成された時刻、を前記indexファイルにインデックス情報として書き込む書き込み処理部と、時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記indexファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、を備える。
【0019】
本発明によれば、第1に書き込み時の処理を最小限にとどめることで、省メモリ且つ高速にデータの読み書きが可能となり、第2にデバイスが生成するデータと画像等のメディアデータを共通のデータベースで高速に読み書き可能となる。
【図面の簡単な説明】
【0020】
図1図1は、実施形態の情報蓄積装置10を備えたデータ処理システムを示す図である。
図2図2は、前記情報蓄積装置10において、データ記録部12を外部に配置した場合を示す図である。
図3図3は、前記情報蓄積装置10に設けられるインデックス記録部12aに格納されたn個のindexファイル(1〜n、n:自然数)を一例として示す図である。
図4図4は、前記情報蓄積装置10に設けられる実データ記録部12bに格納されたn個の実データ(1〜n、n:自然数)を示す図である。
図5図5は、前記実データ記録部12bにBLOBデータが格納された場合のn個の実データ(1〜n、n:自然数)を示す図である。
図6A図6Aは、前記情報蓄積装置10の書き込み処理にて使用される処理ステップ(初期化処理)を示すフローチャートである。
図6B図6Bは、前記情報蓄積装置10の書き込み処理にて使用される処理ステップ(サブルーチン)を示すフローチャートである。
図6C図6Cは、前記情報蓄積装置10の書き込み処理にて使用される処理ステップ(サブルーチン)を示すフローチャートである。
図7図7は、前記情報蓄積装置10のデータdの書き込み処理を示すフローチャートである。
図8A図8Aは、前記情報蓄積装置10のデータdの読み出し処理にて使用される処理ステップ(サブルーチン)を示すフローチャートである。
図8B図8Bは、前記情報蓄積装置10のデータdの読み出し処理にて使用される処理ステップ(サブルーチン)を示すフローチャートである。
図8C図8Cは、前記情報蓄積装置10のデータdの読み出し処理にて使用される処理ステップ(サブルーチン)を示すフローチャートである。
図9図9は、前記実データ記録部12bに書き込まれたデータdの読み出し処理を示すフローチャートである。
図10A図10Aは、前記情報蓄積装置10の前記データdの読み出し処理を実行するための処理ステップ(サブルーチン)を示すフローチャートである。
図10B図10Bは、前記情報蓄積装置10の前記データdの読み出し処理を実行するための処理ステップ(サブルーチン)を示すフローチャートである。
図11図11は、前記実データ記録部12bに書き込まれたデータdを読み出す処理を示すフローチャートである。
【発明を実施するための形態】
【0021】
以下、本発明の実施形態に係る情報蓄積装置、データ処理システム、およびプログラムについて、図面を参照して説明する。
【0022】
図1は、実施形態の情報蓄積装置10を備えたデータ処理システムの構成を示す機能ブロック図である。
【0023】
前記データ処理システムは、情報蓄積装置10、メッセージブローカー20、デバイス30(センサ)(30a〜30c)、Webサーバ40、およびアプリケーション50(50a〜50c)を含んで構成される。
【0024】
デバイス(センサ)30(30a〜30c)は、継続的または定期的に計測した種々のデータdと、このデータdが計測された時刻tと、を生成し、メッセージブローカー20に送信する機能を有するデータ生成装置に相当する。以下、デバイス(センサ)30を、単にデバイス30と呼ぶ。
【0025】
本実施形態では、このデバイス30から送信されるデータdを、生成された順にメッセージブローカー20へ送信するといったIoT独自の特性を活かし、これらのデータdを情報蓄積装置10にて管理する。
【0026】
このため前記デバイス30は、情報蓄積装置10に送信したデータdおよび時刻tをデバイス30内部に蓄積する必要のない構成とされる。
【0027】
これにより、本データ処理システムでは、安価なデバイス30を採用することができる。
【0028】
メッセージブローカー20は、前記デバイス30によって生成されたデータdおよびそのデータdが生成された時刻t(以下、生成時刻tと呼ぶことがある)を受信し、当該データdと時刻tとを情報蓄積装置10内に送信する機能を有する。
【0029】
前記情報蓄積装置10は、メッセージブローカー20から受信したデータdを前記デバイス30による生成時刻tに従って、データ記録部12に書き込む機能および前記Webサーバ40を介したアプリケーション50からの時刻tを指定したデータ読み出し要求に従って前記データ記録部12からデータdを読み出す機能を有する。
【0030】
Webサーバ40は、アプリケーション50(50a〜50c)から前記データ要求があると、情報蓄積装置10へアクセスし、当該情報蓄積装置10の前記データ記録部12から読み出したデータdを受信し、アプリケーション50(50a〜50c)へデータdを送信する。
【0031】
前記情報蓄積装置10は、データ処理制御部11およびデータ記録部12を備える。
【0032】
前記データ処理制御部11は、予めROM等の記憶部(図示せぬ)に記憶されたデータ処理制御プログラムに従い本情報蓄積装置10を制御するCPU(Central Processing Unit)を備える。前記データ処理制御プログラムに従って動作するCPUが、書き込み処理を行う書き込み処理部11aおよび読み出し処理を行う読み出し処理部11bとして機能する。
【0033】
そして、このデータ処理制御部11の書き込み処理部11aは、後述する動作説明において詳述する書き込み処理に従い、受信したデータdを実データ記録部12bに書き込みつつ、当該データdに関する固定長のデータ列から構成されるインデックス情報IJとして“生成された時刻t(日時)、データdの容量(サイズ)、および前記実データ記録部12bにデータdを書き込みした領域(読み出し開始位置)”を、前記デバイス30がデータdを生成した時刻順にインデックス記録部12aに書き込む機能を有する。
【0034】
更にこのデータ処理制御部11の読み出し処理部11bは、後述する動作説明において詳述する読み出し処理に従い、特定の時刻tまたは特定の時刻範囲をクエリ(query:情報要求)として、前記インデックス記録部12aから当該時刻tを含むindexファイル(1〜n、n:自然数)を検索および取得する機能の他、当該検索および取得したindexファイルに設けられ、前記時刻tをデータ列に含む前記インデックス情報IJを検索する機能を有する。
【0035】
なお、indexファイル1〜indexファイルnを区別しない場合には、単にindexファイルと呼ぶ。
【0036】
図2は、図1に示す情報蓄積装置10において、前記データ記録部12(以下、データ記録領域14と呼ぶ)を外部に配置した場合を示す図である。
【0037】
データ記録領域14は、前記データ記録部12を前記情報蓄積装置10の外部に配置したものであって、当該情報蓄積装置10と、例えばバスBUSで接続された構成であってもよい。
【0038】
つまり、データ記録領域14は、前記インデックス記録部12aおよび実データ記録部12bと同一の機能を有するインデックス記録部14aおよび実データ記録部14bを備える。以下では、データ記録部12を用いて説明する。
【0039】
図3は、前記インデックス記録部12aに格納されたn個のindexファイル(1〜n)を一例として示す図である。
【0040】
以下、indexファイル1に着目し、他のindexファイル2〜indexファイルnについて説明を省略する。
【0041】
図示するように、indexファイル1には、先頭行(1行目)〜最終行(m行目)の各行にインデックス情報IJ1〜IJmが順に記録される。なお、インデックス情報IJ1〜インデックス情報IJmを区別しない場合には、単にインデックス情報IJと呼ぶ。
【0042】
前記インデックス情報IJ毎に“データdに関する情報(日時、サイズ、読出開始位置)”が記述され、1行目に、例えばindexファイル1内で一番古い時刻tを含むインデックス情報IJ1が配置され、最後のm行目に当該indexファイル1内で一番新しい時刻tを含むインデックス情報IJmが配置される。なお、前記日時は、日付を変換した情報であってもよい。
【0043】
また、前記インデックス情報IJの一例として、“64bitのバイナリ表現で表される時刻”、“データサイズ”、“実データファイル内のデータ記録位置POS”、および“データ書き込み時のシステムクロック”から構成される32byteの情報を利用してもよい。
【0044】
そして、indexファイル1にインデックス情報IJmまでが記録され、当該ファイル1が許容する容量に達すると、新たなindexファイル2が生成され、当該indexファイル2の先頭から順にインデックス情報IJが記録される。
【0045】
データの読み書き速度および記憶領域利用の効率を高めるために、indexファイルのファイルサイズ(容量)をOS(Operating System)のページングサイズの倍数とすることができる。
【0046】
前記OSのカーネルがHDD(Hard DisK Drive)やSSD(Solid State Drive)などの補助記憶装置から読み書きする処理は、ページングサイズを単位として行われるため、特に頻繁に読み書きされるindexファイルのサイズをページングサイズの倍数とすることで、indexファイルの読み書き速度および記憶領域利用の効率が向上する。
【0047】
ここで、例えばページングサイズとは、メモリセルアレイMCAを構成する、例えばl行×k列に配置されたメモリセルMCにおいて、「1行×k列のメモリセルMC群の各々が記録するデータで構成されるデータ列の単位」をいう。
【0048】
尚、indexファイル3、…、indexファイルnについても必要に応じて新規作成され、これらのファイル3〜ファイルnに順次前記インデックス情報IJが記録されることになる。
【0049】
また、これらindexファイル1〜indexファイルnに設定するファイル名は、以下、第1〜第3のいずれかの手法により採用してもよい。
【0050】
すなわち、第1に、例えばインデックス情報IJに記述された日時から1つを選択する一定の基準の一例として、indexファイルの先頭行に記載されたデータdの日時を選択として、これをindexファイル名としてもよい。
【0051】
第2に、indexファイル名と、実データファイル名と、をindexファイル内の選択されたデータdの日時を用いて、小さい計算量で相互に変換できる単純な規則で設定する一例として、インデックス情報IJに64bitの符号なし整数表現した日時を記述する他、128bitのバイナリ表現で記述された日時を、4bitずつ16進ASCII文字で連結した文字列を含むファイル名を、これらファイル名としてもよい。
【0052】
第3に、前記基準と規則との組み合わせの一例として、インデックス情報IJに64bitのバイナリ表現で記述された日時のうちindexファイルの先頭に記載されたものを選択し、128bitの16進数で表現した文字列を、indexファイルおよび実データファイルのファイル名の一部としてもよい。
【0053】
図4は、実データ記録部12bに格納されたn個の実データファイル(1〜n、n:自然数)を示す図である。
【0054】
以下、実データファイル1に着目し、他の実データファイル2〜実データファイルnについては説明を省略する。
図示するように、実データファイル1には、先頭から、例えば領域1(POSAL1)にデータd1、領域2(POSAL2)にデータd2、…、領域m(POSALm)にデータdmが順に記録される。なお、POSAL1〜POSALmは、書き込み対象のデータdが記録される実データファイル1内の位置情報である。また、例えばデータd1とデータd2との間に、当該データd1、データd2を区別するための任意の記号を挿入してもよい。
【0055】
そして、前記データd1〜データdmは、前記indexファイル1に記録された1行目からm行目までのインデックス情報IJ1〜インデックス情報IJmに対応している。
【0056】
つまり、当該indexファイル1内に記録されたインデックス情報IJ1〜インデックス情報IJmに対応するデータd1〜データdmが、この実データファイル1に記録される。
【0057】
これは、例えばindexファイルnと実データファイルnについても同様の関係が成立する。
【0058】
そして、indexファイルに基づいて容易かつ迅速に実データファイルからデータdの読み出し処理ができるよう、例えば、当該実データファイル1を、前記indexファイル1と対応するファイル名にしている。indexファイルnと実データファイルnについても同様の関係が成立する。
【0059】
また、以下説明する容量の大きな画像、動画および音声などのBLOB(Binary Large Object)データを、例えば実データファイル1に記録する場合であっても、indexファイル1と同様の対応関係が維持されている。
【0060】
具体的には、BLOBデータを記録する実データファイル名は、indexファイル内のインデックス情報IJに記述された対応するBLOBデータの生成時刻に基づいて設定される。具体的には、実データファイル名と、前記BLOBデータの生成時刻と、が小さい計算量で一意かつ相互に変換できる単純な規則で対応づけられる。
【0061】
図5は、前記BLOBデータが実データ記録部12bに記録された場合を示す図であり、前記実データ記録部12bには、実データファイル1〜実データファイルn(1〜n、n:自然数)が記録される。
【0062】
以下、実データファイル1に着目し、他の実データファイル2〜実データファイルnについては説明を省略する。
図示するように、実データファイル1内に、1つのBLOBデータが記録される。すなわち、n個の実データファイル1〜実データファイルnが実データ記録部12bに記録されていれば、全部でn個のBLOBデータが記録されることになる。
【0063】
このような構成を採用することで、デバイス30が生成するデータdと、画像・動画等のBLOBデータと、を共通のデータベースで処理することができ、例えばこれらデータdやBLOBデータのサイズや特性の違いから共通の仕組みで蓄積することが難しいといった問題を解消することができる。
【0064】
このように構成された情報蓄積装置10は、前記データ処理制御部11内のCPUが前記データ処理制御プログラムに記述された命令に従い各部の動作を制御し、ソフトウエアとハードウエアとが協働して動作することにより、以下の動作説明で述べるような、各種のデータ書き込み処理の機能およびデータ読み出し処理の機能を実現する。
【0065】
次に情報蓄積装置10による(書き込み、読み出し)動作について説明する。
[書き込み処理(t、d)]
図6A図6B図6Cは、後述するデータdの書き込み処理(ステップS1〜ステップS10)にて使用される処理ステップを示すフローチャートである。
【0066】
具体的には、図6Aは初期化処理、図6Bは書き込み対象となるデータd用のindexファイルを検索する処理を示すサブルーチンA(t)、そして図6Cは書き込み対象となるindexファイルにインデックス情報IJを挿入する位置情報POSを取得するためのサブルーチンB(I、t)を示す。
【0067】
なお、前記サブルーチンA(t)およびサブルーチンB(I、t)は、データdの生成順に当該データdが情報蓄積装置10に到着できず、通信経路の途中で順序が逆転してしまったデータdを、書き込むべきindexファイルおよび実データファイルに割り込んで書き込む際に使用する処理フローである。
【0068】
ここで、図6A図6B図6Cにおいて、
:書き込み済みのデータdの中で最新のデータdの生成時刻t、
:時刻tのデータdに関するインデックス情報IJを含むindexファイル、 A:時刻tのデータdを含む実データファイル、
とする。
【0069】
まず初期化処理を実行し、前記デバイス30によりこの先生成される全データdの生成時刻t(例えば、20xx年yy月zz日nn時mm分ll秒)よりも過去の時刻(例えば、19XX年YY月ZZ日NN時MM分LL秒)をパラメータtに代入する(ステップP1)。
【0070】
ついで、indexファイル用のパラメータIに“NULL”を代入し(ステップP2)、実データ記録部12b内の実データファイル用のパラメータAにも同様に“NULL”を代入し、初期化処理を終了する(ステップP3)。
【0071】
この初期化処理により、インデックス記録部12aおよび実データ記録部12bには、indexファイルや実データファイルが生成されておらず、当然データdも記録されていない空の状態となる。
【0072】
次に、図6Bに示すサブルーチンA(t)処理により、データdの生成された時刻tと一致するindexファイル名、または当該時刻tよりも過去であって且つその中でも最新のindexファイル名が検索、取得される(ステップP10)。
【0073】
ここで、各indexファイル名は、固定長のデータ列(例えば8byteの“0”および“1”のデータ列)から構成されるバイナリデータで記載されている。このため、検索方法の一つであるバイナリサーチ(二分探索)といったOSのシステムコールにより高速にファイルを検索することができる。
【0074】
さらに図6Cに示すサブルーチンB(I、t)処理により、前記サブルーチンA(t)による処理で得られたindexファイル内で、書き込み対象とされるデータdが生成された時刻tが含まれるインデックス情報IJ、またはこの時刻tよりも過去の時刻であって且つその中でも最新の時刻を含むインデックス情報IJを検索し、新規のインデックス情報IJを挿入する位置情報POS(行)が取得される(ステップP20)。
【0075】
この取得された位置情報POS(行)は、後述するパラメータPOSIに代入される。
【0076】
以上の初期化処理、サブルーチンA(t)、およびB(I、t)処理を踏まえて、以下説明するメインの書き込み処理を実行する。
【0077】
図7は、前記サブルーチンA(t)、およびサブルーチンB(I、t)を含むデータdの書き込み処理を示すフローチャートである。
【0078】
ここで、図7において、
:時刻tに生成されたデータdのインデックス情報IJが書き込まれるindexファイル、
POSI:I内で時刻tのデータdに関するインデックス情報IJが書き込まれる位置、
:時刻tに生成されたデータdが書き込まれる実データファイル、
POSA:A内でデータdが書き込まれる位置、
POSA:A内で時刻tに生成されたデータdが書き込まれる位置、
とする。
【0079】
まず、書き込み対象となるデータdの生成時刻tが、前記パラメータtに対して新しい時刻の場合(ステップS1、YES)、すなわち、前記初期化処理により前記パラメータtに格納された初期値(あらゆる生成時刻tよりも古い時刻)よりも新しい時刻tに生成されたデータdが、その生成時刻tに従って順当に情報蓄積装置10に到着したと判断されると(ステップS1、YES)、次いでインデックス記録部12a内にindexファイルが作成されている(図中、I==NULLと表記)か否か、または仮にindexファイルが既に生成されている場合には、データdをこの先書き込もうとしているこのindexファイルの容量が上限に達しているか否か、の判断がなされる(ステップS2)。
【0080】
この結果、未だindexファイルが作成されておらず(I==NULL)、または既に作成済みのindexファイルの容量が上限に達していると判断されると(ステップS2、YES)、前記パラメータIおよびAのそれぞれに、(未だindexファイルが作成されていない場合には)“1”を、(indexファイルの容量が上限に達している場合には)例えば“2”を代入する。これにより、データdを書き込むべき、例えばindexファイル1やindexファイル2が新規作成され、またこれらindexファイル1やindexファイル2に対応する新たな実データファイル1や実データファイル2が新規に作成される(ステップS3)。
【0081】
なお、以下では、一例としてindexファイル2およびこれに対応する実データファイル2を用いて説明を続ける。
【0082】
次いで、新規作成された実データファイル2の末尾(何ら書き込みデータdがなければ先頭)に、書き込み対象となるデータdを追記し、またこのデータdを書き込んだ実データファイル2の位置を位置情報用のパラメータPOSAに代入する(ステップS4)。
【0083】
そして、indexファイル2の最終行(何ら書き込みデータdがなければ先頭行)に、インデックス情報IJとして“日時(データdが生成された時刻t)、サイズ(データdの容量)、読み出し開始位置(実データファイル2にデータdを書き込んだ位置情報POSが格納されたパラメータPOSA)”を追記し(ステップS5)、パラメータtに、実データファイル2に書き込んだ最新のデータdの生成時刻tを代入して(ステップS6)、次の時刻に生成されたデータdの書き込み処理に備える。
【0084】
つまり、この時点で、パラメータtの値は、実データ記録部12bに記録された書き込み済みのデータdの中で最新のデータ生成時刻tとなる。
【0085】
これに対して、前記ステップS1にて、デバイス30によってデータdが生成された時刻tが、前記tよりも過去の場合(ステップS1、NO)、すなわち、一部のデータdが遅れて情報蓄積装置10に到着したと判断されると、前記サブルーチンA(t)による処理結果(時刻tにて生成されたデータdを書き込むべきindexファイル名(日時からなるデータ列))がパラメータIに代入される(ステップS7)。
【0086】
次いで、前記サブルーチンB(I、t)による処理結果(サブルーチンA(t)にて検索、取得されたindexファイルに基づき、時刻tを含むインデックス情報IJに記述されている書き込むべきデータdの位置情報POS)が、前記パラメータPOSIに代入される(ステップS8)。
【0087】
その後、時刻tにて生成されたデータdを、前記ステップS7にて取得されたindexファイル名に対応するファイル名を有する実データファイル内の末尾に追記し、この末尾の位置情報POSをパラメータPOSAに代入する(ステップS9)。すなわち、パラメータPOSAは、実データファイルにて前記データdを書き込みした末尾の位置情報となる。
【0088】
そして、前記パラメータPOSIに対応する、indexファイル内の行に“日時(データdが生成された時刻t)、サイズ(データdの容量)、読み出し開始位置(前記末尾の位置情報POSA)”を割り込んで書き込む(ステップS10)。
【0089】
このように、データdが生成された時刻順に到着する場合での書き込み処理(ステップS1(YES)→ステップS2〜ステップS6)は、indexファイルへのインデックス情報IJの追記、および実データファイルへのデータdの追記、またはこれら追記に加え、indexファイルおよび実データファイルの新規作成により、生成されたデータdを蓄積だけで済むため、ソートや挿入等に伴うメモリコピーが発生せず、高速にデータdの書き込みが可能である。
【0090】
また、生成されたデータdが生成された時刻順に情報蓄積装置10に到着せずその到着時刻が逆転した場合(ステップS1(NO)→ステップS7〜ステップS10)であっても、例えば前記バイナリサーチにより高速に書き込むべきデータdを挿入するindexファイルおよびその挿入すべき位置情報POSを特定することができる。これは、indexファイル、およびインデックス情報IJ1〜インデックス情報IJmの各行が固定長であることを用いて、前記バイナリサーチといったOSのシステムコールを利用したからであり、これによって高速な既存データdの移動、新データdの高速な書き込みが可能となる。
【0091】
[読み出し処理(t、t)]
図8A図8B図8Cは、データdの読み出し処理(後述するステップU1〜ステップU17)にて使用される処理ステップ(サブルーチン)を示すフローチャートである。
【0092】
具体的には、図8Aは、読み出し対象のindexファイルを検索、取得するためのサブルーチンA(t)、図8Bおよび図8Cは、前記検索、取得されたindexファイル内に記述されるインデックス情報IJのうち、時刻tをデータ列として含むインデックス情報IJの行を検索するためのサブルーチンB(I、t)、およびサブルーチンC(I、t)を示す。
【0093】
図9は、前記サブルーチンA(t)〜サブルーチンC(I、t)を含み、前記実データ記録部12bに書き込まれたデータdの読み出し処理を示すフローチャートである。
【0094】
具体的には、ユーザによるデータdの読み出し要求にて、時刻範囲T(開始時刻tと終了時刻t)が設定されると、この時刻範囲Tをクエリとして指定し、当該時刻範囲Tに生成されたデータdを読み出すフローチャートである。
【0095】
このように、前記クエリとして開始時刻t〜終了時刻tまでの時刻範囲Tを指定してデータdの読み出し処理を行うため、以下説明するサブルーチンA(t)、B(t)、およびC(t)では、データdを読み出す開始時刻tと終了時刻tとの両方、或いはそのいずれかの時刻t(tまたはtのいずれか)を指定した処理が行われる。
【0096】
図8Aに示すサブルーチンA(t)では、データdの読み出し開始時刻tと読み出し終了時刻tとの両方が指定される。すなわち、ここでは、サブルーチンA(t)およびA(t)が実行される。
【0097】
ここで、図8A図8B図8C、および図9において、
:時刻tに生成されたデータdのインデックス情報IJを含むindexファイル、
POSI:I内の時刻tに生成されたデータdのインデックス情報IJが記録された位置、
:時刻tに生成されたデータdが記録される実データファイル、
POSA:A内の時刻tに生成されたデータdの記録される位置、
:時刻tに生成されたデータdのインデックス情報IJを含むindexファイル、
POSI:I内の時刻tに生成されたデータdのインデックス情報IJが記録された位置、
:時刻tに生成されたデータdが記録される実データファイル、
POSA:A内の時刻tに生成されたデータdの記録される位置、
とする。
【0098】
まず、サブルーチンA(t)が実行されると、データdの読み出し開始時刻tと一致、またはこの開始時刻tよりも過去の時刻であって、且つその中でも最新の時刻が含まれるインデックス情報IJが記録されたindexファイル名が検索され、取得される(ステップT1)。
【0099】
また、終了時刻tについても同様の処理を行う。すなわち、サブルーチンA(t)が実行されると、データdの読み出し終了時刻tと一致、またはこの終了時刻tよりも過去の時刻であって、且つその中でも最新の時刻が含まれるインデックス情報IJが記述されたindexファイル名が検索され、取得される(ステップT1)。
【0100】
したがって、サブルーチンA(ts、)により、検索結果として1つ(例えば、indexファイル1のみ)または複数のindexファイル(例えば、indexファイル1およびindexファイル2)が読み出し対象のindexファイルとして得られる。
【0101】
次に、図8Bに示すサブルーチンB(I、t)では、データdの読み出し終了時刻tが指定される。
【0102】
サブルーチンB(I、t)が実行されると、前記サブルーチンA(t)にて検索され取得されたindexファイルの中から、読み出し終了時刻tに一致、または読み出し終了時刻tよりも過去の時刻であって、且つ前記indexファイルの中で一番新しい時刻が記述されたインデックス情報IJの位置情報POSが取得される(ステップT10)。
【0103】
図8Cに示すサブルーチンC(I、t)では、データdの読み出し開始時刻tが指定される。
【0104】
サブルーチンC(I、t)が実行されると、前記サブルーチンA(t)にて検索され取得されたindexファイルの中から、読み出し開始時刻tと一致、または読み出し開始時刻tよりも過去の時刻であって、且つその中でも先頭の時刻が記述されたインデックス情報IJの位置情報POSが取得される(ステップT20)。
【0105】
以上のサブルーチンA(ts、e)〜サブルーチンC(I、t)を踏まえて、以下図9に示すデータdの読み出し処理を実行する。
【0106】
まず、本読み出し処理で読み出すデータdを格納するための空リストlistまたは配列arをパラメータretに格納する(ステップU1)。
【0107】
次いで、前記サブルーチンA(t)で得られた検索結果(読み出し開始の対象とされたindexファイル名(日時からなるデータ列))を、パラメータIに代入する(ステップU2)。
【0108】
しかし、サブルーチンA(t)で読み出し対象となるindexファイルが得られず、前記パラメータIが空である場合には(ステップU3、YES)、検索結果が得られなかった旨をWebサーバ40を介して、アプリケーション50に送信する(ステップU4)。
【0109】
これに対して、前記パラメータI内に前記サブルーチンA(t)で得られた検索結果が格納されている場合には(ステップU3、NO)、当該サブルーチンA(t)の検索結果(読み出し終了の対象とされたindexファイル)をパラメータIに代入し(ステップU5)、次いで前記サブルーチンC(I、t)の検索結果(読み出し開始時刻tに一致するインデックス情報IJの位置情報POS、または前記indexファイルの中で一番古い時刻が記述された位置情報POS)をパラメータPOSIに代入する(ステップU6)。
【0110】
しかし、サブルーチンC(I、t)にて、時刻tに対応する位置情報POSが得られず、パラメータPOSIが空である場合には(ステップU7、YES)、検索結果が得られなかった旨をWebサーバ40を介して、アプリケーション50に送信する(ステップU4)。
【0111】
これに対して、前記パラメータPOSI内に前記検索結果が格納されている場合には(ステップU7、NO)、次いでサブルーチンB(I、t)の検索結果(読み出し終了時刻tに一致、または読み出し終了時刻tよりも過去の時刻であって、且つ前記indexファイルの中で一番新しい時刻が記述されたインデックス情報IJの位置情報POS)をパラメータPOSIに代入する(ステップU8)。これにより、パラメータPOSIには、前記終了時刻tに対応するデータdが書き込まれた位置情報POSが格納されている。
【0112】
その後、前記パラメータI(開始時刻tが含まれるindexファイルを指す)の値をパラメータxに代入し、前記パラメータPOSI(読み出し開始時刻tに一致するインデックス情報IJの位置情報POS、または前記indexファイルの中で一番古い時刻が記述された位置情報POS)の値をパラメータyに代入する(ステップU9)。
【0113】
ここでパラメータxに代入された値を、以下ではパラメータIとする。
その後、前記パラメータIおよびパラメータyに従って読み出すデータdのサイズと、その読み出すデータdの(開始および終了)位置と、をパラメータ(Size、POS)に代入する(ステップU10)。
【0114】
更に、前記パラメータ(Size、POS)に従って、実データファイルに記録されたデータdを読み出し、この読み出したデータdをパラメータDに代入する(ステップU11)。
【0115】
その後、パラメータDに代入されたデータdが、前記パラメータretの末尾(初めての読み出しであれば、先頭)に追記される(ステップU12)。
【0116】
次いで、前記パラメータxに格納された「開始時刻tが含まれるindexファイル名(日時のデータ列)」と、パラメータIに格納された「終了時刻tが含まれるindexファイル名(日時のデータ列)」と、が一致(すなわち、読み出し対象が1つのindexファイルで完結)し、且つ前記パラメータyに格納された「インデックス情報IJの読み出し開始位置POSI」と、パラメータPOSIに格納された「インデックス情報IJの読み出し終了位置POSI」と、が一致する(1行のインデックス情報IJが読み出し対象)か否かを判断する(ステップU13)。
【0117】
ステップU13の結果、それぞれの条件が一致すると判断すると、すなわち、読み出し対象のデータdが、ある単一のindexファイル内のある1行分のインデックス情報IJで完結する場合には(ステップU13、YES)、ステップU12にてパラメータretに追加されたデータdがWebサーバ40を介してアプリケーション50へ送信される(ステップU14)。
【0118】
これに対して、ステップU13にて、いずれかの条件が一致しないと判断されると(ステップU13、NO)、まずパラメータyに格納されたデータdの読み出し開始位置POSIが、検索対象であるindexファイルの最終行、すなわちm行目と一致するか否かの判断がなされる(ステップU15)。
【0119】
前記開始位置POSIが、前記m行目でなければ(ステップU15、NO)、y=y+1とし、読み出し対象のインデックス情報IJを1行下げ(ステップU17)、再度ステップU10の動作に戻り、1行下げたインデックス情報IJについてデータdの読み出し処理を実行する。
【0120】
すなわち、読み出し対象のindexファイルにて、1行下のインデックス情報IJに従って、対応する実データファイルから前記パラメータSizeに相当するデータ長さのデータdを読み出し、次いで読み出したデータdをパラメータDに格納し、そのデータdをパラメータretの末尾に追加する(ステップU10→ステップU11→ステップU12)。
【0121】
その後、前記y=y+1とされた際の前記1行下の「インデックス情報IJの読み出し開始位置POSI」と、パラメータPOSIに格納された「インデックス情報IJの読み出し終了位置POSI」と、が一致したと判断すると(ステップU13、YES)、前記ステップU12にてパラメータretに追加された、例えば2行分のインデックス情報IJに相当するデータdがWebサーバ40を介してアプリケーション50へ送信される(ステップU14)。
【0122】
また、前記開始位置POSIが、前記m行目である場合には(ステップU15、YES)、読み出し対象のindexファイルが複数に亘ることから、x=x+1とし、読み出し対象となるindexファイルを隣接するindexファイルに設定し、且つyの値、すなわち開始位置POSIに“0行”を代入することで(ステップU16)、当該読み出し対象となったindexファイルの先頭行(1行目)から前記ステップU10以降の動作を実行する。
【0123】
以上の読み出し処理を実行することで、ユーザが指定した時刻範囲Tにて生成されたデータdを読み出すことができる。
【0124】
[読み出し処理(treq)]
図10Aおよび図10Bは、ユーザによって指定された特定の時刻treqに生成されたデータdの読み出し処理(後述するステップX1〜ステップX9)を実行するための処理ステップ(サブルーチン)を示すフローチャートである。
【0125】
具体的には、図10Aは、時刻treqに基づいて読み出し対象となるindexファイルを検索、取得するためのサブルーチンA(treq)、図10Bは、検索、取得されたindexファイル内であって、当該時刻treqを含むインデックス情報IJの行を検索するためのサブルーチンD(Ireq、t)を示す。
【0126】
図11は、前記サブルーチンA(t)およびサブルーチンD(Ireq、t)を含み、実データ記録部12bに書き込まれたデータdを読み出す処理を示すフローチャートである。
ここでは、前記図8A図8B図8C、および図9(読み出し処理(t、t))と異なり、クエリとして特定の時刻treqにおけるデータdを読み出す処理を行うため、以下に説明するサブルーチンA(treq)、D(Ireq、treq)の各処理は、この時刻treqに基づいて実行されることになる。
【0127】
ここで、図10Aおよび図10B、および図11において、
req:時刻treqに生成されたデータdのインデックス情報IJを含むindexファイル、
POSIreq:Ireq内の時刻treqに生成されたデータdのインデックス情報IJが記録された位置、
req:時刻treqに生成されたデータdが記録される実データファイル、
POSAreq:Areq内の時刻treqに生成されたデータdの記録される位置、
とする。
【0128】
まず、図10Aに示すサブルーチンA(treq)を実行すると、指定した読み出し時刻treqと一致、またはこの時刻treqよりも過去の時刻であって、且つその中でも最新の時刻を含むindexファイル名が検索され、取得される(ステップV1)。
【0129】
また、図10Bに示すサブルーチンD(Ireq、treq)を実行すると、前記サブルーチンA(treq)にて検索、取得されたIndexファイル内であって、時刻treqと一致する時刻tを含むインデックス情報IJに記述された位置情報POSが取得される(ステップV10)。
【0130】
以上のサブルーチンA(treq)、およびD(Ireq、treq)を踏まえて、以下図11に示す読み出し処理を実行する。
【0131】
まず、パラメータretに、読み出し処理によって読み出すデータdを格納するための空リストlistまたは配列arを格納する(ステップX1)。
【0132】
次いで、前記サブルーチンA(treq)で得られた検索結果(読み出し対象とされるindexファイル名(日時からなるデータ列))を、パラメータIreqに代入する(ステップX2)。
【0133】
しかし、サブルーチンA(treq)で読み出し対象となるindexファイル名が得られず、当該パラメータIreqが空である場合には(ステップX3、YES)、検索結果が得られなかった旨をWebサーバ40を介して、アプリケーション50に送信する(ステップX4)。
【0134】
これに対して、前記パラメータIreq内に検索結果が格納されている場合には(ステップX3、NO)、次いでサブルーチンD(Ireq、treq)の検索結果(時刻treqを含むインデックス情報IJに記述された位置情報POS)をパラメータPOSIreqに代入する(ステップX5)。
【0135】
ステップX5の結果、サブルーチンD(Ireq、treq)にて、時刻treqを含むインデックス情報IJに対応する位置情報POSが得られず、前記パラメータPOSIreqが空である場合には(ステップX6、YES)、検索結果が得られなかった旨をWebサーバ40を介して、アプリケーション50に送信する(ステップX4)。
【0136】
これに対して、前記パラメータPOSIreq内に検索結果(指定時刻treqを含むインデックス情報IJが記述された位置情報POS)が格納されている場合には(ステップX6、NO)、当該時刻treqを含むインデックス情報IJに記述された“サイズ”および“読み出し開始位置”のそれぞれをパラメータ(Size、POS)に代入する(ステップX7)。
【0137】
その後、前記パラメータ(Size、POS)に従い、indexファイル名と対応するファイル名を有する実データファイルに記録された、前記パラメータSizeに相当するデータ長のデータdを読み出し、この読み出したデータdをパラメータretに代入する(ステップX8)。
【0138】
そして、最後に前記パラメータretに格納された値(読み出し対象のデータd)をWebサーバ40を介して、アプリケーション50に送信する(ステップX9)。
【0139】
このように、indexファイル1〜indexファイルnのそれぞれに設定されたファイル名が、データdの生成された時刻であるため、読み出そうとする時刻treqに基づき前記バイナリサーチを行うことで目的のインデックス情報IJを有するindexファイルを容易且つ迅速に特定することができることから、読み出し対象とされるデータdの記録位置を容易且つ迅速に把握することができる。
【0140】
したがって、前記構成の情報蓄積装置10によれば、デバイス30によって生成されたデータdが生成された時刻t順に到着した場合、データdが到着した順に実データファイル12へ追記(書き込み)しつつ、当該実データファイルに追記したデータdの生成時刻t、データサイズ、および実データファイルにおける追記位置を、当該データdが記録された実データファイルと対応するファイル名を有するindexファイル内にインデックス情報IJとして追記する。
【0141】
これにより、データdが到着した順に単に当該データdのインデックス情報IJを生成し、実データファイルへのデータdの追記をすればよく、またindexファイルや実データファイルの容量が限界に達した場合には、これらファイルの新規作成により、生成したデータdを蓄積するだけでよいため、ソートや挿入等に伴うメモリコピーが発生せず、高速にデータdの書き込みが可能である。
【0142】
また、データ記録部12は、1つの実データファイル内に、1つのBLOBデータが記録される実データ記録部12bを備える。
【0143】
このような構成を採用することで、デバイス30が生成するデータdと、画像・動画等のBLOBデータと、を共通のデータベースで処理することができ、例えばこれらデータdやBLOBデータのサイズや特性の違いから共通の仕組みで蓄積することが難しいといった問題を解消することができる。
【0144】
また、生成されたデータdの情報蓄積装置10への到着時刻が入れ替わった場合であっても、各indexファイル名を、固定長のバイナリデータで構成したことから、バイナリサーチにより高速に書き込むべきデータdを挿入するファイルおよびその挿入位置を特定することができる。このように、indexファイル名、およびインデックス情報IJ1〜インデックス情報IJmの各行が固定長であることを利用して、前記バイナリサーチといったOSのシステムコールによって高速な既存データdの移動と、新データdの高速な書き込みが可能である。
【0145】
更に、前記構成の情報蓄積装置10によれば、indexファイルと実データファイルとのファイル名がそれぞれデータdの生成された時刻tに基づいて設定されているため、時刻tの指定により容易に当該時刻tを含むindexファイルおよびこのindexファイル内のインデックス情報IJを容易に検索できる。そして、このインデックス情報IJには、データdが書き込まれた位置POSが記述されていることから、検索されたインデックス情報IJに基づいて容易にデータdを読み出すことができる。
【0146】
これは、読み出そうとする時刻treqを指定した場合に限らず、開始時刻tと終了時刻tとを指定して、この時刻範囲Tに書き込まれたデータdを読み出す場合であっても同様である。
【0147】
なお、例えば、indexファイルに対応する実データファイルが複数ある場合には、これらの複数の実データファイルを1つのディレクトリに纏め、当該ディレクトリ名を、対応するindexファイル名と小さい計算量で一意に変換可能な規則で対応づけられた名前に設定してもよい。これにより、一意に実データファイルが定まり、高速にデータdの読み出しが可能となる。
【0148】
また、実データファイルにおけるデータdが記録される領域(POSA)を、インデックス情報IJに記述される“サイズ”と“読み出し開始位置”との組み合わせ、その領域を示してもよい。
【0149】
さらに、固定長のデータ列であるインデックス情報IJのサイズを、ページ単位としてもよいし、このページ単位の約数としても良い。
【0150】
また、前記index記録部12a内に記録される、例えばindexファイル1を分割してもよい。この場合、indexファイル1を分割して生成された2つのindexファイルを、実データファイル1に対応させた構成であってもよい。
【0151】
本発明は、前記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、前記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されたり、幾つかの構成要件が異なる形態にして組み合わされても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除されたり組み合わされた構成が発明として抽出され得るものである。
【0152】
また、前記実施形態に記載した手法は、計算機(コンピュータ)に実行させることができるプログラム(ソフトウエア(Software)手段)として、例えば磁気ディスク(フロッピー(登録商標)ディスク(Floppy disk)、ハードディスク等)、光ディスク(CD−ROM、DVD、MO等)、半導体メモリ(ROM、RAM、フラッシュメモリ(Flash memory)等)等の記憶媒体に格納し、また通信媒体により伝送して頒布することもできる。なお、媒体側に格納されるプログラムには、計算機に実行させるソフトウエア手段(実行プログラムのみならずテーブル(Table)構造およびデータ構造も含む)を計算機内に構成させる設定プログラムをも含む。本装置を実現する計算機は、記憶媒体に記憶されたプログラムを読み込み、また場合により設定プログラムによりソフトウエア手段を構築し、このソフトウエア手段によって動作が制御されることにより上述した処理を実行する。なお、本明細書でいう記憶媒体は、頒布用に限らず、計算機内部あるいはネットワークを介して接続される機器に設けられた磁気ディスクおよび半導体メモリ等の記憶媒体を含む。
図1
図2
図3
図4
図5
図6A
図6B
図6C
図7
図8A
図8B
図8C
図9
図10A
図10B
図11

【手続補正書】
【提出日】2019年2月5日
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
データ送信元のデバイスによってデータが生成された時刻と、当該データを受信して書き込んだ領域を示す位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするindexファイルを記録するインデックス記録部と、
前記indexファイルのファイル名と、第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ領域を示す位置情報、および前記データが生成された時刻、を前記indexファイルにインデックス情報として書き込む書き込み処理部と、
時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記indexファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、
を備える情報蓄積装置。
【請求項2】
前記データが生成された時刻と、当該データを書き込んだ領域を示す位置情報と、を含んだデータ列であるインデックス情報は、固定長のデータ列である、請求項1に記載の情報蓄積装置。
【請求項3】
前記書き込み処理部は、生成されたデータの時刻順に前記実データファイルに当該データを追記する、請求項1または請求項2に記載の情報蓄積装置。
【請求項4】
前記実データファイルへの書き込み対象となるデータの生成された時刻が、前記indexファイルの先頭行に記述された前記インデックス情報が含む時刻より過去の時刻である場合に行う処理として、
前記書き込み処理部は、
前記データの生成された時刻に基づき、前記インデックス情報を挿入すべきindexファイルを検索するindexファイル検索と、
前記indexファイル検索により検索されたindexファイルに前記書き込み対象となるデータの生成された時刻を含むインデックス情報を挿入する行を検索するインデックス情報挿入行検索と、
前記indexファイル検索により検索されたindexファイルのファイル名と、前記第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名の実データファイルに前記データを書き込み、当該書き込んだデータが生成された時刻およびそのデータが書き込まれた領域を示す位置情報を含むインデックス情報を、前記インデックス情報挿入行検索により検索されたindexファイル内の挿入すべき行に挿入するインデックス情報挿入と、
を行う、請求項1または請求項2に記載の情報蓄積装置。
【請求項5】
前記実データファイルへの書き込み対象となるデータの生成された時刻が、前記indexファイルの先頭行に記述された前記インデックス情報が含む時刻より新しい時刻である場合に行う処理として、
前記書き込み処理部は、
前記データの生成された時刻に基づき、前記indexファイルに前記書き込み対象となるデータの生成された時刻を含むインデックス情報を挿入する行を検索するインデックス情報挿入行検索と、
前記indexファイル検索により検索されたindexファイルのファイル名と、前記第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名の実データファイルに前記データを書き込み、当該書き込んだデータが生成された時刻およびそのデータが書き込まれた領域を示す位置情報を含むインデックス情報を、前記indexファイル内の挿入すべき行に挿入するインデックス情報挿入と、
を行う、請求項1または請求項2に記載の情報蓄積装置。
【請求項6】
前記読み出し処理部は、
読み出し対象とされるデータの読み出し開始時刻とその終了時刻とがそれぞれ指定されると、当該開始時刻と終了時刻とを含んだインデックス情報が同一のindexファイル内であるか否かを判断するファイル判断と、
前記ファイル判断により、前記同一のindexファイル内に前記データの読み出し開始時刻と終了時刻とを含んだインデックス情報が含まれると判断された場合、当該開始時刻と終了時刻とがそれぞれ含まれるインデックス情報に従い、前記実データファイルからデータを読み出す実ファイルデータ読み出しと、
前記ファイル判断により、前記データの読み出し開始時刻と終了時刻とを含むインデックス情報が複数のindexファイルに跨がっていると判断された場合、当該開始時刻と終了時刻とがそれぞれ含まれるインデックス情報に従い、複数の前記実データファイルからデータを読み出す複数実ファイルデータ読み出しと、
を行う、請求項1に記載の情報蓄積装置。
【請求項7】
前記読み出し処理部は、
読み出し対象とされるデータの読み出し時刻が指定されると、当該時刻を含んだインデックス情報に基づいて、前記実データファイルを検索する実データファイル検索と、
前記実データファイル検索によって検索された実データファイルから、前記インデックス情報に基づいて、前記指定された時刻のデータを読み出すデータ読み出しと、
を行う、請求項1に記載の情報蓄積装置。
【請求項8】
前記indexファイルのファイルサイズは、OSのページングサイズの倍数である、請求項1乃至請求項7のいずれか一項に記載の情報蓄積装置。
【請求項9】
時刻と、この時刻に対応したデータと、を生成するデータ送信元のデータ生成装置と、
前記データ生成装置によって生成されたデータを受信して実データファイルに書き込み、書き込んだ当該データを、外部からの読み出し要求に応じて読み出す情報蓄積装置と、
を備え、
前記情報蓄積装置は、
前記データ生成装置によって生成されたデータを受信して書き込んだ領域を示す位置情報と、このデータが生成された時刻と、を含んだ固定長のデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするindexファイルを記録するインデックス記録部と、
前記indexファイルのファイル名と、第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、当該インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを記録する実データ記録部と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ領域を示す位置情報、および前記データが生成された時刻、を前記indexファイルにインデックス情報として書き込む書き込み処理部と、
時刻に基づいた前記読み出し要求を受信すると、当該時刻に対応するファイル名を含む前記indexファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す読み出し処理部と、
を具備する、データ処理システム。
【請求項10】
コンピュータに、
データ送信元のデバイスによってデータが生成された時刻と、当該データを受信して書き込んだ領域を示す位置情報と、を含んだデータ列であって、各々が前記データの生成された時刻順に配置されたインデックス情報を含み、前記生成されたデータの時刻に応じたファイル名とするindexファイルを、インデックス記録部に記録する機能と、
前記indexファイルのファイル名と、第1の計算量で一意かつ相互に対応付け可能な規則を有したファイル名を備え、前記インデックス情報に記述された前記位置情報に前記データが書き込まれる実データファイルを、実データ記録部に記録する機能と、
前記データを前記実データファイルに書き込み、当該実データファイルにデータを書き込んだ領域を示す位置情報、および前記データが生成された時刻、を前記indexファイルにインデックス情報として書き込む機能と、
時刻に基づいて読み出し対象とされるデータが指定されると、当該時刻に対応するファイル名を含む前記indexファイル内のインデックス情報に基づいて、前記実データファイルからデータを読み出す機能と、
を実現させるためのプログラム。
【国際調査報告】