(57)【要約】【課題】データの転送量を減らすこと。【解決手段】処理部１２は、装置２０から前回取得した第１のデータＤ１と今回取得した第２のデータＤ２との比較により第１のデータＤ１に対する第２のデータＤ２の差分部分を特定する。処理部１２は、差分部分を１つのブロックとするように、第２のデータＤ２のブロックの区切り位置を決定し、決定した区切り位置で第２のデータＤ２を複数の第１のブロックに区切る。処理部１２は、第１のブロック毎の第１のハッシュ値と区切り位置の情報とを装置２０に送信する。処理部１２は、装置２０により保持される第３のデータが区切り位置の情報を基に区切られた第２のブロック毎の第２のハッシュ値のうち、第１のブロック毎の第１のハッシュ値とは異なる第２のハッシュ値に対応する第２のブロックを、装置２０から受信する。【選択図】図１
2020112966.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
データの送信元の装置から前回取得した第１のデータと前記装置から今回取得した第２のデータとの比較により前記第１のデータに対する前記第２のデータの差分部分を特定し、
前記差分部分を１つのブロックとするように、前記第２のデータのブロックの区切り位置を決定し、
決定した前記区切り位置で前記第２のデータを複数の第１のブロックに区切り、第１のブロック毎の第１のハッシュ値と前記区切り位置の情報とを前記装置に送信し、
前記装置により保持される第３のデータが前記区切り位置の情報を基に区切られた第２のブロック毎の第２のハッシュ値のうち、前記第１のブロック毎の第１のハッシュ値とは異なる前記第２のハッシュ値に対応する第２のブロックを、前記装置から受信する、
処理を実行させるデータ収集プログラム。
【請求項２】
前記第２のブロックの受信の際に、前記第３のデータにおける前記第２のブロックの位置を示す識別情報を前記装置から受信し、
前記第２のデータのうちの前記識別情報で示される位置のブロックを前記第２のブロックに置換することで、前記第３のデータを取得する、
請求項１記載のデータ収集プログラム。
【請求項３】
前記送信では、閾値よりも小さいサイズの前記差分部分がある場合、前記第２のデータを前記複数の第１のブロックに区切った後、前記複数の第１のブロックから、前記閾値よりも小さいサイズの前記差分部分を先頭に集約した１つのブロックを含む複数の他のブロックを生成し、
前記複数の他のブロックに含まれるブロック毎の第３のハッシュ値と、前記区切り位置の情報と、前記複数の第１のブロックから前記複数の他のブロックへの変換に用いられる変換情報とを前記装置に送信する、
請求項１記載のデータ収集プログラム。
【請求項４】
前記第１のデータに含まれる複数の第３のブロックそれぞれのハッシュ値を前記装置に送信し、前記第２のデータに含まれる複数の第４のブロックのうち当該ハッシュ値とは異なるハッシュ値に対応する第４のブロックを前記装置から受信し、受信した前記第４のブロックを前記第１のデータに適用することで、前記第２のデータを取得する、
請求項１記載のデータ収集プログラム。
【請求項５】
データの送信元の装置から前回取得した第１のデータと前記装置から今回取得した第２のデータとを記憶する記憶部と、
前記第１のデータと前記第２のデータとの比較により前記第１のデータに対する前記第２のデータの差分部分を特定し、前記差分部分を１つのブロックとするように、前記第２のデータのブロックの区切り位置を決定し、決定した前記区切り位置で前記第２のデータを複数の第１のブロックに区切り、第１のブロック毎の第１のハッシュ値と前記区切り位置の情報とを前記装置に送信し、前記装置により保持される第３のデータが前記区切り位置の情報を基に区切られた第２のブロック毎の第２のハッシュ値のうち、前記第１のブロック毎の第１のハッシュ値とは異なる前記第２のハッシュ値に対応する第２のブロックを、前記装置から受信する処理部と、
を有するデータ収集装置。
【請求項６】
コンピュータが、
データの送信元の装置から前回取得した第１のデータと前記装置から今回取得した第２のデータとの比較により前記第１のデータに対する前記第２のデータの差分部分を特定し、
前記差分部分を１つのブロックとするように、前記第２のデータのブロックの区切り位置を決定し、
決定した前記区切り位置で前記第２のデータを複数の第１のブロックに区切り、第１のブロック毎の第１のハッシュ値と前記区切り位置の情報とを前記装置に送信し、
前記装置により保持される第３のデータが前記区切り位置の情報を基に区切られた第２のブロック毎の第２のハッシュ値のうち、前記第１のブロック毎の第１のハッシュ値とは異なる前記第２のハッシュ値に対応する第２のブロックを、前記装置から受信する、
データ収集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ収集プログラム、データ収集装置およびデータ収集方法に関する。
【背景技術】
【０００２】
データの送信元の装置に蓄積されるデータを当該装置から上位装置に送信するシステムが利用されている。例えば、ファイルサーバの記憶容量を、オンラインストレージサービスを利用して拡張する際、ファイルサーバがファイルをブロックファイルに分割して管理する情報管理方法の提案がある。提案の情報管理方法では、ファイルサーバは、既に登録・保存されたブロックファイル群に対して重複するブロックについては、オンラインストレージサービスにアップロードせず、ファイルの構成情報を変更するのみとする。
【０００３】
また、受信コンピュータが旧ファイルをセグメントに分割し、各セグメントについてハッシュ数を計算し、これらのハッシュ数を送信コンピュータに転送するファイル転送方法の提案がある。提案のファイル転送方法では、送信コンピュータが新ファイルの各セグメントを検査し、どのセグメントが受信コンピュータから受信したハッシュ数とマッチングするハッシュ数を有するかを決定する。送信コンピュータは、新ファイルに適合するマッチングセグメントを受信コンピュータに通知する。そして、受信コンピュータは、旧ファイルのマッチングセグメントから新ファイルのコピーを構成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１４１７３８号公報
【特許文献２】特表平９−５１０５５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
データの送信元装置がデータをブロックに分割し、上位装置で保存済のブロックと重複するブロックを上位装置に送信しないことで、重複するブロックの転送を抑えることが考えられる。例えば、上位装置が送信元装置にデータ要求する際に、過去のデータを送ることで送信元装置は過去のデータとの差分ブロックのみを送ることが可能になる。
【０００６】
このとき、データ転送量をより削減するため、上位装置で所定のブロック単位毎のハッシュ値を計算し、計算したブロック単位のハッシュ値を上位装置から送信元装置に送信することが考えられる。送信元装置は、蓄積されたデータについて、ブロック単位のハッシュ値を求め、上位装置から送信されたハッシュ値との差分に応じて送信するデータを特定できる。
【０００７】
しかし、この場合、送信元装置から送信されるデータサイズの単位は、ハッシュ値の計算単位であるブロック単位となる。したがって、送信元装置は、ブロックの一部に差分がある場合でも当該ブロックの全体を送信することになり、データの転送量を十分に減らすことができないことがあるという問題がある。
【０００８】
１つの側面では、本発明はこのような点に鑑みてなされたものであり、データの転送量を減らせるデータ収集プログラム、データ収集装置およびデータ収集方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、データ収集プログラムが提供される。このデータ収集プログラムは、コンピュータに、データの送信元の装置から前回取得した第１のデータと当該装置から今回取得した第２のデータとの比較により第１のデータに対する第２のデータの差分部分を特定し、差分部分を１つのブロックとするように、第２のデータのブロックの区切り位置を決定し、決定した区切り位置で第２のデータを複数の第１のブロックに区切り、第１のブロック毎の第１のハッシュ値と区切り位置の情報とを当該装置に送信し、当該装置により保持される第３のデータが区切り位置の情報を基に区切られた第２のブロック毎の第２のハッシュ値のうち、第１のブロック毎の第１のハッシュ値とは異なる第２のハッシュ値に対応する第２のブロックを、当該装置から受信する、処理を実行させる。
【００１０】
また、１つの態様では、データ収集装置が提供される。
また、１つの態様では、データ収集方法が提供される。
【発明の効果】
【００１１】
１つの側面では、データの転送量を減らすことができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態のデータ収集装置を示す図である。
【図２】第２の実施の形態のデータ収集システムの例を示す図である。
【図３】サーバのハードウェア例を示す図である。
【図４】エッジのハードウェア例を示す図である。
【図５】サーバの機能例を示す図である。
【図６】エッジの機能例を示す図である。
【図７】差分部分の例を示す図である。
【図８】区切り位置更新の例を示す図である。
【図９】論物変換の例を示す図である。
【図１０】論物変換テーブルの例を示す図である。
【図１１】エッジ側データ送信処理の例（その１）を示すフローチャートである。
【図１２】サーバ側データ要求送信処理の例を示すフローチャートである。
【図１３】ブロック単位更新処理の例を示すフローチャートである。
【図１４】論物変換処理の例を示すフローチャートである。
【図１５】エッジ側データ送信処理の例（その２）を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１４】
図１は、第１の実施の形態のデータ収集装置を示す図である。
データ収集装置１０は、ネットワークを介して装置２０と通信し、装置２０が保持するデータを収集する。装置２０は、例えば、コンピュータなどの情報処理装置、センサ装置またはセンサ装置を搭載した機器（例えば、センサ装置を搭載した自動車などの移動体）などである。装置２０は、データ収集装置１０に送信するデータを記憶するためのメモリを有する。
【００１５】
データ収集装置１０は、記憶部１１および処理部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部１２は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１２はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１６】
記憶部１１は、装置２０から収集されたデータを記憶する。例えば、記憶部１１は、処理部１２が装置２０から前回取得した第１のデータＤ１を記憶する。第１のデータＤ１は、ブロックと呼ばれる所定サイズの単位に区切られている。例えば、第１のデータＤ１は、第１のデータＤ１の先頭から最後尾までを区切り位置ａ１，ａ２，ａ３で区切ったブロックＢ１１，Ｂ１２，Ｂ１３，Ｂ１４を有する。区切り位置は、データの先頭からのアドレス（例えば、ａ１，ａ２，ａ３がアドレスを示すとすると先頭アドレス＜ａ１＜ａ２＜ａ３＜最後尾アドレスとする）によって示される。区切り位置の情報は、データ収集装置１０に対して予め定められ、データ収集装置１０から装置２０に対して予め通知される。
【００１７】
処理部１２は、装置２０からデータを取得する。例えば、処理部１２は、今回、第２のデータＤ２を、装置２０から取得する。第２のデータＤ２のサイズは、第１のデータＤ１のサイズと同じである。処理部１２は、ブロックＢ１１，Ｂ１２，Ｂ１３，Ｂ１４それぞれのハッシュ値（要約値と呼ばれることもある）を計算し、計算したハッシュ値を装置２０に送信してもよい。
【００１８】
装置２０は、当該ハッシュ値を受信し、装置２０が保持する新規データのうち、受信したハッシュ値とハッシュ値が異なるブロックと、当該新規データ内における当該ブロックのブロック位置を示すアドレスなどの識別情報とを装置２０に送信する。新規データのブロックのうち、データ収集装置１０から受信したハッシュ値と同じハッシュ値に対応するブロックは、データ収集装置１０に送信済みであり、データ収集装置１０が既に保持している。一方、新規データのブロックのうち、データ収集装置１０から受信したハッシュ値と異なるハッシュ値に対応するブロックは、データ収集装置１０に未送信である。したがって、装置２０は、ハッシュ値が異なるブロックのみを送信することで、重複したデータをデータ収集装置１０に送信せずに済む。
【００１９】
第２のデータＤ２は、第２のデータＤ２の先頭から最後尾までを区切り位置ａ１，ａ２，ａ３で区切ったブロックＢ１１，Ｂ１２，Ｂ２１，Ｂ１４を有する。第２のデータＤ２は、第１のデータＤ１に対して、ブロックＢ１１，Ｂ１２，Ｂ１４が共通であり、ブロックＢ２１が共通でない。したがって、この場合、装置２０は、第２のデータＤ２のうち、ブロックＢ２１のみをデータ収集装置１０に送信すればよい。
【００２０】
処理部１２は、ブロックＢ２１および第２のデータＤ２内のブロックＢ２１のブロック位置の識別情報を装置２０から受信すると、ブロックＢ２１がブロックＢ１３に対する更新部分であると判断する。このため、データ収集装置１０は、第１のデータＤ１のブロックＢ１３をブロックＢ２１に置換することで、第２のデータＤ２を得る。こうして、データ収集装置１０は、重複ブロックに対するデータ収集を減らして、第２のデータＤ２を適切に取得できる。
【００２１】
処理部１２は、更に、第１のデータＤ１と第２のデータＤ２とを比較し、比較に応じて、第１のデータＤ１に対する第２のデータＤ２の差分部分を特定し、差分部分を１つのブロックＢ２２とするように、第２のデータＤ２のブロックの区切り位置を決定する。例えば、第２のデータＤ２のうち、区切り位置ａ２〜アドレスａ４（ここで、ａ４は、区切り位置ａ２よりも大きく区切り位置ａ３よりも小さいアドレスである）の範囲が、第１のデータＤ１の同範囲とは内容が異なる部分であり、それ以外の部分は、第１のデータＤ１と内容が同じであるとする。そこで、例えば、処理部１２は、第２のデータＤ２のブロックの区切り位置として、区切り位置ａ１，ａ２，ａ４を決定する。
【００２２】
処理部１２は、決定した区切り位置ａ１，ａ２，ａ４で第２のデータＤ２をブロックＢ１１，Ｂ１２，Ｂ２２，Ｂ２３（複数の第１のブロック）に区切る。処理部１２は、ブロックＢ１１，Ｂ１２，Ｂ２２，Ｂ２３毎のハッシュ値（第１のハッシュ値）と、区切り位置ａ１，ａ２，ａ４の情報とを装置２０に送信する。ブロックＢ１１，Ｂ１２，Ｂ２２，Ｂ２３それぞれのハッシュ値は、ハッシュ値ｈ１，ｈ２，ｈ３，ｈ４である。
【００２３】
装置２０は、ブロックＢ１１，Ｂ１２，Ｂ２２，Ｂ２３毎のハッシュ値と、区切り位置ａ１，ａ２，ａ４の情報を受信する。装置２０のメモリには、データ収集装置１０に未送信であり、次の送信対象である第３のデータＤ３が格納されている。第３のデータＤ３のサイズは、第２のデータＤ２のサイズと同じである。装置２０は、第３のデータＤ３を、区切り位置ａ１，ａ２，ａ４の情報を基にブロックＢ１１，Ｂ１２，Ｂ３１，Ｂ２３（複数の第２のブロック）に区切る。装置２０は、ブロックＢ１１，Ｂ１２，Ｂ３１，Ｂ２３毎のハッシュ値（第２のハッシュ値）を求める。ブロックＢ１１，Ｂ１２，Ｂ３１，Ｂ２３それぞれのハッシュ値は、ハッシュ値ｈ１，ｈ２，ｈ５，ｈ４である。装置２０は、ハッシュ値ｈ１，ｈ２，ｈ５，ｈ４のうち、受信したハッシュ値ｈ１，ｈ２，ｈ３，ｈ４とは異なるハッシュ値ｈ５に対応するブロックＢ３１を、データ収集装置１０に送信する。このとき、例えば、装置２０は、第３のデータＤ３におけるブロックＢ３１のブロック位置の識別情報を、データ収集装置１０に送信する。
【００２４】
すなわち、処理部１２は、ブロックＢ１１，Ｂ１２，Ｂ３１，Ｂ２３のうち、装置２０に送信したハッシュ値ｈ１，ｈ２，ｈ３，ｈ４とは異なるハッシュ値ｈ５に対応するブロックＢ３１のみを、装置２０から受信する。例えば、処理部１２は、ブロックＢ３１とともに、第３のデータＤ３のブロック位置の識別情報を装置２０から受信し、当該識別情報により、ブロックＢ１１，Ｂ１２，Ｂ２２，Ｂ２３のうち、ブロックＢ２２をブロックＢ３１に変更することで、第３のデータＤ３を得る。
【００２５】
こうして、データの区切り位置を変更することにより、データ収集装置１０は、データの転送量を減らすことができる。
例えば、当初の送信対象のデータの区切り位置ａ１，ａ２，ａ３を変更しないことも考えられる。しかし、図１の例の場合、第２のデータＤ２に対する第３のデータＤ３の差分が、区切り位置ａ２〜ａ４の部分であるにも関わらず、第３のデータＤ３の区切り位置ａ２〜ａ３のデータを装置２０に送信させると、アドレスａ４〜区切り位置ａ３の部分について重複したデータ送信が行われる。
【００２６】
一方、データ収集装置１０は、第１のデータＤ１と第２のデータＤ２との比較に応じて、例えば、区切り位置ａ１，ａ２，ａ３を区切り位置ａ１，ａ２，ａ４に更新する。このため、図１の例では、第３のデータＤ３のうち、区切り位置ａ４〜ａ３の部分を装置２０に送信させずに済む。データ収集装置１０によるデータ収集方法は、装置２０において、ある期間におけるデータ内の更新位置の変化が比較的小さい場合や、ある期間におけるデータ内の更新位置に変化がない場合に、転送量の低減の効果が高まる。
【００２７】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態のデータ収集システムの例を示す図である。
【００２８】
第２の実施の形態のデータ収集システムは、サーバ１００およびエッジ２００，３００，４００，…を有する。サーバ１００は、ネットワーク５０に接続されている。ネットワーク５０は、例えば、ＷＡＮ（Wide Area Network）である。ネットワーク５０には、基地局５１，５２，…が接続されている。基地局５１，５２，…は、各基地局が属するエリアに存在するエッジと無線通信する。サーバ１００と各エッジとは、ネットワーク５０および何れかのエリアにおける基地局を介して通信可能である。
【００２９】
サーバ１００は、エッジ２００，３００，４００，…により取得されたデータを、エッジ２００，３００，４００，…から収集し、分析するサーバコンピュータである。サーバ１００は、ユーザの分析要求に応じて、データ収集の対象とする期間およびエリアを特定し、特定した期間およびエリアに関するデータを、エッジ２００，３００，４００，…から収集する。第２の実施の形態では、エッジ２００，３００，４００，…により取得されるデータとして、降雨量のデータを例示する。サーバ１００は、エッジ２００，３００，４００，…から収集した降雨量のデータに基づいて、エッジ２００，３００，４００，…が存在するエリアの降雨量を分析する。
【００３０】
ただし、収集対象のデータの種類は降雨量以外でもよく、例えば、温度、湿度、風量、震動量、大気物質濃度、放射線量、電磁波（例えば、映像などに変換された情報）または音など、種々のものが考えられる。サーバ１００は、第１の実施の形態のデータ収集装置１０の一例である。
【００３１】
エッジ２００，３００，４００，…は、移動体、または、移動体に搭載された装置である。移動体は、車両、動物、船舶、飛行体およびロボットなどである。エッジ２００，３００，４００，…それぞれは、雨滴センサを備え、雨滴センサを用いて降雨量のデータを取得する。エッジ２００，３００，４００，…は、無線通信機能を備え、自身が存在するエリアの基地局と無線で通信する。エッジ２００，３００，４００，…は、サーバ１００からの要求に応じて、取得した降雨量のデータをサーバ１００に送信する。
【００３２】
エッジ２００，３００，４００，…それぞれは、第１の実施の形態の装置２０の一例である。
図３は、サーバのハードウェア例を示す図である。
【００３３】
サーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６およびＮＩＣ（Network Interface Card）１０７を有する。なお、ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。
【００３４】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよい。また、サーバ１００は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００３５】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、サーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３６】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３７】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、サーバ１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００３８】
入力信号処理部１０５は、サーバ１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、サーバ１００に、複数の種類の入力デバイスが接続されていてもよい。
【００３９】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００４０】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体１１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００４１】
ＮＩＣ１０７は、ネットワーク５０に接続され、ネットワーク５０を介して他のコンピュータと通信を行うインタフェースである。ＮＩＣ１０７は、例えば、ネットワーク５０に属するスイッチやルータなどの通信装置とケーブルで接続される。
【００４２】
図４は、エッジのハードウェア例を示す図である。
エッジ２００は、ＣＰＵ２０１、ＲＡＭ２０２、フラッシュメモリ２０３、雨滴センサ２０４および無線部２０５を有する。
【００４３】
ＣＰＵ２０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ２０１は、フラッシュメモリ２０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ２０２にロードし、プログラムを実行する。なお、ＣＰＵ２０１は複数のプロセッサコアを含んでもよい。また、エッジ２００は複数のプロセッサを有してもよい。
【００４４】
ＲＡＭ２０２は、ＣＰＵ２０１が実行するプログラムやＣＰＵ２０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。
フラッシュメモリ２０３は、ファームウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。
【００４５】
雨滴センサ２０４は、エッジ２００の周囲における降雨量を検出するセンサである。雨滴センサ２０４は、検出した降雨量のデータをＲＡＭ２０２またはフラッシュメモリ２０３に格納する。
【００４６】
無線部２０５は、基地局５１，５２，…と無線で接続可能な無線通信インタフェースである。無線部２０５は、エッジ２００が存在するエリアをカバーする基地局を介して、サーバ１００と通信する。
【００４７】
なお、エッジ２００自身が移動する場合、エッジ２００はモータやエンジンなどの移動用の機構を有するが、図４では図示を省略している。
エッジ３００，４００，…もエッジ２００と同様のハードウェアにより実現される。
【００４８】
図５は、サーバの機能例を示す図である。
サーバ１００は、記憶部１２０、ブロック分割部１３０、ブロック更新部１４０、論物変換部１５０、ハッシュ値生成部１６０およびデータ受信部１７０を有する。記憶部１２０は、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域を用いて実現される。ブロック分割部１３０、ブロック更新部１４０、論物変換部１５０、ハッシュ値生成部１６０およびデータ受信部１７０は、ＲＡＭ１０２に記憶されたプログラムがＣＰＵ１０１により実行されることで実現される。
【００４９】
なお、サーバ１００のこれらの各機能による処理はエッジ毎に実行される。以下では、エッジ２００に対する処理を例示するが、エッジ３００，４００，…に対しても同様の処理となる。
【００５０】
記憶部１２０は、エッジ２００，３００，４００，…から収集したデータを記憶する。
ブロック分割部１３０は、記憶部１２０に格納されたデータを複数の部分に分割する。１つの部分をブロックと称する。ブロック分割部１３０は、記憶部１２０に記憶された、データの区切り位置の情報に基づいて、データのブロックへの分割を行う。
【００５１】
ブロック更新部１４０は、記憶部１２０に記憶された区切り位置の情報を更新する。ブロックのサイズは、ブロック毎に異なることがある。
論物変換部１５０は、論理ブロック群から物理ブロック群への変換を行う。論理ブロック群は、データを区切り位置の情報に基づいて分割した直後（ブロック分割部１３０により分割された結果）のブロック群である。物理ブロック群は、区切り位置の情報に基づいて分割した直後のブロック群のうち、前回データと差分のあるブロック群を先頭に配置したブロック群である。論物変換部１５０は、論物変換の結果に応じて、論物変換方法を示す論物変換テーブルを生成し、エッジ２００に送信する。論物変換テーブルは、区切り位置の情報を含む。
【００５２】
ハッシュ値生成部１６０は、ブロック毎のハッシュ値を生成する。ハッシュ値生成部１６０は、生成したハッシュ値を該当のエッジ２００に送信する。エッジ２００は、送信対象とする新データのうち、サーバ１００から受信したハッシュ値とは異なるハッシュ値に対応するブロックをサーバ１００に送信し、新データのそれ以外のブロックを送信しない。また、エッジ２００は、送信するブロックとともに、当該ブロックの新データにおけるブロック位置の識別情報を、サーバ１００に送信する。
【００５３】
データ受信部１７０は、エッジ２００により送信されたブロックを受信する。データ受信部１７０は、受信済みの前回のデータに対して、エッジ２００から今回受信したブロックを適用することで、エッジ２００の新データを得る。適用とは、今回受信したブロックのブロック位置に関して、前回のデータの当該ブロック位置のブロックを、今回受信したブロックに置換することを示す。
【００５４】
サーバ１００は、こうした処理をエッジ毎に実行し、エッジ２００，３００，４００，…からのデータ収集を行う。
図６は、エッジの機能例を示す図である。
【００５５】
エッジ２００は、記憶部２２０、前処理部２３０、ブロック分割部２４０、論物変換部２５０、ハッシュ値生成部２６０および送信処理部２７０を有する。記憶部２２０は、ＲＡＭ２０２またはフラッシュメモリ２０３の記憶領域を用いて実現される。前処理部２３０、ブロック分割部２４０、論物変換部２５０、ハッシュ値生成部２６０および送信処理部２７０は、ＲＡＭ２０２に記憶されたプログラムが、ＣＰＵ２０１により実行されることで実現される。
【００５６】
記憶部２２０は、元データ、前処理後データおよび、サーバ１００から受信した区切り位置の情報を含む論物変換テーブルなどを記憶する。元データとは、エッジ２００における所定の前処理の対象となるデータであり、例えば、１秒間隔で取得された降雨量のデータである。前処理とは、サーバ１００にデータ送信する前に元データに施す処理であり、例えば、１秒間隔で取得された降雨量のデータから１分間隔での平均の降雨量を求める処理などである。前処理後データは、当該前処理により生成されるデータである。
【００５７】
前処理部２３０は、記憶部２２０に記憶された元データに対して前処理を実行する。前処理部２３０は、記憶部２２０またはＲＡＭ２０２の所定の領域に前処理後データを格納する。
【００５８】
ブロック分割部２４０は、区切り位置の情報に基づいて、前処理後データを複数のブロックに分割する。ブロック分割部２４０により分割された結果が論理ブロック群である。
論物変換部２５０は、論物変換テーブルに基づいて、論理ブロック群から物理ブロック群への変換を行う。
【００５９】
ハッシュ値生成部２６０は、物理ブロック群に含まれる各物理ブロックのハッシュ値を生成する。
送信処理部２７０は、ハッシュ値生成部２６０により生成されたハッシュ値と、サーバ１００から受信したハッシュ値とを照合し、ハッシュ値が異なる物理ブロックをサーバ１００に送信する。
【００６０】
エッジ３００，４００，…もエッジ２００と同様の機能を有する。
図７は、差分部分の例を示す図である。
図７（Ａ）は、エッジ２００により送信された前回のデータと今回のデータとの間で、ブロックを区切る区切り位置の境界に差分部分が存在する例を示す。図７（Ａ）の例では、４つのブロック５０１，５０２，５０３，５０４のうち、ブロック５０２，５０３の境界に差分部分が存在している。
【００６１】
ブロックのサイズを変更しない場合、図７（Ａ）の例では、ブロック５０２，５０３の全部をエッジ２００からサーバ１００に送信することになる。しかし、ブロック５０２，５０３は、差分部分以外の、サーバ１００が取得済みの部分を含む。サーバ１００が取得済みの部分の送信は、重複したデータ送信となる。
【００６２】
図７（Ｂ）は、エッジ２００により送信された前回のデータと今回のデータとの間で、単一ブロックの内部の一部分に差分部分が存在する例を示す。図７（Ｂ）の例では、３つのブロック５１１，５１２，５１３のうち、ブロック５１２の内部の一部分に差分部分が存在している。
【００６３】
ブロックのサイズを変更しない場合、図７（Ｂ）の例では、ブロック５１２をエッジ２００からサーバ１００に送信することになる。しかし、ブロック５１２は、差分部分以外の、サーバ１００が取得済みの部分を含む。サーバ１００が取得済みの部分の送信は、重複したデータ送信となる。
【００６４】
そこで、サーバ１００は、データの区切り位置を変更する。
図８は、区切り位置更新の例を示す図である。
図８（Ａ）は、単一ブロックの内部の一部分に差分部分が存在する場合の区切り位置更新の例を示す。図８（Ａ）の例では、データの区切り位置ｂ１，ｂ２，ｂ３に対するブロック５２１，５２２，５２３，５２４のうち、ブロック５２３の内部の一部分に差分部分が存在する。この場合、ブロック更新部１４０は、当該データの区切り位置を区切り位置ｂ１，ｂ４，ｂ５に更新する。当該データは、区切り位置ｂ１，ｂ４，ｂ５によりブロック５３１，５３２，５３３，５３４に分割される。このうち、区切り位置ｂ４〜ｂ５のブロック５３３は、ブロック５２３の内部の差分部分に相当するブロックである。
【００６５】
図８（Ｂ）は、２つのブロックの境界に差分部分が存在する場合の区切り位置更新の例を示す。図８（Ｂ）の例では、データの区切り位置ｂ６，ｂ７，ｂ８に対するブロック５４１，５４２，５４３，５４４のうち、ブロック５４２，５４３の境界部分に差分部分が存在する。この場合、ブロック更新部１４０は、当該データの区切り位置を、例えば、区切り位置ｂ９，ｂ１０に更新する。当該データは、区切り位置ｂ９，ｂ１０によりブロック５５１，５５２，５５３に分割される。このうち、区切り位置ｂ９〜ｂ１０のブロック５５２は、ブロック５４２，５４３の境界の差分部分に相当するブロックである。
【００６６】
送信対象の１つのデータに、比較的小さなサイズの差分部分が複数存在することがある。この場合、小さい複数の差分部分をそれぞれブロック化すると、エッジ側でのブロック毎のハッシュ値の照合回数が増えたり、送信対象ブロックの送信回数が行われ易くなったりし、サーバ１００によるデータ収集が遅延する。そこで、サーバ１００は、比較的小さなサイズの差分部分を１つにまとめる論物変換処理を実行する。
【００６７】
図９は、論物変換の例を示す図である。
サーバ１００は、エッジ２００から論理ブロック群６０１に相当するデータを受信する。論理ブロック群６０１は、区切り位置変更前の論理ブロック群である。図９では、論理ブロック群６０１および物理ブロック群６０２に対して、アドレスｐ１〜ｐ１３が示されている。このうち、アドレスｐ４，ｐ７，ｐ１０の３つの区切り位置によって、当該データは、４つの論理ブロックに分割される。論理ブロック群６０１は、この４つの論理ブロックを有する。
【００６８】
アドレスｐ２〜ｐ３の部分は、エッジ２００から前回取得したデータに対する、今回取得したデータの第１の差分部分である。アドレスｐ５〜ｐ６の部分は、エッジ２００から前回取得したデータに対する、今回取得したデータの第２の差分部分である。アドレスｐ８〜ｐ９の部分は、エッジ２００から前回取得したデータに対する、今回取得したデータの第３の差分部分である。アドレスｐ１１〜ｐ１２の部分は、エッジ２００から前回取得したデータに対する、今回取得したデータの第４の差分部分である。
【００６９】
物理ブロック群６０２は、区切り位置変更前の物理ブロック群であり、論理ブロック群６０１と同じブロック群である。
サーバ１００は、上記の４つの差分部分が１つの論理ブロックとなるように、区切り位置を変更することで、論理ブロック群６０１を論理ブロック群６０３に変更する。ここで、論理ブロックＩＤ（IDentifier）「ｘ」の論理ブロックを「論理ブロックｘ」のように表記する。論理ブロックｘと内容が同じ物理ブロックについても「物理ブロックｘ」と表記することがある。
【００７０】
論理ブロック群６０３は、アドレス順に、論理ブロックａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ，ｉの９個の論理ブロックを有する。論理ブロックａは、アドレスｐ１〜ｐ２の部分に相当する。論理ブロックｂは、アドレスｐ２〜ｐ３の差分部分に相当する。論理ブロックｃは、アドレスｐ３〜ｐ５の部分に相当する。論理ブロックｄは、アドレスｐ５〜ｐ６の差分部分に相当する。論理ブロックｅは、アドレスｐ６〜ｐ８の部分に相当する。論理ブロックｆは、アドレスｐ８〜ｐ９の差分部分に相当する。論理ブロックｇは、アドレスｐ９〜ｐ１１の部分に相当する。論理ブロックｈは、アドレスｐ１１〜ｐ１２の差分部分に相当する。
【００７１】
例えば、論理ブロックｂ，ｄ，ｆ，ｈそれぞれのサイズは、所定の閾値よりも小さいとする。この場合、サーバ１００は、論理ブロックｂ，ｄ，ｆ，ｈを、データの先頭に集約して１つのブロックとした物理ブロック群６０４を生成するように、論物変換テーブルＴ１を生成する。物理ブロック群６０４は、論理ブロックｂ，ｄ，ｆ，ｈを１つに集約した先頭の物理ブロックと、それ以降の物理ブロックａ，ｃ，ｅ，ｇ，ｉの合計６個の物理ブロックを有する。サーバ１００は、論理ブロック群６０３から物理ブロック群６０４への変換方法を規定した論物変換テーブルＴ１を生成する。
【００７２】
更に、サーバ１００は、物理ブロック群６０４に含まれる各物理ブロックを所定のハッシュ関数に入力し、ハッシュ値群６０５を求める。ハッシュ値群６０５は、ハッシュ値ｈｓ，ｈａ，ｈｃ，ｈｅ，ｈｇ，ｈｉを有する。
【００７３】
ハッシュ値ｈｓは、論理ブロックｂ，ｄ，ｆ，ｈを１つに集約した物理ブロックのハッシュ値である。ハッシュ値ｈａは、物理ブロックａのハッシュ値である。ハッシュ値ｈｃは、物理ブロックｃのハッシュ値である。ハッシュ値ｈｅは、物理ブロックｅのハッシュ値である。ハッシュ値ｈｇは、物理ブロックｇのハッシュ値である。ハッシュ値ｈｉは、物理ブロックｉのハッシュ値である。
【００７４】
サーバ１００は、ハッシュ値群６０５および論物変換テーブルＴ１をエッジ２００に送信する。エッジ２００は、ハッシュ値群６０５および論物変換テーブルＴ１を受信する。
エッジ２００は、前処理後データ７０１を保持している。エッジ２００は、論物変換テーブルＴ１に基づいて、前処理後データ７０１を論理ブロック群に分割する。当該論理ブロック群は、アドレス順に、論理ブロックａ，ｂ，ｃ，ｊ，ｅ，ｋ，ｇ，ｈ，ｉを有する。ここで、論理ブロックｊは、論理ブロックｄのブロック位置に対応する論理ブロックである。論理ブロックｋは、論理ブロックｆのブロック位置に対応する論理ブロックである。
【００７５】
エッジ２００は、論物変換テーブルＴ１に基づいて、論理ブロックａ，ｂ，ｃ，ｊ，ｅ，ｋ，ｇ，ｈ，ｉに対する論物変換を行い、物理ブロック群７０２を生成する。物理ブロック群７０２は、論理ブロックｂ，ｊ，ｋ，ｈを１つに集約した先頭の物理ブロック、および、それ以降の物理ブロックａ，ｃ，ｅ，ｇ，ｉの合計６個の物理ブロックを有する。
【００７６】
エッジ２００は、物理ブロック群７０２に含まれる各物理ブロックをサーバ１００が有するハッシュ関数と同じハッシュ関数に入力し、ハッシュ値群７０３を求める。ハッシュ値群７０３は、ハッシュ値ｈｔ，ｈａ，ｈｃ，ｈｅ，ｈｇ，ｈｉを有する。ハッシュ値ｈｔは、論理ブロックｂ，ｊ，ｋ，ｈを１つに集約した物理ブロックのハッシュ値である。
【００７７】
エッジ２００は、ハッシュ値群７０３のハッシュ値を、ハッシュ値群６０５のハッシュ値と比較する。ハッシュ値ｈａ，ｈｃ，ｈｅ，ｈｇ，ｈｉは、ハッシュ値群６０５，７０３の両方に含まれる。ハッシュ値ｈｔは、ハッシュ値群６０５には含まれない。したがって、エッジ２００は、論理ブロックｂ，ｊ，ｋ，ｈを１つに集約した物理ブロック（物理ブロック７０２ａ）を、サーバ１００に送信し、物理ブロックａ，ｃ，ｅ，ｇ，ｉをサーバ１００に送信しない。
【００７８】
このように、サーバ１００は、比較的小さなサイズの差分部分を１つにまとめる論物変換処理を実行することで、ハッシュ値の比較回数やデータの送信回数を低減させることができ、サーバ１００によるデータ収集の遅延の抑え、データ収集を効率化できる。
【００７９】
図１０は、論物変換テーブルの例を示す図である。
論物変換テーブルＴ１は、論物変換部１５０により生成され、記憶部１２０に格納される。論物変換テーブルＴ１の複製は、サーバ１００からエッジ２００に提供され、記憶部２２０に格納される。論物変換テーブルＴ１は、物理ブロックＩＤ、論理ブロックＩＤ、論理アドレス、物理アドレスおよびサイズの項目を含む。
【００８０】
物理ブロックＩＤの項目には、物理ブロックのＩＤが登録される。論理ブロックＩＤの項目には、論理ブロックのＩＤが登録される。論理アドレスの項目には、データ（論理ブロック群）における該当の論理ブロックの先頭位置を示す論理アドレスが登録される。物理アドレスの項目には、論物変換後のデータ（物理ブロック群）における該当の物理ブロックの先頭位置を示す物理アドレスが登録される。サイズの項目には、該当の論理ブロックのサイズが登録される。サイズの単位は、例えば、バイト（Bytes）である。
【００８１】
例えば、論物変換テーブルＴ１には、物理ブロックＩＤが「０」、論理ブロックＩＤが「ｂ」、論理アドレスが「０ｘａａａａｂｂｂｂ」、物理アドレスが「０ｘ００００００００」、サイズが「１６」というレコードが登録されている。このレコードは、物理ブロックＩＤ「０」の物理ブロックに、論理ブロックＩＤ「ｂ」の論理ブロック（論理ブロックｂ）が属し、論理ブロックｂの論理アドレスが「０ｘａａａａｂｂｂｂ」であり、論物変換後の物理アドレスが「０ｘ００００００００」であり、サイズが１６バイトであることを示す。
【００８２】
論物変換テーブルＴ１には、他のブロックに関しても、論理ブロックと物理ブロックとの対応関係を示すレコードが登録されている。論物変換テーブルＴ１の例によれば、論理ブロックｂ，ｊ，ｋ，ｈは、物理ブロックＩＤ「０」の物理ブロックに属する。論理ブロックａは、物理ブロックＩＤ「１」の物理ブロックに属する。論理ブロックｃは、物理ブロックＩＤ「２」の物理ブロックに属する。
【００８３】
なお、サーバ１００がエッジ２００からデータの収集を開始する直前では、物理ブロックＩＤや物理アドレスの項目の設定値は、論理ブロックＩＤ、論理アドレスの項目の設定値（初期値）と同じでよい。論理ブロックＩＤおよび論理アドレスの項目は、ブロック（論理ブロック）の区切り位置の情報に相当する。
【００８４】
次に、第２の実施の形態のサーバ１００およびエッジ２００の処理手順を説明する。エッジ３００，４００，…もエッジ２００と同様の手順を実行する。サーバ１００は、エッジ３００，４００，…に対しても、エッジ２００に対する処理と同様の手順を実行する。
【００８５】
図１１は、エッジ側データ送信処理の例（その１）を示すフローチャートである。
エッジ２００は、当初のブロックの区切り位置の情報を記憶部２２０に保持しているものとする。サーバ１００は、エッジ２００から最初のデータを受信した際、前回のデータがないので、当初のブロックの区切り位置の情報を基に当該最初のデータを論理ブロックに区切り、当該論理ブロック毎のハッシュ値を計算して、エッジ２００に送信する。図１１の手順は、サーバ１００がエッジ２００から最初のデータを受信した後、エッジ２００がサーバ１００から最初のデータにおける論理ブロック毎のハッシュ値を受信した際に実行開始される。
【００８６】
（Ｓ１０）前処理部２３０は、記憶部２２０に記憶された、今回の前処理対象の元データに対して前処理を実行し、前処理後データを生成する。
（Ｓ１１）ブロック分割部２４０は、記憶部２２０に記憶された論物変換テーブルのブロックの区切り位置の情報に基づいて、前処理後データに対する区切り位置を特定する。
【００８７】
（Ｓ１２）ブロック分割部２４０は、特定した区切り位置で、前処理後データをブロック単位に区切る。なお、当初、論物変換テーブルには、物理ブロックＩＤや物理アドレスとして論理ブロックＩＤや論理アドレスと同じ設定値が設定される。このため、論物変換部２５０は、論物変換を行わなくてよい。ただし、論物変換部２５０は、論物変換を行ってもよい。論物変換を行っても、論理ブロック群および論物変換後の物理ブロック群は同じになる。
【００８８】
（Ｓ１３）ハッシュ値生成部２６０は、ステップＳ１２で区切ったブロック単位でハッシュ値を計算し、サーバ１００から受信したハッシュ値と比較する。
（Ｓ１４）送信処理部２７０は、ハッシュ値が異なっているブロック（図１１の例では論理ブロック＝物理ブロック）をサーバ１００へ送信する。このとき、送信処理部２７０は、該当の論理ブロックの論理ブロックＩＤ（図１１の例では論理ブロックＩＤ＝物理ブロックＩＤ）もサーバ１００へ送信する。そして、エッジ２００は、上記のデータ送信処理を終了する。
【００８９】
図１２は、サーバ側データ要求送信処理の例を示すフローチャートである。
サーバ１００は、エッジ２００からブロックを受信すると下記の手順を開始する。
（Ｓ２０）ブロック更新部１４０は、エッジ２００から取得した前回のデータと今回のデータとに基づいて、ブロック単位更新処理を実行する。ブロック単位更新処理の詳細は後述される。
【００９０】
なお、ブロック更新部１４０は、論物変換テーブルとエッジ２００から受信した物理ブロックＩＤとに基づいて、前回のデータに対する差分部分のブロック位置を特定する。ブロック更新部１４０は、当該ブロック位置を今回取得したブロック（エッジ２００から今回取得したブロック）で置換することで、エッジ２００に関する今回のデータを得る。
【００９１】
（Ｓ２１）論物変換部１５０は、論物変換処理を実行する。論物変換部１５０は、論物変換処理により論物変換テーブルＴ１を生成する。論物変換処理の詳細は後述される。
（Ｓ２２）ハッシュ値生成部１６０は、物理ブロック毎のハッシュ値および論物変換テーブルＴ１をエッジ２００に送信する。そして、ハッシュ値生成部１６０は、データ要求送信処理を終了する。
【００９２】
ステップＳ２０で例示したように、サーバ１００は、ブロックの受信の際に、エッジ２００が保持する今回のデータにおける当該ブロックの位置を示す識別情報（例えば、物理ブロックＩＤまたは論理ブロックＩＤ）をエッジ２００から受信する。サーバ１００は、当該識別情報に基づいて、前回のデータの一部のブロックを今回受信したブロックに置換することで、今回のデータを取得する。
【００９３】
図１３は、ブロック単位更新処理の例を示すフローチャートである。
ブロック単位更新処理は、ステップＳ２１に相当する。
（Ｓ３０）ブロック更新部１４０は、エッジ２００から取得された前回のデータと今回のデータとを比較して差分部分（論理アドレス範囲）を取得する。
【００９４】
（Ｓ３１）ブロック更新部１４０は、各差分部分についてステップＳ３２、ステップＳ３２〜Ｓ３４、または、ステップＳ３２，Ｓ３３，Ｓ３５を繰り返し実行する。
（Ｓ３２）ブロック更新部１４０は、差分部分が、論物変換テーブルにおける現在のブロック単位と一致するか否かを判定する。一致する場合、ステップＳ３６に処理が進む。一致しない場合、ステップＳ３３に処理が進む。ここで、現在のブロック単位は、現在の論物変換テーブルに設定された論理アドレスとサイズとで示される論理アドレス範囲により表される。
【００９５】
（Ｓ３３）ブロック更新部１４０は、差分部分が論理ブロック内の一部であるか否かを判定する。差分部分が論理ブロック内の一部である場合、ステップＳ３４に処理が進む。差分部分が論理ブロック内の一部でない場合、ステップＳ３５に処理が進む。ステップＳ３３  Ｎｏの場合は、差分部分が２つの論理ブロックを跨ぐ場合に相当する。
【００９６】
（Ｓ３４）ブロック更新部１４０は、ブロック単位を差分部分に対応する範囲に縮小し、両隣のブロック長を拡大する。具体的には、図８（Ａ）で例示した通りである。そして、ステップＳ３６に処理が進む。
【００９７】
（Ｓ３５）ブロック更新部１４０は、差分部分を新たなブロック単位とする。この場合、例えば、隣接の（該当のブロックのうち、差分部分と異なる部分が隣接する方の）ブロック長が拡大される。具体的には、図８（Ｂ）で例示した通りである。そして、ステップＳ３６に処理が進む。
【００９８】
（Ｓ３６）ブロック更新部１４０は、ステップＳ３０で取得した全ての差分部分に対する処理が終わると、繰り返しを完了する。そして、ブロック更新部１４０は、ブロック単位更新処理を終了する。
【００９９】
図１４は、論物変換処理の例を示すフローチャートである。
（Ｓ４０）論物変換部１５０は、各差分部分の論理ブロックについてステップＳ４１またはステップＳ４１，Ｓ４２を繰り返し実行する。
【０１００】
（Ｓ４１）論物変換部１５０は、該当の論理ブロックのブロックサイズが閾値以下であるか否かを判定する。当該ブロックサイズが閾値以下の場合、ステップＳ４２に処理が進む。当該ブロックサイズが閾値よりも大きい場合、ステップＳ４３に処理が進む。ブロックサイズの閾値は、記憶部１２０などに予め設定される。ブロックサイズの閾値は、例えば、エッジ２００による送信対象のデータのサイズのうちの５〜１０％程度のサイズである。ただし、ブロックサイズの閾値としては、任意のサイズを設定可能である。
【０１０１】
（Ｓ４２）論物変換部１５０は、収集対象として該当の論理ブロックをマークする。例えば、論物変換部１５０は、収集対象の論理ブロックとして、当該論理ブロックの論理ブロックＩＤを記憶部１２０の論物変換テーブル以外の領域に記録する。または、論物変換部１５０は、論物変換テーブルにフラグの設定項目を設け、フラグの「Ｔｒｕｅ」（収集対象）および「ｆａｌｓｅ」（収集非対象）によりマークしてもよい。そして、ステップＳ４３に処理が進む。
【０１０２】
（Ｓ４３）論物変換部１５０は、差分部分の全ての論理ブロックに対する処理が終わると、繰り返しを完了し、ステップＳ４４に処理が進む。
（Ｓ４４）論物変換部１５０は、ステップＳ４２によりマークされた論理ブロックを物理アドレスの先頭に移動する。
【０１０３】
（Ｓ４５）論物変換部１５０は、移動した論理ブロック群を１つの新たな物理ブロックとする。
（Ｓ４６）論物変換部１５０は、マークされなかった論理ブロックが論理アドレスの順に、ステップＳ４５で作成した物理ブロックに後続するように物理ブロックＩＤおよび物理ブロックアドレスを設定した論物変換テーブルＴ１を生成する。論物変換部１５０は、生成した論物変換テーブルＴ１を記憶部１２０に出力する。そして、論物変換部１５０は、論物変換処理を終了する。
【０１０４】
このように、サーバ１００は、閾値よりも小さいサイズの差分部分がある場合、取得したデータを複数の論理ブロックに区切った後、複数の論理ブロックから、閾値よりも小さいサイズの差分部分（論理ブロック）を先頭に集約した１つのブロックを含む複数の物理ブロック（複数の他のブロック）を生成する。サーバ１００は、複数の物理ブロックに含まれるブロック毎のハッシュ値と、区切り位置の情報と、複数の論理ブロックから複数の物理ブロックへの変換に用いられる変換情報（論理アドレスと物理アドレスとの対応関係の情報）とをエッジ２００に送信する。
【０１０５】
図１５は、エッジ側データ送信処理の例（その２）を示すフローチャートである。
図１５の手順は、エッジ２００がサーバ１００から、ハッシュ値とともに今回受信した論物変換テーブルＴ１において、論理ブロックＩＤと物理ブロックＩＤとが異なる場合に実行される。
【０１０６】
（Ｓ５０）前処理部２３０は、記憶部２２０に記憶された、今回の前処理対象の元データに対して前処理を実行し、前処理後データを生成する。
（Ｓ５１）ブロック分割部２４０は、記憶部２２０に記憶された論物変換テーブルＴ１に基づいて、前処理後データに対する区切り位置を特定する。
【０１０７】
（Ｓ５２）ブロック分割部２４０は、特定した区切り位置で、前処理後データをブロック単位に区切る。これにより、前処理後データに対応する論理ブロック群が生成される。
（Ｓ５３）論物変換部２５０は、論物変換テーブルＴ１を用いて、ステップＳ５２で生成された論理ブロック群における各論理ブロックの論理アドレスを物理アドレスに変換する。
【０１０８】
（Ｓ５４）ハッシュ値生成部２６０は、論物変換テーブルＴ１で示される物理ブロック単位でハッシュ値を計算し、サーバ１００から受信したハッシュ値と比較する。
（Ｓ５５）送信処理部２７０は、ハッシュ値が異なっている物理ブロックをサーバ１００へ送信する。このとき、送信処理部２７０は、該当の物理ブロックの物理ブロックＩＤもサーバ１００へ送信する。そして、エッジ２００は、上記のデータ送信処理を終了する。
【０１０９】
サーバ１００は、論物変換テーブルＴ１を参照して、受信した物理ブロックの物理ブロックＩＤを１以上の論理ブロックＩＤに変換する。サーバ１００は、エッジ２００から前回取得した論理ブロック群の該当の論理ブロックＩＤの論理ブロックをエッジ２００から今回取得した（物理ブロックから変換された）論理ブロックに置換することで、エッジ２００に関する今回のデータを取得する。
【０１１０】
こうして、データの区切り位置を変更することにより、サーバ１００は、データの転送量を減らすことができる。
例えば、当初定められたブロックの区切り位置を変更しないことも考えられる。しかし、この場合、エッジは、ブロックの一部に差分がある場合でも当該ブロックの全体を送信することになり、データの転送量を十分に減らすことができない。
【０１１１】
そこで、サーバ１００は、エッジ２００から前回取得したデータと今回取得したデータとの比較に応じて、ブロックの区切り位置を動的に更新する。このため、ブロック内の一部に更新がある可能性が比較的高い場合に、当該更新された部分以外の重複したデータ転送を抑えられる。特に、更新がある可能性の高い比較的小さなブロックを物理的に集約してハッシュ値を求めることで、差分検出の効率を向上させることができる。サーバ１００によるデータ収集方法は、エッジにおいて、ある期間におけるデータ内の更新位置の変化が比較的小さい場合や、ある期間におけるデータ内の更新位置に変化がない場合に、転送量の低減の効果が高まる。
【０１１２】
また、各エッジが比較的低スペックである場合（例えば、エッジ側のメモリ容量が小さく、次回送信用のデータしか保持できないなど）や、基地局５１，５２と各エッジとの通信帯域が狭い場合でも、エッジからのデータ転送量を抑え、効率的にデータ収集を行える。
【０１１３】
なお、第１の実施の形態の情報処理は、処理部１２にプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、ＣＰＵ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１１３に記録できる。
【０１１４】
例えば、プログラムを記録した記録媒体１１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１１５】
１０  データ収集装置
１１  記憶部
１２  処理部
２０  装置
Ｄ１，Ｄ２，Ｄ３  データ
Ｇ１，Ｇ２  ハッシュ値群
【図１】
2020112966.tif 000003
【図２】
2020112966.tif 000004
【図３】
2020112966.tif 000005
【図４】
2020112966.tif 000006
【図５】
2020112966.tif 000007
【図６】
2020112966.tif 000008
【図７】
2020112966.tif 000009
【図８】
2020112966.tif 000010
【図９】
2020112966.tif 000011
【図１０】
2020112966.tif 000012
【図１１】
2020112966.tif 000013
【図１２】
2020112966.tif 000014
【図１３】
2020112966.tif 000015
【図１４】
2020112966.tif 000016
【図１５】
2020112966.tif 000017