(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024011011
(43)【公開日】2024-01-25
(54)【発明の名称】エントリ作成方法およびエントリ作成プログラム
(51)【国際特許分類】
G06F 16/28 20190101AFI20240118BHJP
【FI】
G06F16/28
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2022112667
(22)【出願日】2022-07-13
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】大西 隆史
(72)【発明者】
【氏名】金政 泰彦
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA12
(57)【要約】
【課題】読み出し回数を削減する。
【解決手段】処理部は、時刻に対応するデータを保持するキーバリューストアに対する各プログラムからの読み出し要求による読み出し対象の時間幅のうち最長の時間幅以上である第1時間幅を、キーバリューストアの1つのエントリに対応付ける時間幅に決定する。処理部は、入力された、時刻ごとのデータに基づいて、第1時間幅の時刻範囲に属する複数のデータに対応するエントリを作成し、キーバリューストアに格納する。
【選択図】
図18
【特許請求の範囲】
【請求項1】
コンピュータが、
時刻に対応するデータを保持するキーバリューストアに対する各プログラムからの読み出し要求による読み出し対象の時間幅のうち最長の時間幅以上である第1時間幅を、前記キーバリューストアの1つのエントリに対応付ける時間幅に決定し、
入力された、時刻ごとの前記データに基づいて、前記第1時間幅の時刻範囲に属する複数のデータに対応する前記エントリを作成し、前記キーバリューストアに格納する、
エントリ作成方法。
【請求項2】
前記第1時間幅は、前記最長の時間幅と同じ長さである、
請求項1記載のエントリ作成方法。
【請求項3】
前記コンピュータが、前記1つのエントリに対応付ける前記時間幅の複数の候補を示す第1情報に基づいて、前記最長の時間幅より長く、かつ、前記最長の時間幅との差が最小である前記時間幅の候補を、前記第1時間幅に決定する、
請求項1記載のエントリ作成方法。
【請求項4】
前記第1情報では、前記時間幅の前記複数の候補それぞれが、前記読み出し要求における前記時間幅を示すアクセス時間幅であって当該候補よりも短い前記アクセス時間幅の範囲を示すアクセスパターンに対応付けられており、
前記コンピュータが、前記アクセスパターンごとの前記読み出し要求の履歴に基づいて、前記アクセスパターンごとの前記読み出し要求の所定期間における発生割合を算出し、前記発生割合が一定割合よりも低い前記アクセスパターンに対応する前記読み出し要求を除外して、前記最長の時間幅を特定する、
請求項3記載のエントリ作成方法。
【請求項5】
前記コンピュータが、前回作成した前記エントリの前記第1時間幅に対し、今回作成する前記エントリの前記時間幅の候補を、前記第1情報に基づいて、前回の前記第1時間幅よりも1段階短い前記時間幅、前回の前記第1時間幅、および、前回の前記第1時間幅よりも1段階長い前記時間幅とする、
請求項3記載のエントリ作成方法。
【請求項6】
前記コンピュータが、前記読み出し要求による読み出し対象の前記時間幅および作成される前記エントリの前記時間幅が所定時間一定である場合に、前記読み出し要求による読み出し対象の第1時刻範囲と前記読み出し要求により読み出された前記エントリに対応する第2時刻範囲との開始時刻の差分が所定時間一定であることを検出すると、次回作成する前記エントリに対応する第3時刻範囲の終端時刻を前記差分の分だけ後ろにずらす、
請求項1記載のエントリ作成方法。
【請求項7】
前記コンピュータが、前記最長の時間幅に対して特定される、前記第1情報に含まれる前記時間幅の候補が前記最長の時間幅と異なる場合、前記第1情報に含まれる当該時間幅の候補を、前記最長の時間幅に基づいて変更する、
請求項3記載のエントリ作成方法。
【請求項8】
前記コンピュータが、前記エントリを前回作成してから現在までに受け付けた前記読み出し要求に基づいて、前記最長の時間幅を特定する、
請求項1記載のエントリ作成方法。
【請求項9】
前記データは、センサにより取得されたセンサデータである、
請求項1記載のエントリ作成方法。
【請求項10】
前記キーバリューストアの前記1つのエントリは、時刻範囲に対応するキーと当該時刻範囲に属する複数の時刻それぞれに対応する前記データを含む値とを有する、
請求項1記載のエントリ作成方法。
【請求項11】
コンピュータに、
時刻に対応するデータを保持するキーバリューストアに対する各プログラムからの読み出し要求による読み出し対象の時間幅のうち最長の時間幅以上である第1時間幅を、前記キーバリューストアの1つのエントリに対応付ける時間幅に決定し、
入力された、時刻ごとの前記データに基づいて、前記第1時間幅の時刻範囲に属する複数のデータに対応する前記エントリを作成し、前記キーバリューストアに格納する、
処理を実行させるエントリ作成プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はエントリ作成方法およびエントリ作成プログラムに関する。
【背景技術】
【0002】
情報処理システムではデータの保存にキーバリューストアが用いられることがある。キーバリューストアは、キーとキーに対応する値(バリュー)とを保持する。例えば、キーバリューストアは、ストリーム処理などに用いられる時系列データの保持に用いられることがある。
【0003】
例えば、時系列のデータが分割された分割データを格納するデータ格納部から、第1の時刻と第1の時刻を所定時間経過した第2の時刻との間の区間の分割データの読み出しを行うストレージシステムの提案がある。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
キーバリューストアの1つのエントリには、所定の時間幅をもつ時刻範囲のデータが格納されることがある。また、キーバリューストアに対して、ある時間幅の時刻範囲を指定した読み出し要求が行われることがある。この場合、キーバリューストアの1つのエントリの時間幅が、読み出し要求の時間幅に比べて小さいほど、要求された時間幅のデータを読み出すために、キーバリューストアからのエントリの読み出し回数が増える。
【0006】
1つの側面では、本発明は、読み出し回数を削減することを目的とする。
【課題を解決するための手段】
【0007】
1つの態様では、エントリ作成方法が提供される。このエントリ作成方法では、コンピュータが、時刻に対応するデータを保持するキーバリューストアに対する各プログラムからの読み出し要求による読み出し対象の時間幅のうち最長の時間幅以上である第1時間幅を、キーバリューストアの1つのエントリに対応付ける時間幅に決定する。コンピュータが、入力された、時刻ごとのデータに基づいて、第1時間幅の時刻範囲に属する複数のデータに対応するエントリを作成し、キーバリューストアに格納する。
【0008】
また、1つの態様では、コンピュータにより実行されるエントリ作成プログラムが提供される。
【発明の効果】
【0009】
1つの側面では、読み出し回数を削減できる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施の形態の情報処理装置を説明する図である。
【
図2】第2の実施の形態の情報処理システムの例を示す図である。
【
図3】情報処理装置のハードウェア例を示す図である。
【
図5】ユーザロジックのステートアクセスの例を示す図である。
【
図12】ストリーム処理の例を示すフローチャートである。
【
図13】データ受信時サブプロセスの例を示すフローチャートである。
【
図14】ユーザロジックの処理例を示すフローチャートである。
【
図15】アクセスパターン取得サブプロセスの例を示すフローチャートである。
【
図16】ステート書き込みサブプロセスの例を示すフローチャートである。
【
図17】エントリ作成判定サブプロセスの例を示すフローチャートである。
【
図18】エントリの時間幅の決定例を示す図である。
【
図19】第3の実施の形態のアクセスパターンテーブルの例を示す図である。
【
図20】アクセスパターンに応じたKVSのエントリの例を示す図である。
【
図21】ユーザロジックのステートアクセスの例を示す図である。
【
図24】アクセスパターンの集計例を示す図である。
【
図26】アクセスパターン取得サブプロセスの例を示すフローチャートである。
【
図27】エントリ作成判定サブプロセスの例を示すフローチャートである。
【
図28】第4の実施の形態のエントリの時間幅の例を示す図である。
【
図29】第5の実施の形態の時刻のオフセットずれの修正例を示す図である。
【
図30】第6の実施の形態のアクセスパターンの時間幅の変更例を示す図である。
【
図31】情報処理システムによるサービス提供例を示す図である。
【発明を実施するための形態】
【0011】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0012】
図1は、第1の実施の形態の情報処理装置を説明する図である。
情報処理装置10は、記憶部11と処理部12とを有する。記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12はプログラムを実行するプロセッサでもよい。「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
【0013】
記憶部11は、キーバリューストア11aを有する。ただし、キーバリューストア11aは、情報処理装置10の外部の記憶装置が有するものでもよい。キーバリューストア11aは、時刻に対応するデータを保持する。具体的には、キーバリューストア11aは、キーとキーに対応する値(バリュー)とを有するエントリを保持する。1つのエントリは、1つのレコードに相当する。キーバリューストア11aへのデータの書き込みや読み出しは、エントリ単位に行われる。
【0014】
ここで、キーは時刻に対応する識別子である。キーは時刻範囲に対応する識別子でもよい。キーは、時刻に加えて、データの取得元のデバイスの識別情報やデータの種別の情報などを含んでもよい。キーバリューストア11aに格納されるデータは、例えば、センサなどのデバイスで生成された時系列のデータ、すなわち、時系列データである。データは、当該データが生成された時刻を示すタイムスタンプと当該デバイスで生成された値(例えば、センサによる物理量の計測値など)をもつ。当該データは、センサにより生成されるセンサデータでもよい。
【0015】
キーバリューストア11aの例では、キーの項目には、時間幅5分の時刻範囲が登録される。また、値の項目には時間幅5分の時刻範囲に属する複数の時刻に対応する複数の値が登録される。より具体的には、キーバリューストア11aはキー「12:00:00~12:05:00」および値「{12:00:00: v11,…,12:04:58: v12}」のエントリを有する。このエントリは、12時00分00秒~12時05分00秒の5分幅の時刻範囲における、12時00分00秒の値v11、…、12時04分58秒の値v12を示す。キーバリューストア11aの例では、12時30分00秒まで、5分幅の時刻範囲に対応する複数のエントリが登録されている。
【0016】
ここで、「12:00:00~12:05:00」などの時刻範囲のキーに対応する値は、例えば終端時刻(例えば、「12:05:00」)の直前の時刻(例えば、「12:04:59」)までのデータを含み、当該終端時刻のデータを含まないものとする。
【0017】
また、キーバリューストア11aには、12時30分00秒から5分が経過するまでの間に時系列に入力される最新のデータを格納するエントリが保持される。当該エントリのキーは、例えば「latest」である。キーバリューストア11aの例では、キー「latest」のエントリには、12時30分00秒以降の値が記録されている。そして、処理部12は、キーバリューストア11aの1つのエントリに対応付ける時間幅を次のように決定する。
【0018】
処理部12は、キーバリューストア11aに対する各プログラムからの読み出し要求を受け付ける。各プログラムは、情報処理装置10が実行するものでもよいし、情報処理装置10と通信する他の情報処理装置が実行するものでもよい。すなわち、情報処理装置10は、キーバリューストア11aのデータを用いる複数のプログラムを実行してもよいし、他の情報処理装置が実行する複数のプログラムから複数の読み出し要求を受け付けてもよい。読み出し要求は、読み出し対象の時刻範囲を含む。処理部12は、読み出し要求に応じて、キーバリューストア11aから、該当の時刻範囲に対応するキーをもつエントリを読み出し、応答する。
【0019】
処理部12は、各プログラムからの読み出し要求に含まれる読み出し対象の時間幅のうち最長の時間幅以上である第1時間幅を、キーバリューストア11aの1つのエントリに対応付ける時間幅に決定する。読み出し対象の時間幅は、読み出し対象で指定される時刻範囲の時間幅である。
【0020】
例えば、処理部12は、12時30分00秒から5分が経過するまでの間に、読み出し要求R1,R2を受け付けるとする。読み出し要求R1の読み出し対象の時間幅は5分である。読み出し要求R2の読み出し対象の時間幅は10分である。読み出し要求R1,R2の時間幅のうちの最長の時間幅は10分である。この場合、一例では、処理部12は第1時間幅を10分とする。ただし、設定可能な時間幅の候補が、5分、15分、…などのように予め定められている場合もある。その場合、処理部12は、10分よりも長く、10分との差が小さい15分などの時間幅の候補を第1時間幅としてもよい。
【0021】
処理部12は、入力された、時刻ごとのデータに基づいて、第1時間幅の時刻範囲に属する複数のデータに対応するエントリを作成し、キーバリューストア11aに格納する。
例えば、12時35分00秒の時点で、処理部12は、第1時間幅を10分と決定済である。このため、処理部12は、12時35分00秒の時点では、12時30分00秒以降に対応する時間幅5分のエントリを作成せずに、キー「latest」のエントリへの値の記録を継続する。そして、12時35分00秒から12時40分00秒の間に、時間幅10分よりも長い読み出し要求が発生せずに、12時40分00秒の時点でも、第1時間幅が10分のまま変わらないとする。
【0022】
すると、処理部12は、キーバリューストア11aにおけるキー「latest」のレコードに基づいて、エントリe1を作成する。エントリe1は、キーが「12:30:00~12:40:00」、値が「{12:30:00: v41,…,12:39:55: v43}」である。処理部12は、キーバリューストア11aにエントリe1を格納する。キーバリューストア11bは、キーバリューストア11aにエントリe1が格納された結果を示す。エントリe1は、時刻範囲12時30分00秒~12時40分00秒(時間幅10分)に対応する。
【0023】
また、処理部12は、エントリe1を作成した時点で、キー「latest」の値を削除する。キーバリューストア11bにおけるキー「latest」の値「{}」は、当該値の削除が行われた結果を示す。当該キー「latest」のエントリには、12時40分00秒以降に入力されたデータが格納される。
【0024】
情報処理装置10によれば、キーバリューストア11aに対する各プログラムからの読み出し要求による読み出し対象の時間幅のうち最長の時間幅以上である第1時間幅がキーバリューストア11aの1つのエントリに対応付ける時間幅に決定される。入力された、時刻ごとのデータに基づいて、第1時間幅の時刻範囲に属する複数のデータに対応するエントリe1が作成され、キーバリューストア11aに格納される。
【0025】
これにより、情報処理装置10は、読み出し回数を削減できる。上記の例において、読み出し要求R2が発生した後は、その後も読み出し要求R2のように読み出し対象の時間幅を10分とする読み出し要求が継続的に発生する可能性が高い。そこで、情報処理装置10は、1つのエントリの時間幅を、要求された最長の時間幅以上とすることで、今後、当該最長の時間幅での読み出し要求を受け付けた場合でも、キーバリューストア11bから比較的少ない読み出し回数で要求されたエントリを読み出せる。このため、情報処理装置10は、キーバリューストア11bからのエントリの読み出しの高速化を図れる。例えば、情報処理装置10は、読み出し対象の時刻範囲が12時30分00秒~12時40分00秒の場合には、エントリe1を1回読み出せばよく、読み出し要求に対して高速に読み出しを行える。
【0026】
以下では、より具体的なシステムを例示して、情報処理装置10の機能を更に詳細に説明する。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
【0027】
図2は、第2の実施の形態の情報処理システムの例を示す図である。
第2の実施の形態の情報処理システムは、情報処理装置100およびメッセージキューサーバ200,300を含む。情報処理装置100およびメッセージキューサーバ200,300は、ネットワーク20に接続される。ネットワーク20は、例えば、LAN(Local Area Network)である。メッセージキューサーバ200は、ネットワーク30に接続される。ネットワーク30は、WAN(Wide Area Network)やインターネットである。ネットワーク30には、コネクテッドカー41,42,43およびIoT(Internet of Things)デバイス44が接続される。コネクテッドカー41,42,43およびIoTデバイス44は、速度や位置などの物理量を計測するセンサを備える。
【0028】
第2の実施の形態の情報処理システムは、コネクテッドカー41,42,43のセンサやIoTデバイス44のセンサにより計測された速度や位置などのイベントデータを収集する。当該イベントデータは、センサデータと言われてもよい。イベントデータは、コネクテッドカー41,42,43やIoTデバイス44から時系列に送信される。このため、イベントデータは時系列データの一種である。情報処理システムは、時系列に入力されるイベントデータに対するストリーム処理を実行する。ストリーム処理は、イベントストリーム処理と言われてもよい。
【0029】
情報処理システムは、ストリーム処理の結果に応じて、コネクテッドカー41,42,43やIoTデバイス44のユーザに種々のサービスを提供する。例えば、一定時間における速度変化から車両本体のふらつきを検知して該当の車両のユーザに警告するサービスや、ある道路に滞留する車両数が多い場合に渋滞情報や迂回経路情報などを、該当の道路の付近の車両のユーザに通知するサービスなどが考えられる。
【0030】
情報処理装置100は、メッセージキューサーバ200からイベントデータを受信し、イベントデータに基づくストリーム処理を実行するサーバコンピュータである。イベントデータは、タイムスタンプとセンサによる計測値とを含む。また、ストリーム処理の処理内容を記述するプログラムは、ユーザロジックと言われる。KVSにおける1つのエントリは、<key:value>、すなわち、キー(key)と値(value)との組となる。KVSへのデータの書き込みや読み出しは、エントリ単位に行われる。
【0031】
情報処理装置100は、受信したイベントデータや、イベントデータをユーザロジックにより加工したデータをキーバリューストア(KVS:Key-Value Store)に保持する。情報処理装置100は、ユーザロジックの要求に応じて、KVSからデータを読み出したり、KVSにデータを書き込んだりする。情報処理装置100は、ユーザロジックの処理結果を新たなイベントデータとして、メッセージキューサーバ300に送信することもある。
【0032】
メッセージキューサーバ200,300は、それぞれメッセージキューとして機能するサーバコンピュータである。メッセージキューは、受信したイベントデータを保持するキューである。
【0033】
メッセージキューサーバ200は、コネクテッドカー41,42,43およびIoTデバイス44から受信したイベントデータを、メッセージキューサーバ200のメッセージキューに格納する。メッセージキューサーバ200は、当該メッセージキューに格納されたイベントデータを情報処理装置100に送信する。
【0034】
メッセージキューサーバ300は、情報処理装置100から受信したイベントデータを、メッセージキューサーバ300のメッセージキューに格納する。メッセージキューサーバ300は、当該メッセージキューに格納されたイベントデータを情報処理装置100またはイベントデータに応じて所定のサービスを実行する他のサーバコンピュータに送信する。ここで、
図2では、当該他のサーバコンピュータの図示を省略している。他のサーバコンピュータは、上記のふらつきの警告、渋滞情報および迂回経路情報などのコネクテッドカー41,42,43およびIoTデバイス44への送信を行ってもよい。当該所定のサービスを提供する処理は、情報処理装置100により実行されてもよい。
【0035】
第2の実施の形態の情報処理システムでは、コネクテッドカー41,42,43およびIoTデバイス44それぞれの管理単位はオブジェクトと言われる。例えば、コネクテッドカー41,42,43それぞれに対応するオブジェクトは車両オブジェクトと言われてもよい。また、IoTデバイス44が人物に関する情報を取得する場合、IoTデバイス44は、ヒトオブジェクトと言われてもよい。オブジェクトは、実世界におけるヒトやデバイスなどを、情報処理システムに写像した情報である。情報処理システムに写像されたオブジェクトは、実世界のヒトやデバイスなどのデジタルツインであると言われることがある。
【0036】
オブジェクトの状態を表すデータは、ステートと言われる。例えば、車両のステートには、速度、位置、車種、ワイパーが動いているか否かなどの情報がある。ステートのデータは、センサなどによって当該データが取得された時刻情報、すなわち、タイムスタンプに紐付けられる。情報処理装置100におけるユーザロジックの処理では、時系列に存在するステートのデータ群から、一定時間幅が指定されてアクセスされることが多い。
【0037】
このとき、ユーザロジックやステートごとに読み出し時に要求される時間幅は異なる。また、ユーザロジックがステートへアクセスする時間幅は、動的に変わり、未知である。読み出しアクセス時の時間幅に比べて、KVSの1つのエントリ当たりの時間幅が小さいと、読み出し回数が増える。例えば、1つのエントリの時間幅を事前に決められた1分に固定とすると、例えば10分間のデータを読み出す読み出し要求に対して、少なくとも10個のエントリの読み出し、すなわち、少なくとも10回のエントリの読み出しが発生する。同様に、30分間のデータを読み出す読み出し要求に対して、少なくとも30個のエントリの読み出し、すなわち、少なくとも30回のエントリの読み出しが発生することになる。
【0038】
このように、KVSに時系列のデータを格納する際に、例えば、事前に定めた時間幅またはデジタルツイン全体で統一した時間幅を使用すると、読み出しのアクセスの回数が増え、処理の実行時間が長くなる可能性がある。一方、KVSからはエントリ単位で読み出しが行われる。このため、KVSの1つのエントリの時間幅を、予め非常に長く設けると、読み出し要求の時間幅が比較的短い場合でも読み出しの際に当該エントリの中の余分なデータも一緒に読み出すことになり、読み出し要求の時間幅に比べて読み出しコストが上がる。
【0039】
そこで、情報処理装置100は、KVSからの読み出しを効率的に行えるように、KVSにおける1つのエントリの時間幅を制御する機能を提供する。
図3は、情報処理装置のハードウェア例を示す図である。
【0040】
情報処理装置100は、CPU101、RAM102、HDD103、GPU(Graphics Processing Unit)104、入力インタフェース105、媒体リーダ106およびNIC(Network Interface Card)107を有する。なお、CPU101は、第1の実施の形態の処理部12の一例である。RAM102またはHDD103は、第1の実施の形態の記憶部11の一例である。
【0041】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、情報処理装置100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0042】
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0043】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0044】
GPU104は、CPU101からの命令に従って、情報処理装置100に接続されたディスプレイ21に画像を出力する。ディスプレイ21としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0045】
入力インタフェース105は、情報処理装置100に接続された入力デバイス22から入力信号を取得し、CPU101に出力する。入力デバイス22としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置100に、複数の種類の入力デバイスが接続されていてもよい。
【0046】
媒体リーダ106は、記録媒体23に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体23として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0047】
媒体リーダ106は、例えば、記録媒体23から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体23は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体23やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0048】
NIC107は、ネットワーク20に接続され、ネットワーク20を介して他のコンピュータと通信を行うインタフェースである。NIC107は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。NIC107は、無線通信インタフェースでもよい。
【0049】
なお、メッセージキューサーバ200,300も、情報処理装置100と同様のハードウェアにより実現される。また、コネクテッドカー41,42,43およびIoTデバイス44は、CPU、RAM、SSD、無線通信インタフェースおよびセンサを含むハードウェアにより実現される。
【0050】
図4は、情報処理装置の機能例を示す図である。
情報処理装置100は、KVS110、制御情報記憶部120およびイベント処理部130を有する。KVS110および制御情報記憶部120には、RAM102やHDD103の記憶領域が用いられる。イベント処理部130は、RAM102に記憶されたプログラムがCPU101により実行されることで実現される。
【0051】
KVS110は、キーと値とを保持するストレージである。キーは時刻範囲を含む。値は、当該時刻範囲に属する各時刻におけるセンサの計測値を含む。
制御情報記憶部120は、イベント処理部130の処理に用いられる制御情報を記憶する。
【0052】
イベント処理部130は、メッセージキューサーバ200から受信したイベントデータに対するストリーム処理を実行する。イベント処理部130は、データ受信部131、ユーザロジック管理部132、ユーザロジック133,134,135、データ送信部136、Read制御部140およびWrite制御部150を有する。
【0053】
データ受信部131は、メッセージキューサーバ200からイベントデータを受信する。
ユーザロジック管理部132は、ユーザロジック133,134,135の一覧を保持し、データ受信部131で受信したイベントデータを基に、実行すべきユーザロジックを実行する。
【0054】
ユーザロジック133,134,135は、データ受信部131で受信したイベントデータを取得し、KVS110に格納されているデータを、Read制御部140を介して読み出す。ユーザロジック133,134,135は、これらのデータに基づいてユーザロジック133,134,135に係る処理を実行する。また、ユーザロジック133,134,135は、処理結果のデータを、Write制御部150を介してKVS110に書き込む。イベント処理部130は、ユーザロジック133,134,135以外のユーザロジックを有してもよい。
【0055】
データ送信部136は、イベント処理部130での処理結果のデータを、例えば、メッセージキューサーバ300などの外部の装置に送信する。
Read制御部140は、KVS110に対するデータの読み出しを制御する。Read制御部140は、KVS読み出し部141およびアクセスパターン取得部142を有する。
【0056】
KVS読み出し部141は、KVS110にアクセスし、KVSからのデータの読み出しを実行する。例えば、KVS読み出し部141は、ユーザロジック133,134,135の読み出し要求に含まれる時刻範囲に対応するキーをもつエントリをKVS110から読み出し、ユーザロジック133,134,135に応答する。
【0057】
アクセスパターン取得部142は、KVS読み出し部141によるKVS110からのデータの読み出しに基づいて、読み出し要求に応じたKVS110への読み出しのアクセス、すなわち、読み出しアクセスのパターンを取得する。読み出しアクセスのパターンを、単にアクセスパターンと言う。アクセスパターン取得部142は、取得したアクセスパターンの情報を、制御情報記憶部120に格納する。
【0058】
Write制御部150は、KVS110に対するデータの書き込みを制御する。Write制御部150は、エントリ作成判定部151、エントリ作成部152およびKVS書き込み部153を有する。
【0059】
エントリ作成判定部151は、制御情報記憶部120に記憶されたアクセスパターンの情報に基づいて、KVS110における1つのエントリに対応付ける時間幅を決定する。
エントリ作成部152は、任意のキーを指定し、KVS110のエントリを作成する。例えば、エントリ作成部152は、エントリ作成判定部151により決定された時間幅に対応する時刻範囲をキーに指定し、KVS110のエントリを作成する。
【0060】
KVS書き込み部153は、KVS110にアクセスし、エントリ作成部152により作成されたエントリをKVS110に書き込む。
なお、情報処理装置100は、イベント処理部130を含む複数のイベント処理部を有してもよい。例えば、上流のイベント処理部による処理結果のデータが、下流のイベント処理部に入力されて、下流のイベント処理部の処理が実行されてもよい。その場合、例えば、上流のイベント処理部のデータ送信部は、下流のイベント処理部に処理結果のデータを送信してもよい。また、下流のイベント処理部のデータ受信は、上流のイベント処理部から処理結果のデータを受信してもよい。
【0061】
図5は、ユーザロジックのステートアクセスの例を示す図である。
テーブル51は、ユーザロジック133,134,135によるステートアクセスの例を示す。ここで、一例として、ユーザロジック133,134,135によりアクセスされるステートは、速度であるとする。なお、情報処理装置100は、テーブル51に相当する情報を有していなくてよい。
【0062】
テーブル51には、ユーザロジックの名称およびユーザロジックの内容の項目が記載されている。ユーザロジック133の名称は、ユーザロジック「a」である。ユーザロジック134の名称は、ユーザロジック「b」である。ユーザロジック135の名称は、ユーザロジック「c」である。
【0063】
例えば、ユーザロジック133、すなわち、ユーザロジック「a」の内容は、現在時刻の速度を取得することである。ユーザロジック134、すなわち、ユーザロジック「b」の内容は、直近3分間の速度を取得することである。ユーザロジック135、すなわち、ユーザロジック「c」の内容は、12:30:00以降、30分に1度、直近30分間の速度を取得することである。
【0064】
図6は、時間幅閾値テーブルの例を示す図である。
時間幅閾値テーブル121は、KVS110の1つのエントリに対応付ける時間幅の最大値および最小値を保持する情報である。時間幅閾値テーブル121は、制御情報記憶部120に予め格納される。時間幅閾値テーブル121は、種別および時間幅の項目を含む。
【0065】
例えば、時間幅閾値テーブル121は、種別「最大値」の時間幅が「60分」であることを示す。これは、KVS110へのアクセス状況によらず、1つのエントリに格納するデータでは、最大でも60分間分の時系列データであることを示す。
【0066】
また、時間幅閾値テーブル121は、種別「最小値」の時間幅が「3分」であることを示す。これは、KVS110へのアクセス状況によらず、最小でも3分間分の時系列データを同一のエントリに格納することを示す。
【0067】
図7は、イベントデータの例を示す図である。
イベントデータ群52は、情報処理装置100に到着する複数のイベントデータを表形式で記述したものである。1つのイベントデータは、時刻情報とステート項目および値とを有する。時刻情報は、センサなどによってイベントデータが生成された時刻を示すタイムスタンプである。ステート項目および値は、ステートの識別子と当該ステートに対応する値との組である。1つのイベントデータには、ステート項目と値との複数の組が含まれ得る。
【0068】
例えば、時刻情報「12:00:00」のイベントデータは、ステート項目および値として「{速度:51,位置:(lon0,lat0),…}」を有する。ここで、速度は、例えばkm/h(キロメートル毎時)などの単位で表される。また、位置は、例えば(経度,緯度)の座標で表される。また、図示を省略しているが、各イベントデータは、送信元のデバイスに対応するオブジェクト名を有する。
【0069】
図8は、アクセス幅最大値情報の例を示す図である。
アクセス幅最大値情報122は、アクセスパターン取得部142により生成されるアクセスパターンの情報の一例である。アクセス幅最大値情報122は、アクセスパターン取得部142により作成され、制御情報記憶部120に格納される。アクセス幅最大値情報122は、オブジェクトおよびステートごとに作成される。一例として、アクセス幅最大値情報122は、あるオブジェクトのステート「速度」に対するKVS110からの読み出しのアクセス幅最大値を保持する。アクセス幅最大値は、読み出し要求によりアクセス対象となった時間幅(アクセス時間幅)の最大値である。
【0070】
アクセス幅最大値情報122は、該当のオブジェクトの該当のステートに対応する新たなエントリがKVS110に書き込まれると初期値にリセットされる。アクセス幅最大値の初期値は、時間幅閾値テーブル121に設定された最小値「3分」である。
【0071】
例えば、アクセスパターン取得部142は、ユーザロジック「a」~「c」による、KVS110における該当のオブジェクトのステート「速度」の読み出しアクセスを基に、次のようにアクセス幅最大値情報122を更新する。なお、初期時刻を12:00:00とする。時刻12:00:00では、アクセス幅最大値情報122は、3分(初期値)である。
【0072】
アクセス履歴情報123は、ユーザロジック「a」~「c」による初期時刻12:00:00から1秒ごとの、該当のオブジェクトのステート「速度」の読み出しアクセスの履歴を示す。アクセスパターン取得部142は、各時刻において各ユーザロジックによりアクセスされた時間幅を得ればよい。アクセス履歴情報123は、アクセスの履歴を分かり易く表すものであり、制御情報記憶部120に保存されなくてもよい。
【0073】
アクセス履歴情報123では、各ユーザロジックにより読み出し対象のステート(Readステート)名と読み出し対象の時刻との組「Readステート名-時刻」の記述により、アクセス履歴が記載される。読み出し対象の時刻は、時刻範囲のことがある。また、「Readステート名-時刻」の後の括弧内には、アクセス対象の時間幅が記載される。ここでは、読み出し対象のステートは速度である。したがって、「Readステート名」は「速度」となる。
【0074】
例えば、時刻12:00:00では、次の読み出しアクセスが発生する。1つ目は、ユーザロジック「a」の「速度-12:00:00(0)」の読み出しアクセスである。これは、速度に対する12時00分00秒(時間幅0)の読み出しアクセスを示す。2つ目は、ユーザロジック「b」の「速度-11:55:00~12:00:00(5分)」の読み出しアクセスである。これは、速度に対する11時55分00秒~12時00分00秒(時間幅5分)の読み出しアクセスを示す。なお、時刻12:00:00~12:29:59では、ユーザロジック「c」の読み出しアクセスは発生しない。アクセスなしは、図中、ハイフン記号「-」で記載される。
【0075】
また、時刻12:00:01では、次の読み出しアクセスが発生する。1つ目は、ユーザロジック「a」の「速度-12:00:01(0)」の読み出しアクセスである。2つ目は、ユーザロジック「b」の「速度-11:55:01~12:00:01(5分)」の読み出しアクセスである。
【0076】
時刻12:00:01の時点で、アクセス幅最大値情報122に保持される「3分」よりも長い「5分」の時間幅での読み出しアクセスが発生する。このため、アクセスパターン取得部142は、アクセス幅最大値情報122を、「3分」から「5分」に更新する。以後、KVS110に格納される1エントリの時間幅は5分と決定されるものとする。
【0077】
時刻12:29:59まで、KVS110に対し、ユーザロジック「a」による各時刻の速度の読み出しと、ユーザロジック「b」による各時刻の直近5分間の速度の読み出しが行われる。
【0078】
そして、時刻12:30:00の時点では、次の読み出しアクセスが発生する。1つ目は、ユーザロジック「a」の「速度-12:30:00(0)」の読み出しアクセスである。2つ目は、ユーザロジック「b」の「速度-12:25:00~12:30:00(5分)」の読み出しアクセスである。3つ目は、ユーザロジック「c」の「速度-12:00:00~12:30:00(30分)」の読み出しアクセスである。
【0079】
時刻12:30:00の時点で、アクセス幅最大値情報122に保持される「5分」よりも長い「30分」の時間幅での読み出しアクセスが発生する。このため、アクセスパターン取得部142は、アクセス幅最大値情報122を、「5分」から「30分」に更新する。
【0080】
図9は、KVSエントリの例を示す図である。
KVSエントリ群111は、KVS110に格納されるエントリの一例である。1つのエントリは、「オブジェクト名-ステート名-時刻」で記述されるキーと、該当の時刻におけるステート名に対応する計測値とを有する。キーに含まれる時刻は、時刻範囲でもよい。キーに含まれる時刻が時刻範囲の場合、値は当該時刻範囲に属する複数の時刻に対応する複数の計測値を含む。
【0081】
また、KVSエントリ群111には、最新の時刻のデータが格納されるエントリとして、キーの時刻の項目に「latest」が設定されるエントリを有する。キーの時刻の項目に「latest」が設定されるエントリは、最新エントリと言われる。例えば、情報処理装置100によるストリーム処理の開始直後の時刻12:00:00の時点では、何れのオブジェクトおよびステートに対しても、キーにおける時刻の項目が「latest」であるエントリのみがKVS110に保持される。
【0082】
例えば、KVSエントリ群111は、時刻12:00:00の処理開始直後(例えば、1~2分程度経過した時点)におけるKVS110のエントリを示す。キー「car1-speed-latest」における「car1」は、あるコネクテッドカーに対応するオブジェクト名の一例である。また、「speed」は、ステート「速度」のステート名である。更に、キー「car1-position-latest」における「position」は、ステート「位置」のステート名である。
【0083】
最新エントリにアクセス幅最大値情報122で示される特定の時間幅のデータが貯まると、エントリ作成部152は、当該データを古い時系列データとして別のエントリに移し替え、最新エントリを空とする。ただし、エントリ作成部152は、「latest」を用いずに、例えば「car1-speed-12:00:00が最新エントリである」というポインタを保持してもよい。エントリ作成部152は、最新エントリに特定の時間幅のデータが貯まったら、新たに「car1-speed-12:05:00」というエントリを作成し、「car1-speed-12:05:00が最新エントリである」とポインタを更新してもよい。
【0084】
図8のアクセス幅最大値情報122に対して、KVS110には次のようにエントリが作成される。
図10は、KVSエントリの作成例を示す図である。
【0085】
エントリ作成判定部151は、最新エントリへの格納を開始してからアクセス幅最大値情報122の時間幅だけ経過したことを検出する。すると、エントリ作成部152は、その時点の最新エントリの中身を、別途エントリを作成し、KVS書き込み部153を介してKVS110に保存する。その後、エントリ作成部152は、KVS書き込み部153を介して、KVS110における最新エントリの中身を初期化する。その後のデータは初期化された最新エントリへ格納される。なお、このとき、エントリ作成判定部151は、アクセス幅最大値情報122も併せて初期化する。
【0086】
ここで、KVSエントリ群112は、12:05:00時点のエントリ作成直前におけるKVS110の各エントリを示す。また、KVSエントリ群113は、12:05:00時点のエントリ作成直後におけるKVS110の各エントリを示す。
【0087】
例えば、エントリ作成判定部151は、12時05分00秒の時点で、アクセス幅最大値情報122が「5分」を示すことを検出する。そして、エントリ作成判定部151は、最新エントリには12:00:00~12:04:59の5分間分の時系列データが格納されているので、これ以上は同一エントリには格納しないと判断する。すると、エントリ作成部152は、エントリ作成判定部151の判断に応じて、最新エントリであるキー「car1-speed-latest」の値をキー「car1-speed-12:00:00~12:05:00」のエントリにコピーする。また、エントリ作成部152は、「car1-speed-latest」の値を空にする。更に、12:05:00以降から再度アクセス状況を収集するため、エントリ作成判定部151は、アクセス幅最大値情報122を初期化する。
【0088】
図11は、KVSエントリの作成例を示す図である。
12:00:00から12:25:00までは、ユーザロジックによる読み出しアクセスの時間幅の最大値「5分」ごとにKVS110のエントリが作成されたとする。一方、12:30:00時点では、30分幅の読み出しアクセスが実行される。このため、アクセスパターン取得部142は、
図8で例示したように、アクセス幅最大値情報122を「30分」に更新する。
【0089】
ここで、KVSエントリ群114は、12:30:00時点のKVS110の各エントリを示す。また、KVSエントリ群115は、12:55:00時点のKVS110の各エントリを示す。
【0090】
エントリ作成判定部151は、12:30:00時点では、最新エントリへの格納を始めて5分が経過しているが、引き続き、最新エントリに30分間のデータが格納されるまで待機する。そして、エントリ作成判定部151は、12:55:00時点で、最新エントリへの格納を始めて30分が経過したこと検出し、エントリ作成部152に時間幅30分のエントリの作成を指示する。
【0091】
すると、エントリ作成部152は、KVS書き込み部153を介して、最新エントリの値を時間幅30分の別エントリへと格納し、最新エントリを初期化する。また、エントリ作成判定部151は、アクセス幅最大値情報122を初期化する。
【0092】
次に、第2の実施の形態の情報処理装置100の処理手順を説明する。
図12は、ストリーム処理の例を示すフローチャートである。
(S10)イベント処理部130は、イベントデータの受信のたびに、ステップS11のデータ受信時サブプロセスを呼び出す。
【0093】
(S11)イベント処理部130は、データ受信時サブプロセスを実行する。データ受信時サブプロセスの詳細は後述される。
(S12)イベント処理部130は、受信したイベントデータに応じたストリーム処理が終了するまで、ステップS11を繰り返す。例えば、イベントデータが複数のステートを含む場合、ステートごとのストリーム処理が実行され得る。そして、ストリーム処理が終了する。
【0094】
図13は、データ受信時サブプロセスの例を示すフローチャートである。
データ受信時サブプロセスは、ステップS11に相当する。
(S20)ユーザロジック管理部132は、データ受信部131で受信したイベントデータに基づいて、当該イベントデータに対応する全てのユーザロジックを呼び出す。
【0095】
(S21)呼び出された全ユーザロジックは、ステップS22を繰り返し実行する。
(S22)ユーザロジックは、受信したイベントデータやKVS110から読み出したデータに基づく処理を実行する。ユーザロジックの処理の詳細は後述される。
【0096】
(S23)全てのユーザロジックの処理が終了すると、ステップS24に処理が進む。
(S24)Read制御部140は、アクセスパターン取得サブプロセスを実行する。アクセスパターン取得サブプロセスの詳細は後述される。
【0097】
(S25)Write制御部150は、KVS110への書き込み対象ステートのデータを取得する。
(S26)Write制御部150は、全ての書き込み対象ステートに対してステップS27を繰り返し実行する。
【0098】
(S27)Write制御部150は、ステート書き込みサブプロセスを実行する。書き込み対象サブプロセスの詳細は後述される。
(S28)Write制御部150は、全ての書き込み対象ステートに対してステート書き込みサブプロセスを実行すると、データ受信時サブプロセスを終了する。
【0099】
図14は、ユーザロジックの処理例を示すフローチャートである。
ユーザロジックの処理は、ステップS22に相当する。以下では、あるユーザロジックの処理例を例示するが、ユーザロジック133,134,135などの他のユーザロジックも、当該他のユーザロジックに応じた処理となる。
【0100】
(S30)ユーザロジックは、受信データを取得する。受信データは、データ受信部131が受信したイベントデータに相当する。
(S31)ユーザロジックは、受信データに含まれる経緯度の情報から、当該イベントデータの送信元のコネクテッドカーが走行中の道路を特定する。
【0101】
(S32)ユーザロジックは、過去1分間の速度、加速度のデータを、Read制御部140を介してKVS110から読み出す。
(S33)ユーザロジックは、過去1分間の速度、加速度の変化に基づいて、該当のコネクテッドカーにおいてふらつきが発生したか否かを判定する。ふらつきが発生した場合、ステップS34に処理が進む。ふらつきが発生していない場合、ステップS36に処理が進む。
【0102】
(S34)ユーザロジックは、過去30分間のふらつきの有無のデータを、Read制御部140を介してKVS110から読み出す。
(S35)ユーザロジックは、過去30分間のふらつき有りの個数に基づいて、ふらつきが一定回数以上であれば、データ送信部136を介して、コネクテッドカーに警告を通知する。
【0103】
(S36)ユーザロジックは、受信データおよびステップS33で算出したふらつき発生有無の判定結果を全てKVS110への書き込み対象とする。そして、ユーザロジックの処理が終了する。
【0104】
図15は、アクセスパターン取得サブプロセスの例を示すフローチャートである。
アクセスパターン取得サブプロセスは、ステップS24に相当する。
(S40)アクセスパターン取得部142は、直前に実行されたユーザロジックがKVS110へ読み出しアクセスした際の時間幅(アクセス時間幅)を取得する。当該アクセス時間幅は、ステートごとに取得される。
【0105】
(S41)アクセスパターン取得部142は、アクセス時間幅の最大値を取得する。アクセス時間幅の最大値は、ステートごとに取得される。
(S42)アクセスパターン取得部142は、現時点までのアクセス時間幅の最大値を保存する。現時点までのアクセス時間幅の最大値は、該当のオブジェクトおよびステートごとのアクセス幅最大値情報122に保存される。例えば、該当のオブジェクトに対して、速度、位置、ふらつき発生有無のステートがある場合、アクセス幅最大値情報122も、該当のオブジェクトの速度、位置、ふらつき発生有無それぞれに対して制御情報記憶部120に保持される。そして、アクセスパターン取得サブプロセスが終了する。
【0106】
図16は、ステート書き込みサブプロセスの例を示すフローチャートである。
ステート書き込みサブプロセスは、ステップS27に相当する。
(S50)Write制御部150は、エントリ作成判定サブプロセスを実行する。エントリ作成判定サブプロセスの詳細は後述される。
【0107】
(S51)Write制御部150は、KVS110の最新エントリにステートを書き込む。ここでいうステートのデータは、例えば
図14のユーザロジックの処理の場合、ステップS36で書き込み対象とされた各ステートの最新のデータである。また、当該最新エントリは、KVS110における該当のコネクテッドカーのオブジェクト名およびステート名に対応する最新エントリである。例えば、ふらつき発生有無に対応するステートの最新エントリに対しては、ふらつき発生有無の判定結果と現在時刻とを含む値を登録する。そして、ステート書き込みサブプロセスが終了する。
【0108】
図17は、エントリ作成判定サブプロセスの例を示すフローチャートである。
エントリ作成判定サブプロセスは、ステップS50に相当する。
(S60)エントリ作成判定部151は、今回のイベントデータに対応するオブジェクトおよびステートに対応する、KVS110の最新エントリの開始時刻を取得する。
【0109】
(S61)エントリ作成判定部151は、該当のオブジェクトおよびステートに対応するアクセス幅最大値情報122に基づいて、アクセス時間幅の最大値を取得する。
(S62)エントリ作成判定部151は、該当のオブジェクトおよびステートに対応する最新エントリの開始時刻からアクセス時間幅の最大値以上の時間が経過したか否かを判定する。経過した場合、ステップS63に処理が進む。経過していない場合、エントリ作成判定サブプロセスが終了する。
【0110】
(S63)エントリ作成部152は、「データ名-エントリ開始時刻~終端時刻」というキーで新たにKVS110のエントリを作成し該当のオブジェクトおよびステートに対応する現在の最新エントリの値を、新たに作成したエントリに格納する。ここで、キーの「データ名」は「オブジェクト名-ステート名」に相当する。エントリ作成部152は、新たに作成したエントリを、KVS書き込み部153を介してKVS110に書き込む。
【0111】
(S64)エントリ作成部152は、KVS書き込み部153を介して、該当のオブジェクトおよびステートに対応する現在の最新エントリを初期化する。
(S65)エントリ作成判定部151は、該当のオブジェクトおよびステートに対応するアクセス幅最大値情報122におけるアクセス時間幅の最大値を削除し、初期化する。そして、エントリ作成判定サブプロセスが終了する。
【0112】
このように、情報処理装置100は、KVS110に対する読み出しのアクセス時間幅のうち、最長のアクセス時間幅をKVS110の1つのエントリに対応付ける時間幅に決定する。
【0113】
図18は、エントリの時間幅の決定例を示す図である。
エントリ作成判定部151は、オブジェクト名「car1」の車両オブジェクト60のステート「速度」に対するエントリの時間幅を、アクセス統計に基づいて例えば次のように決定する。なお、図中、エントリに対応する時間幅が分かり易いように、KVS110には「キー」と「値」の間に「時間幅」の項目が記載されることがあるが、KVS110は「時間幅」の項目を有さなくてよい。
【0114】
12時25分までのアクセス統計ではKVS110に対する最長のアクセス時間幅が5分であったため、エントリ作成判定部151は、KVS110の1つのエントリの時間幅を5分に決定する。このため、エントリ作成部152は、12時25分までは5分間隔のエントリを作成し、KVS書き込み部153を介して、KVS110に格納する。
【0115】
一方、12時30分以降のアクセス統計では、最長のアクセス時間幅が30分に変わったとする。すると、エントリ作成判定部151は、KVS110の1つのエントリの時間幅を30分に決定する。このため、エントリ作成部152は、12時30分以降では30分間隔のエントリを作成し、KVS書き込み部153を介して、KVS110に格納する。
【0116】
このように、情報処理装置100は、車両オブジェクト60のステートごとにユーザロジックのアクセス統計を取得し、アクセス統計から1つのエントリに格納する時間幅を動的に決定する。
【0117】
これにより、情報処理装置100は、読み出し回数を削減できる。例えば、時間幅30分の読み出し要求が発生した後は、その後も時間幅30分の読み出し要求が継続的に発生する可能性が高い。そこで、情報処理装置100は、1つのエントリの時間幅を、要求された最長の時間幅とすることで、今後、当該最長の時間幅での読み出し要求を受け付けた場合でも、KVS110から比較的少ない読み出し回数で要求されたエントリを読み出せる。このため、情報処理装置100は、KVS110からのエントリの読み出しの高速化を図れる。
【0118】
[第3の実施の形態]
次に、第3の実施の形態を説明する。前述の第2の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【0119】
第3の実施の形態では、情報処理装置100は、アクセスパターンテーブルに基づいて、KVS110の1つのエントリに対応付ける時間幅を決定する。
図19は、第3の実施の形態のアクセスパターンテーブルの例を示す図である。
【0120】
アクセスパターンテーブル124は、KVS110の1つのエントリに対して予め指定された時間幅の候補を示す情報である。アクセスパターンテーブル124は、制御情報記憶部120に予め格納される。アクセスパターンテーブル124は、アクセスパターン名、エントリ幅、アクセス時間幅wの条件の項目を含む。
【0121】
アクセスパターン名の項目には、アクセスパターンの名称であるアクセスパターン名が登録される。エントリ時間幅の項目には、KVS110の1つのエントリに対応付ける時間幅が登録される。アクセス時間幅wの条件の項目には、該当のアクセスパターン名に相当するアクセスパターンの条件が登録される。
【0122】
例えば、アクセスパターンテーブル124は、アクセスパターン名「A」、エントリ時間幅「1分」、アクセス時間幅wの条件「w<1分」のレコードを有する。このレコードは、アクセスパターン名「A」のアクセスパターンのアクセス時間幅wが1分未満の場合に相当し、その場合、KVS110の1つのエントリの時間幅を1分とすることを示す。
【0123】
また、アクセスパターンテーブル124は、アクセスパターン名「B」、エントリ時間幅「5分」、アクセス時間幅wの条件「1分≦w<5分」のレコードを有する。このレコードは、アクセスパターン名「B」のアクセスパターンはアクセス時間幅wが1分以上かつ5分未満の場合に相当し、その場合、KVS110の1つのエントリの時間幅を5分とすることを示す。
【0124】
また、アクセスパターンテーブル124は、アクセスパターン名「C」、エントリ時間幅「15分」、アクセス時間幅wの条件「5分≦w<15分」のレコードを有する。このレコードは、アクセスパターン名「C」のアクセスパターンはアクセス時間幅wが5分以上かつ15分未満の場合に相当し、その場合、KVS110の1つのエントリの時間幅を15分とすることを示す。
【0125】
また、アクセスパターンテーブル124は、アクセスパターン名「D」、エントリ時間幅「30分」、アクセス時間幅wの条件「15分≦w」のレコードを有する。このレコードは、アクセスパターン名「D」のアクセスパターンはアクセス時間幅wが15分以上の場合に相当し、その場合、KVS110の1つのエントリの時間幅を30分とすることを示す。
【0126】
なお、アクセスパターンテーブル124によれば、エントリ時間幅の最小値は「1分」であり、最大値は「30分」である。第3の実施の形態では、制御情報記憶部120は、時間幅閾値テーブル121を保持しない。
【0127】
このように、第3の実施の形態では、1つのエントリに対応付けられる時間幅として、数パターンの時間幅の候補が予め定められる。KVS110の1エントリに格納される時間幅は、この数パターンの中から選択される。選択方法には、次の第1の方法および第2の方法がある。
【0128】
第1の方法は、最近のユーザロジックによる読み出しアクセスの時間幅を、アクセスパターンテーブル124の分類に従ってアクセスパターンごとに集計し、最も長いアクセスパターンに対応する時間幅を、1つのエントリの時間幅とする方法である。
【0129】
第2の方法は、集計したアクセスパターンのうち、発生回数が一定割合未満のものを選択候補から除外し、発生回数が一定割合以上のものの中で最も長いアクセスパターンに対応する時間幅を、1つのエントリの時間幅とする方法である。
【0130】
第2の方法を用いることで、第1の方法に比べて、時間幅の比較的短い読み出しアクセスに対して、当該時間幅よりも長い余計な情報がKVS110から読み出される頻度を低減できる。
【0131】
図20は、アクセスパターンに応じたKVSのエントリの例を示す図である。
KVSエントリ群116は、オブジェクト名「car1」、ステート名「speed」に対するKVS110のエントリの一例である。アクセスパターンテーブル124には、時間幅の規定値として、1分、5分、15分、30分が予め定められる。このため、KVSエントリ群116の各エントリに対応付けられる時間は、1分、5分、15分、30分の何れかとなる。
【0132】
図21は、ユーザロジックのステートアクセスの例を示す図である。
テーブル53は、情報処理装置100が実行する4つのユーザロジックによるステートアクセスの例を示す。アクセスされるステートは、速度であるとする。ただし、第3の実施の形態の例では、KVS110のステート「速度」に対応する値には、位置の情報も含まれるものとする。なお、情報処理装置100は、テーブル53に相当する情報を有していなくてよい。
【0133】
テーブル53には、ユーザロジックの名称およびユーザロジックの内容の項目が記載されている。各項目の説明は、テーブル51と同じである。
例えば、ユーザロジック「a」の内容は、現在時刻の速度を取得することである。ユーザロジック「b」の内容は、直近3分間の速度を取得することである。ユーザロジック「c1」の内容は、位置が更新された場合に、直近15分間の速度と位置とを取得することである。ユーザロジック「d」の内容は、1時間に1度、直近60分間の速度を取得することである。
【0134】
図22は、アクセス履歴情報の例を示す図である。
アクセス履歴情報123aは、ユーザロジック「a」、「b」、「c1」、「d」による初期時刻12:00:00から1秒ごとの、該当のオブジェクトのステート「速度」の読み出しアクセスの履歴を示す。アクセスパターン取得部142は、各時刻において各ユーザロジックによりアクセスされた時間幅を得ればよい。このため、アクセス履歴情報123aは、アクセスの履歴を分かり易く表すものであり、制御情報記憶部120に保存されなくてもよい。
【0135】
アクセス履歴情報123aの各項目の説明は、アクセス履歴情報123と同じである。ただし、アクセス履歴情報123aは、対象のユーザロジックとして、「c1」および「d」を含む。
【0136】
例えば、時刻12:00:00では、次の読み出しアクセスが発生する。1つ目は、ユーザロジック「a」の「速度-12:00:00(0)」の読み出しアクセスである。2つ目は、ユーザロジック「b」の「速度-11:57:00~12:00:00(3分)」の読み出しアクセスである。3つ目は、ユーザロジック「c1」の「速度-11:50:00~12:00:00(10分)」および「位置-11:50:00~12:00:00(10分)」の読み出しアクセスである。4つ目は、ユーザロジック「d」の「速度-11:00:00~12:00:00(60分)」の読み出しアクセスである。
【0137】
また、時刻12:00:01では、次の読み出しアクセスが発生する。1つ目は、ユーザロジック「a」の「速度-12:00:01(0)」の読み出しアクセスである。2つ目は、ユーザロジック「b」の「速度-11:57:01~12:00:01(3分)」の読み出しアクセスである。3つ目は、ユーザロジック「c1」の「速度-11:50:01~12:00:01(10分)」および「位置-11:50:01~12:00:01(10分)」の読み出しアクセスである。なお、時刻12:00:01~12:59:59では、ユーザロジック「d」の読み出しアクセスは発生しない。
【0138】
図23は、KVSエントリの例を示す図である。
KVSエントリ117は、オブジェクト名「car1」、ステート名「speed」に対する最新エントリの一例である。KVSエントリ117は、時刻12:00:00の処理開始直後(例えば、1~2分程度経過した時点)におけるKVS110の最新エントリを示す。1つのエントリの時間幅は最短で1分である。KVSエントリ117の例では、最新エントリの開始時刻(「12:00:00」)から1分以内に、1分以上の時間幅の読み出しアクセスが発生したため、1つのエントリの時間幅は未定である。図中、未定であることは「??」と表記されている。
【0139】
図24は、アクセスパターンの集計例を示す図である。
第3の実施の形態では、情報処理装置100は、アクセス幅最大値情報122に代えて、パターン集計テーブル125およびパターン発生割合テーブル126を有する。パターン集計テーブル125およびパターン発生割合テーブル126は、それぞれアクセスパターン取得部142およびエントリ作成判定部151により生成され、制御情報記憶部120に格納される。
【0140】
パターン集計テーブル125は、あるオブジェクトのあるステートに対し、各時刻において発生した読み出しアクセスのアクセスパターンの集計結果が記録される。パターン発生割合テーブル126は、エントリ作成判定部151により最新エントリの開始時刻から現在時刻までの各アクセスパターンの発生割合が登録される。ここで、発生割合は、パターン集計テーブル125の総レコード数に対して、該当のアクセスパターンが発生した割合である。
【0141】
例えば、パターン集計テーブル125は、該当のオブジェクトの速度のステートに対するアクセスパターンの集計結果を示すものとする。読み出しリクエストに対するアクセスパターンの特定は、アクセスパターンテーブル124におけるアクセス時間幅wの条件に基づいて行われる。一例として、パターン集計テーブル125には、12:00:00から1秒ごとの速度に対するアクセスパターンの集計結果が記録されている。
【0142】
例えば、パターン集計テーブル125は、時刻「12:00:00」、速度に対するアクセスパターンの集計結果「速度:{A:1,B:1,C:1,D:1}」のレコードを有する。このレコードは、時刻12:00:00では、アクセスパターン「A」が1回、「B」が1回、「C」が1回、「D」が1回発生したことを示す。パターン集計テーブル125には、同様に、時刻「12:00:00」~「12:01:00」のレコードが記録されている。なお、ある時刻において、該当のアクセスパターンでの読み出しアクセスが観測されなかった場合、アクセスパターンの発生回数は0回となるが、パターン集計テーブル125では、0回の記録が省略されている。
【0143】
パターン発生割合テーブル126は、時刻12:01:00の時点の各アクセスパターンの発生回数と発生割合とを示す。例えば、アクセスパターン「A」の発生回数は61、発生割合は61/61*100=100%である。アクセスパターン「B」の発生回数は61、発生割合は61/61*100=100%である。アクセスパターン「C」の発生回数は31、発生割合は31/61*100=50%である。アクセスパターン「D」の発生回数は「2」、発生割合は2/61*100=3%である。
【0144】
12:01:00の時点でのパターン発生割合テーブル126によれば、1分幅のアクセスパターン「A」の他に、5分、15分幅のアクセスパターン「B」、「C」なども発生していることが分かる。そこで、Write制御部150は、12:01:00以降のデータも12:00:00からの最新エントリに格納すると決定する。
【0145】
このため、Write制御部150は、12:01:00時点では、エントリを新たに作らずに、12:00:00の最新エントリに引き続きデータを格納する。エントリの時間幅の候補は、アクセスパターン「A」の1分の次がアクセスパターン「B」の5分である。したがって、Write制御部150は、12:00:00~12:04:59のデータをそのまま最新エントリに格納することになる。すなわち、Write制御部150は、12:05:00のデータが到着するまで通常通り処理を行い、12:05:00のデータが到着したら、12:05:00以降のデータも最新エントリに格納していくか否かを判定する。
【0146】
図25は、KVSエントリの作成例を示す図である。
アクセスパターン取得部142は、12:05:00の時点におけるパターン発生割合テーブル126aを作成する。Write制御部150は、12:01:00での判定と同様に、15分幅のアクセスパターン「C」などが発生しているため、12:05:00ではエントリを新たに作らずに、引き続き12:00:00開始の最新エントリにデータを格納することとする。Write制御部150は、最新エントリの開始時刻から次のアクセスパターン「C」の時間幅15分が経過した時に再度判定を行う。
【0147】
アクセスパターン取得部142は、12:15:00の時点におけるパターン発生割合テーブル126bを作成する。Write制御部150は、パターン発生割合テーブル126bに基づき、アクセスパターン「D」が最も長いアクセス時間幅であるため、KVS110の1つのエントリに対応付ける時間幅を、アクセスパターン「D」に対応する30分と決定する。
【0148】
その後、Write制御部150は、最新エントリへのデータ書き込みを12:29:59まで行う。例えば、Write制御部150は、12:29:59のデータが処理された後、12:00:00~12:29:59のデータを格納するエントリを作成して、最新エントリの中身を、新たに作成したエントリにコピーし、最新エントリを初期化する。12:00:00~12:29:59のデータを格納するエントリのキーは、「car1-speed-12:00:00~12:30:00」である。Write制御部150は、以降のデータを最新エントリへ格納する。KVSエントリ群118は、この時点でKVS110に格納されるエントリの例を示す。また、Write制御部150は、この時点でのパターン集計テーブルやパターン発生テーブルも初期化する(レコードを全て削除する)。
【0149】
なお、
図25のエントリの作成例は、
図19で説明した第1の方法に基づくものである。一方、Write制御部150は、第2の方法に基づいてエントリを作成してもよい。例えば、発生割合30%未満のアクセスパターンを選択候補から除外する場合、12:15:00において、アクセスパターン「D」は選択候補から除外され、アクセスパターン「A」~「C」が選択候補となる。この場合、Write制御部150は、アクセスパターン「C」のエントリ時間幅を採用する。すなわち、Write制御部150は、12:15:00の時点で、12:00:00~12:15:00のエントリを作成し、最新エントリの中身をコピーし、最新エントリを初期化することになる。
【0150】
次に、第3の実施の形態の情報処理装置100の処理手順を説明する。第3の実施の形態では、アクセスパターン取得サブプロセスおよびエントリ作成判定サブプロセスの手順が第2の実施の形態と異なる。それ以外の手順は第2の実施の形態と同じであるため、説明を省略する。
【0151】
図26は、アクセスパターン取得サブプロセスの例を示すフローチャートである。
アクセスパターン取得サブプロセスは、ステップS24に相当する。
(S70)アクセスパターン取得部142は、直前に実行されたユーザロジックがKVS110へ読み出しアクセスした際の時間幅(アクセス時間幅)を取得する。当該アクセス時間幅は、受信したイベントデータに対応するオブジェクトのステートごとに取得される。
【0152】
(S71)アクセスパターン取得部142は、アクセスパターンテーブル124に基づいて、アクセス時間幅をアクセスパターンに変換する。
(S72)アクセスパターン取得部142は、変換後のアクセスパターンをパターン集計テーブル125に記録する。そして、アクセスパターン取得サブプロセスが終了する。
【0153】
図27は、エントリ作成判定サブプロセスの例を示すフローチャートである。
エントリ作成判定サブプロセスは、ステップS50に相当する。
(S80)エントリ作成判定部151は、今回のイベントデータに対応するオブジェクトおよびステートに対応する、KVS110の最新エントリの開始時刻を取得する。
【0154】
(S81)エントリ作成判定部151は、最新エントリの開始時刻からアクセスパターン間の区切り時間だけ経過したか否かを判定する。経過した場合、ステップS82に処理が進む。経過していない場合、エントリ作成判定サブプロセスが終了する。ここで、アクセスパターンテーブル124の例では、アクセスパターン「A」、「B」の区切り時間は1分である。また、アクセスパターン「B」、「C」の区切り時間は5分である。アクセスパターン「C」、「D」の区切り時間は15分である。また、アクセスパターンテーブル124における最長のエントリ時間幅30分も1つの区切り時間である。
【0155】
(S82)エントリ作成判定部151は、パターン集計テーブル125に基づいて、最新エントリの開始以降のアクセスパターン統計、すなわち、パターン発生割合テーブル126を取得する。
【0156】
(S83)エントリ作成判定部151は、取得したアクセスパターン統計から、アクセス実行割合が一定割合以上のアクセスパターンを抽出する。すなわち、エントリ作成判定部151は、パターン発生割合テーブル126の中から、発生割合(アクセス実行割合)が一定割合以上のアクセスパターンを抽出する。なお、第1の方法を用いる場合、一定割合=0とすればよい。第2の方法を用いる場合、一定割合=30%などのように、予め決定される。また、第2の方法を用いる場合、ステップS83において、一定割合以上の発生割合をもつアクセスパターンが存在しないことも考えられる。その場合、エントリ作成判定部151は、第1の方法に基づいて、パターン発生割合テーブル126に記録されている全てのアクセスパターンを抽出してもよい。
【0157】
(S84)エントリ作成判定部151は、該当のオブジェクトおよびステートに対応する最新エントリの開始時刻から、ステップS83で抽出したアクセスパターンのうちの最長パターンの時間幅以上の時間が経過したか否かを判定する。最長パターンとは、ステップS83で抽出したアクセスパターンのうちの最長のアクセスパターンを示す。当該最長パターンの時間幅は、アクセスパターンテーブル124における、当該最長パターンに対応するエントリ時間幅である。最長パターンの時間幅以上の時間が経過した場合、ステップS85に処理が進む。最長パターンの時間幅以上の時間が経過していない場合、エントリ作成サブプロセスが終了する。
【0158】
(S85)エントリ作成部152は、「データ名-エントリ開始時刻~終端時刻」というキーで新たにKVS110のエントリを作成し該当のオブジェクトおよびステートに対応する現在の最新エントリの値を、新たに作成したエントリに格納する。ここで、キーの「データ名」は「オブジェクト名-ステート名」に相当する。エントリ作成部152は、新たに作成したエントリを、KVS書き込み部153を介してKVS110に書き込む。
【0159】
(S86)エントリ作成部152は、KVS書き込み部153を介して、該当のオブジェクトおよびステートに対応する現在の最新エントリを初期化する。
(S87)エントリ作成判定部151は、該当のオブジェクトおよびステートに対応するアクセスパターン統計を削除し、初期化する。具体的には、エントリ作成判定部151は、パターン集計テーブル125およびパターン発生割合テーブル126のレコードを全て削除し、初期化する。そして、エントリ作成判定サブプロセスが終了する。
【0160】
以上のように、情報処理装置100は、アクセスパターンテーブル124に基づいて、発生したアクセスパターンを集計し、パターン発生割合テーブル126を作成する。そして、情報処理装置100は、最も長いアクセスパターンに対応するエントリ時間幅をKVS110の1つのエントリに対応付ける時間幅とする。例えば、アクセスパターンテーブル124のアクセスパターン「A」~「C」およびアクセスパターン「D」のwの条件のうち15分≦w<30分の場合では、エントリ時間幅は、当該アクセスパターンに対応するアクセス時間幅wよりも長くなるように決定される。このように、情報処理装置100は、実際に要求されたアクセス時間幅よりも長い時間幅を、1つのエントリに対応付ける時間幅としてもよい。これにより、情報処理装置100は、KVS110からの読み出し回数を削減できる。
【0161】
また、アクセスパターン「D」で示されるように、エントリ時間幅には上限が設けられてもよい。この場合、情報処理装置100は、アクセス時間幅wが30分以上であっても、1つのエントリの時間幅が30分になるように制御できる。このため、情報処理装置100は、1つのエントリにおけるデータ量が大きくなり過ぎないように制限できる。
【0162】
また、情報処理装置100は、パターン発生割合テーブル126に基づいて、発生割合が一定割合未満であるアクセスパターンに対応するエントリ時間幅を選択候補から除外することで、不適切な時間幅が採用されることを抑制できる。例えば、少数しか発生しなかったアクセスパターンは、ランダムに発生したアクセスパターンであることがあり、今後継続して発生する可能性が高いとは言えない場合がある。こうした場合に、情報処理装置100は、ランダムに発生したアクセスパターンを基準にエントリの時間幅が決定されることを防げる。
【0163】
特に、頻度の低い長時間幅のアクセスを基準にエントリの時間幅を決定すると、比較的短い時間幅の読み出しアクセス時に、比較的長い時間幅で余分なデータを読み出すことになり、余分な読み出しコストが生じ得る。情報処理装置100は、発生割合が一定割合より低いアクセスパターンを無視することで、余分な読み出しコストが生じる可能性を低減できる。
【0164】
以下では第3の実施の形態に対する変形例を第4~第6の実施の形態として説明する。
[第4の実施の形態]
次に、第4の実施の形態を説明する。前述の第2,第3の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【0165】
図28は、第4の実施の形態のエントリの時間幅の例を示す図である。
エントリ作成判定部151は、次のようにして、アクセス時間幅に応じたアクセスパターン判定と、アクセスパターン集計とを簡略化してもよい。具体的には、エントリ作成判定部151は、アクセスパターン判定の対象とするアクセスパターンを、直近に作成したエントリの時間幅とその前後1つまでに対応するアクセスパターンまでとする。すると、4以上のアクセスパターンがある場合に、全アクセスパターンの判定および集計を行わなくてよく、高々3つのアクセスパターンのみを処理対象とすればよいので、処理の効率化が図られる。
【0166】
また、エントリの時間幅の変化において、急激に長くなったり、急激に短くなったりすることを抑えられる。例えば、エントリ作成判定部151は、長時間幅のエントリを作成した次のエントリ判定時に、短時間の統計に基づいて短時間幅のエントリを作成するような挙動を抑制できる。
【0167】
例えば、リスト54は、エントリの時間幅の候補を示す。第4の実施の形態では、アクセスパターンテーブル124における事前決定されたアクセスパターンの代わりに、エントリの時間幅の上限のみが予め定められる。また、アクセスパターンは、リスト54で示されるように、1分、2分、4分、…と、2n分単位とされる。nは0以上の整数である。
【0168】
例えば、直前に採用されたエントリの時間幅が2m分とすると、アクセスパターン取得部142は、ユーザロジックによるアクセスパターンとして、「2m分以上か」、「2m-1分より小」、「それ以外(2m分より小かつ2m-1分以上)か」を判定する。mは1以上の整数である。そして、アクセスパターン取得部142は、これら3つのアクセスパターンについて、パターン集計テーブル125を作成する。
【0169】
エントリ作成判定部151は、最新のエントリを開始してから2m-1分経過したら、パターン集計テーブル125を更に集計し、パターン発生割合テーブル126を作成する。このとき、最も発生割合の多いアクセスパターンが「2m-1分より小」であれば、エントリ作成判定部151は、1つのエントリに対応付ける時間幅を2m-1分とする。そうでなければ、エントリ作成判定部151は、2m分経過するまで待機する。
【0170】
エントリ作成判定部151は、最新のエントリを開始してから2m分経過したら、パターン集計テーブル125を再度集計し、パターン発生割合テーブル126を作成する。このとき、最も発生割合の多いアクセスパターンが「2m分より小かつ2m-1分以上」であれば、エントリ作成判定部151は、1つのエントリに対応付ける時間幅を2m分とする。そうでなければ、エントリ作成判定部151は、当該時間幅を2m+1分とする。
【0171】
以降、エントリ作成判定部151は、同様の手順を繰り返し実行する。
例えば、直近に採用したエントリの時間幅が4分であるとする。この場合、今回のエントリの時間幅の候補は、2,4,8分の何れかである。4分よりも長い時間幅の読み出しアクセスが多い場合、エントリ作成判定部151は、今回のエントリの時間幅を8分と決定する。そして、エントリ作成判定部151は、時間幅8分でエントリを作成すると、次の時間幅の候補を4,8,16分の何れかとして、アクセスパターンを集計する。
【0172】
これにより、情報処理装置100は、アクセスパターン集計の効率化を図れると共に、エントリの時間幅の変化が大きくなり過ぎない様に抑えることができる。なお、最短の時間幅および最長の時間幅は予め定められる(例えば、最短1分、最長30分など)。また、最初のエントリの時間幅は、リスト54の候補のうちの何れか1つに予め定められる(例えば、最短値の1分など)。
【0173】
[第5の実施の形態]
次に、第5の実施の形態を説明する。前述の第2~第4の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【0174】
図29は、第5の実施の形態の時刻のオフセットずれの修正例を示す図である。
エントリ作成判定部151は、一定時間ごとに、予め定められるアクセスパターンに対応するエントリ時間幅以外の時間幅でKVS110のエントリを作成するよう制御することで、読み出しのアクセスの時刻に対するエントリの時刻のオフセットを揃えてもよい。
【0175】
リスト55は、KVS110のKVSエントリ群119に対して発生した読み出しアクセスの例を示す。KVSエントリ群119の各エントリの時間幅は、11:45:00~12:45:00までは15分である。また、各読み出しアクセスで要求される時間幅は、何れも15分である。この場合、例えば、読み出しアクセスで12:10:00~12:25:00の時刻範囲が要求される。すると、Read制御部140は、KVSエントリ群119のうち、キー「car1-speed-12:00:00~12:15:00」およびキー「car1-speed-12:15:00~12:30:00」の2つ分のエントリにアクセスすることになる。
【0176】
そこで、例えば、エントリ作成判定部151は、15分幅の読み出し要求が継続して一定時間(例えば1時間)発生しており、オフセットにずれがあることを検知すると、当該オフセットずれ修正用のエントリを、KVS110に挿入する。修正用のエントリの作成は、エントリ作成部152により行われ、作成された修正用のエントリは、KVS書き込み部153によりKVS110に書き込まれる。
【0177】
上記の例では、エントリ作成判定部151は、キー「car1-speed-12:45:00~13:10:00」のエントリをKVS110に挿入する。そして、エントリ作成判定部151は、それ以降は、再び、時間幅15分でKVS110のエントリを作成するようにエントリ作成部152を制御する。こうして、エントリ作成判定部151は、読み出し要求で指定される時刻範囲と、KVS110のエントリの時刻範囲とを整合させる。
【0178】
より詳細には、Read制御部140およびWrite制御部150は、下記の一定時間ごとにオフセットの調整プロセスを実行する。まず、アクセスパターン取得部142は、各ユーザロジックにより、リスト55で示される、KVS110のエントリの時刻範囲に対してオフセットのある読み出しのアクセスが発生していることを検出する。アクセスパターン取得部142は、アクセスの時間幅が、アクセスパターンテーブル124の何れかのアクセスパターンのエントリ時間幅と一致しているかを判定する。一致している場合、その時間幅とオフセットとを保存する。一致していない場合、アクセスパターン取得部142は、当該読み出しのアクセスを無視する。例えば、アクセスパターン取得部142は、実行されたユーザロジックで過去に発生した読み出しのアクセスを保存しておき、そのアクセスタイミングとアクセス時間幅を、アクセスパターンテーブル124のエントリ時間幅と照合することで上記判定を行える。
【0179】
エントリ作成判定部151は、エントリ作成時に、エントリの時間幅と、リスト55で示されるアクセス時間幅とが一致しているか否かを判定する。一致していない場合、エントリ作成判定部151は、何もしない。一致している場合、エントリ作成判定部151は、エントリの作成時刻とオフセットとのずれ量が、アクセス時間幅の倍数と一致しているか否かを判定する。一致している場合、エントリ作成判定部151は、何もしない。一致していない場合、エントリ作成判定部151は、ずれ量を記録する。
【0180】
そして、エントリ作成判定部151は、一定時間ごとに、記録されたずれ量の分だけ、次回のエントリ作成時におけるエントリの時間幅を延長する。
これにより、情報処理装置100は、オフセットのずれによる余分なアクセスの発生を抑制することができる。上記の例では、情報処理装置100は、オフセットずれの修正前には、読み出し要求に対して2つ分のエントリにアクセスしていたが、オフセットずれの修正後には、読み出し要求に対して1つ分のエントリにアクセスするだけでよくなる。こうして、読み出しのアクセスが効率化される。
【0181】
[第6の実施の形態]
次に、第6の実施の形態を説明する。前述の第2~第5の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【0182】
図30は、第6の実施の形態のアクセスパターンの時間幅の変更例を示す図である。
エントリ作成判定部151は、アクセスパターンテーブル124で定められるアクセスパターンに対応するエントリ時間幅を、各アクセスパターンの実際のアクセス時間幅を基に調整してもよい。
【0183】
KVSエントリ群119aは、KVS110における11:45:00~15:05:00の各エントリの例を示す。エントリ作成判定部151は、KVSエントリ群119aに対して発生したアクセスパターンの集計結果であるパターン集計テーブルに基づき、パターン割合集計テーブル127を生成し、制御情報記憶部120に格納する。前述のように、パターン集計テーブルは、アクセスパターン取得部142により生成されるが、
図30では図示が省略されている。また、パターン割合集計テーブル127は、パターン発生割合テーブル126の代わりに生成される。
【0184】
パターン割合集計テーブル127は、各アクセスパターンに対して、当該アクセスパターンで一定時間内にエントリが作成された割合および、当該アクセスパターンにおいて実際に発生した最長のアクセス時間幅を保持する。
【0185】
パターン割合集計テーブル127の例では、アクセスパターン「C」でエントリが作成された割合が80%で最も多い。アクセスパターン「C」では、エントリの時間幅が15分である。一方、アクセスパターン「C」と判定された読み出しアクセスのうち、実際に発生した最長のアクセス時間幅は10分である。そこで、エントリ作成判定部151は、アクセスパターン「C」の時間幅を15分から10分に変更する。この場合、エントリ作成判定部151は、アクセスパターンテーブル124におけるアクセスパターン「C」のエントリ時間幅を、「15分」から「10分」に変更する。更に、エントリ作成判定部151は、アクセスパターンテーブル124におけるアクセスパターン「C」のアクセス時間幅wの条件を「5分≦w≦10分」とし、同アクセスパターン「D」の条件を「10分<w」とする。
【0186】
こうして、情報処理装置100は、実際のアクセス時間幅に応じて、アクセスパターンテーブル124におけるエントリ時間幅を調整することで、当該エントリ時間幅を、実際に要求される時間幅に整合させることができる。これにより、情報処理装置100は、読み出し要求に対して、余分なデータが読み出される可能性を低減でき、KVS110に対する読み出しのアクセス効率の向上を図れる。
【0187】
なお、
図2で例示したように、情報処理装置100の機能は、種々のサービス提供に利用され得る。
図31は、情報処理システムによるサービス提供例を示す図である。
【0188】
例えば、データセンタ70は、情報処理装置100およびメッセージキューサーバ200,300を有する。データセンタ70は、更にサーバ400を有する。メッセージキューサーバ200は、メッセージキュー(MQ:Message Queue)210を有する。メッセージキューサーバ300は、MQ310を有する。サーバ400は、サービス410を実行する。サービス410は、MQ310に保持されるデータを取得し、当該データを用いて、コネクテッドカー41~43やIoTデバイス44を含むデバイス群40へ渋滞情報、迂回経路情報および広告推薦情報などを通知する。なお、データセンタ70は、情報処理装置100やサーバ400をそれぞれ複数台有してもよい。
【0189】
情報処理装置100は、車両オブジェクトやヒトオブジェクトを含む実世界オブジェクト161,162,…、サービスオブジェクト163,164,165を有する。実世界オブジェクト161,162,…は、デバイス群40から秒単位で送信される速度、位置、運転ログなどを、MQ210を介して取得し、保持する。
【0190】
サービスオブジェクト163,164,165は、ユーザロジックの一例であり、実世界オブジェクト161,162,…に対応する速度や位置などのデータに基づく所定の処理を実行する。例えば、サービスオブジェクト163は、道路ごとの渋滞度合いを検出し、道路ごとの渋滞度合いを示す車両リスト163aを生成して、サービスオブジェクト164,165に提供する。サービスオブジェクト164は、車両リスト163aに基づいて、道路ごとの渋滞ランキングを判定し、当該渋滞ランキングを示す渋滞度リスト164aを、MQ310に格納する。また、サービスオブジェクト165は、道路ごとの渋滞回避誘導のための処理を行い、渋滞回避のための推奨経路165aの情報を、MQ310に格納する。サービス410は、渋滞度リスト164aや推奨経路165aに基づいて、広告推薦サービスや渋滞通知サービスを、デバイス群40にフィードバックする。
【0191】
情報処理装置100では、実世界オブジェクト161,162,…やサービスオブジェクト163,164,165で用いられるデータがKVS110に格納される。第2~第6の実施の形態で例示したように、情報処理装置100は、KVS110からのデータ読み出しに伴う読み出し回数を削減し、読み出しを効率化できる。例えば、KVS110からのデータの読み出しが高速化される。このため、デバイス群40に対して遅延の少ないリアルタイムでのサービス提供が可能になる。すなわち、情報処理装置100は、時々刻々と変化するデバイス群40の状況に応じて適切な案内通知を可能にすることができる。
【0192】
なお、KVS110のデータ構造には、例えば、Log-Structured Merge tree(LSM-tree)が用いられる。LSM-treeは、インデックス構造およびインデックス構造を用いたデータの格納構造の1つで、書き込みが早く、書き込みに比べて読み出しが遅いという特徴をもつ。大量の入力データを高速に処理するストリーム処理では、書き込みが高速なLSM-tree構造を用いたKVS110が採用されることが多い。第1の実施の形態の情報処理装置10や第2~第6の実施の形態の情報処理装置100の機能は、LSM-tree構造のように、読み出しが比較的遅いデータ構造において、読み出しの高速化を図るために特に有効である。
【0193】
以上説明したように、情報処理装置100は次の処理を実行する。
イベント処理部130は、時刻に対応するデータを保持するKVS110に対する各プログラムからの読み出し要求による読み出し対象の時間幅のうち最長の時間幅以上である第1時間幅を、KVS110の1つのエントリに対応付ける時間幅に決定する。イベント処理部130は、入力された、時刻ごとのデータに基づいて、第1時間幅の時刻範囲に属する複数のデータに対応するエントリを作成し、KVS110に格納する。
【0194】
これにより、情報処理装置100は、KVS110からのデータの読み出しに伴う読み出し回数を削減できる。その結果、情報処理装置100は、KVS110からのデータの読み出しの高速化を図れる。ユーザロジック133,134,135それぞれは、KVS110に対する読み出し要求を発行するプログラムの一例である。
【0195】
イベント処理部130は、第1時間幅を、各プログラムからの読み出し要求による読み出し対象の時間幅のうちの最長の時間幅と同じ長さにしてもよい。すなわち、第1時間幅は、当該最長の時間幅と同じ長さでもよい。これにより、情報処理装置100は、KVS110からのデータの読み出しに伴う読み出し回数を削減できる。また、情報処理装置100は、第1時間幅を簡便に決定できる。
【0196】
イベント処理部130は、1つのエントリに対応付ける時間幅の複数の候補を示す第1情報に基づいて、当該最長の時間幅より長く、かつ、当該最長の時間幅との差が最小である時間幅の候補を、第1時間幅に決定してもよい。
【0197】
これにより、情報処理装置100は、KVS110からのデータの読み出しに伴う読み出し回数を削減できる。なお、アクセスパターンテーブル124は、第1情報の一例である。
【0198】
第1情報では、1つのエントリに対応付ける時間幅の複数の候補それぞれが、読み出し要求における時間幅を示すアクセス時間幅であって当該候補よりも短いアクセス時間幅の範囲を示すアクセスパターンに対応付けられてもよい。イベント処理部130は、アクセスパターンごとの読み出し要求の履歴に基づいて、アクセスパターンごとの読み出し要求の所定期間における発生割合を算出してもよい。イベント処理部130は、発生割合が一定割合よりも低いアクセスパターンに対応する読み出し要求を除外して、最長の時間幅を特定してもよい。
【0199】
これにより、情報処理装置100は、1つのエントリに対応付ける時間幅を適切に決定できる。前述のように、発生割合が比較的低いアクセスパターンを基準にエントリの時間幅を決めてしまうと、当該時間幅が大きくなり過ぎたり、小さくなり過ぎたりすることがあり、KVS110からの読み出し効率が低下する可能性があるからである。そこで、情報処理装置100は、発生割合が一定割合よりも低いアクセスパターンに対応する読み出し要求を除外して、最長の時間幅を特定することで、読み出し効率の低下を抑えられる。なお、パターン集計テーブル125は、アクセスパターンごとの読み出し要求の履歴の一例である。パターン発生割合テーブル126における発生割合は、アクセスパターンごとの読み出し要求の所定期間における発生割合の一例である。
【0200】
イベント処理部130は、前回作成したエントリの第1時間幅に対し、今回作成するエントリの時間幅の候補を、第1情報に基づいて、前回の第1時間幅よりも1段階短い時間幅、前回の第1時間幅、および、前回の第1時間幅よりも1段階長い時間幅としてもよい。これにより、情報処理装置100は、エントリの時間幅の決定を効率化できる。また、情報処理装置100は、エントリの時間幅が急激に短くなったり、急激に長くなったりすることを抑えられる。
【0201】
例えば、第4の実施の形態で例示したように、時間幅の複数の候補は、2のn(nは0以上の整数)乗の値でもよい。そして、イベント処理部130は、前回作成したエントリの第1時間幅が2のm(mは1以上の整数)乗の値の場合、次に作成するエントリの時間幅の複数の候補を、2の(m-1)乗の値、2のm乗の値、2の(m+1)乗の値としてもよい。
【0202】
イベント処理部130は、読み出し要求による読み出し対象の時間幅および作成されるエントリの時間幅が所定時間一定である場合に次の処理を行ってもよい。イベント処理部130は、読み出し要求による読み出し対象の第1時刻範囲と読み出し要求により読み出されたエントリに対応する第2時刻範囲との開始時刻の差分が所定時間一定であることを検出する。すると、イベント処理部130は、次回作成するエントリに対応する第3時刻範囲の終端時刻を差分の分だけ後ろにずらす。
【0203】
これにより、情報処理装置100は、KVS110のエントリの時刻範囲の開始時刻を、読み出し要求で指定される時刻範囲の開始時刻に合わせることができ、KVS110からのデータの読み出し回数を一層削減できる。なお、読み出し要求による読み出し対象の時間幅および作成されるエントリの時間幅が所定時間一定である場合とは、例えば読み出し要求による読み出し対象の時間幅および作成されるエントリの時間幅が一定の値で一致した状態が所定時間継続する場合である。
【0204】
また、イベント処理部130は、特定した最長の時間幅に対して特定される、第1情報に含まれる時間幅の候補が最長の時間幅と異なる場合、第1情報に含まれる当該時間幅の候補を、特定した最長の時間幅に基づいて変更してもよい。例えば、イベント処理部130は、該当の時間幅の候補を、当該時間幅の候補よりも短く、かつ、特定した最長の時間幅以上となるように短くする。イベント処理部130は、該当の時間幅の候補を、特定した最長の時間幅と同じにしてもよい。
【0205】
これにより、情報処理装置100は、KVS110の1つのエントリの時間幅が、実際の読み出し要求の時間幅に対して長くなり過ぎないように調整できる。その結果、情報処理装置100は、KVS110からの読み出し効率の向上を図れる。
【0206】
例えば、特定した最長の時間幅が属する第1アクセスパターンに対応する、第1情報に含まれる時間幅の候補が、特定した最長の時間幅と異なる場合がある。この場合、イベント処理部130は、第1情報において第1アクセスパターンに対応付けられている時間幅の候補を、特定した最長の時間幅に基づいて変更してもよい。例えば、イベント処理部130は、第1アクセスパターンに対応付けられている時間幅の候補を、当該時間幅の候補よりも短く、かつ、特定した最長の時間幅以上となるように短くする。イベント処理部130は、第1アクセスパターンに対応付けられている時間幅の候補を、特定した最長の時間幅と同じにしてもよい。
【0207】
これにより、情報処理装置100は、KVS110の1つのエントリの時間幅が、実際の読み出し要求の時間幅に対して長くなり過ぎないように調整できる。その結果、情報処理装置100は、KVS110からの読み出し効率の向上を図れる。
【0208】
また、イベント処理部130は、KVS110のエントリを前回作成してから現在までに受け付けた読み出し要求に基づいて、読み出し要求における読み出し対象の最長の時間幅を特定してもよい。これにより、情報処理装置100は、各プログラム(各ユーザロジック)による現在の読み出し要求による読み出し対象の時間幅の状況に応じて、1つのエントリに対応付ける時間幅を動的に調整できる。また、現在の読み出し要求による読み出し対象の時間幅の状況に応じて、1つのエントリに対応付ける時間幅を適切に調整できる。このため、KVS110からのデータの読み出しの一層の効率化を図れる。例えば、読み出し回数の削減と、読み出し要求の時間幅に対してエントリの時間幅が過大になることの抑制との両立を図れる。その結果、KVS110からのデータの読み出しの高速化を図れる。
【0209】
例えば、イベント処理部130は、作成したエントリをKVS110に格納すると、現在まで記録していた、読み出し要求で実際に指定された時間幅の情報を削除する。そして、イベント処理部130は、次のエントリの作成時の第1時間幅の決定のために、実際に指定された時間幅の新たな記録を開始する。ここで、アクセス幅最大値情報122やパターン集計テーブル125やパターン発生割合テーブル126は、読み出し要求で実際に指定された時間幅の情報の一例である。
【0210】
また、KVS110に格納されるデータは、センサにより取得されたセンサデータでもよい。例えば、情報処理装置100の機能は、センサから時系列に送信されるセンサデータに対するストリーム処理を行うストリーム処理基盤に好適である。
【0211】
また、KVS110の1つのエントリは、時刻範囲に対応するキーと当該時刻範囲に属する複数の時刻それぞれに対応するデータを含む値とを有してもよい。これにより、情報処理装置100は、各プログラムによる読み出しを行う時刻範囲の指定により当該時刻範囲のデータをKVS110から容易に読み出し可能になる。
【0212】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体23に記録できる。
【0213】
例えば、プログラムを記録した記録媒体23を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体23に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0214】
10 情報処理装置
11 記憶部
11a,11b キーバリューストア
12 処理部
R1,R2 読み出し要求
e1 エントリ