JP4907380B2 - データ生成方法、データ復元方法、データ生成装置およびデータ復元装置 - Google Patents

データ生成方法、データ復元方法、データ生成装置およびデータ復元装置 Download PDF

Info

Publication number
JP4907380B2
JP4907380B2 JP2007041211A JP2007041211A JP4907380B2 JP 4907380 B2 JP4907380 B2 JP 4907380B2 JP 2007041211 A JP2007041211 A JP 2007041211A JP 2007041211 A JP2007041211 A JP 2007041211A JP 4907380 B2 JP4907380 B2 JP 4907380B2
Authority
JP
Japan
Prior art keywords
data string
data
old
mark area
difference
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007041211A
Other languages
English (en)
Other versions
JP2008204287A (ja
Inventor
雅之 筬島
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Access Co Ltd
Original Assignee
Access Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Access Co Ltd filed Critical Access Co Ltd
Priority to JP2007041211A priority Critical patent/JP4907380B2/ja
Publication of JP2008204287A publication Critical patent/JP2008204287A/ja
Application granted granted Critical
Publication of JP4907380B2 publication Critical patent/JP4907380B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

この発明は、異なるデータ間における差分データ生成および差分データを用いた新データの復元に関連し、特に、通信回線を介してソフトウェアをアップデートするための技術、に関する。
携帯電話のファームウェア(Firmware)は、複雑化・高機能化・大規模化しつつある。製品リリース前にファームウェアの不具合を完全に除去するのは難しくなってきており、製品リリース後でもファームウェアを適宜修正できる仕組みが必要である。
近年、無線通信回線を介して携帯電話のファームウェアをアップデートするための技術として、FOTA(Firmware Over The Air)が注目されている。FOTAは、ファームウェアの不具合を修正するだけでなく、ファームウェアの機能を拡張する場面でも応用できる。以下、携帯電話などの電子機器に導入されている更新前データのことを「旧データ」、修正済みファームウェアのような更新後データのことを「新データ」とよぶことにする。
旧データから新データへの移行に際して、新データ全体をダウンロードするのは得策ではない。特に、通信速度が遅くデータ再送が発生しやすい無線通信回線を経由する場合、ダウンロード対象となるデータのサイズをなるべく小さくしたい。下記に挙げた特許文献1では、旧データと新データの差分を示す「差分データ」をダウンロード対象としている。
米国特許第7069311号(明細書、特に第4欄)
FOTAの実効性にとっては、この差分データのサイズをいかに小さくできるかが重要である。本発明の主たる目的は、クライアント端末において旧データから新データへ移行するための差分データのサイズを小さくするための技術、を提供することである。
本発明のある態様は、旧データ列と新データ列との差分データ列を生成する方法に関する。
このデータ生成方法においては、新データ列に検証対象位置を設定し、検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を旧データ列から検索し、未検証データ列の少なくとも一部に対応する差分単位データ列を差分データ列の一部として順次生成する。また、旧データ列の一部に旧目印領域を設定する。
ここで、差分単位データ列の生成においては、
1.同一データ列が旧データ列から検出されなければ、未検証データ列の少なくとも一部に対応する差分単位データ列として、未検証データ列の少なくとも一部を記録する。好ましくは、未検証データ列の先頭のデータを記録してもよい。検証対象位置を所定分だけ進める。
2.同一データ列が旧目印領域内から検出されたときには、未検証データ列の少なくとも一部に対応する差分単位データ列として、同一データ列の旧目印領域内における位置と同一データ列の長さを記録する。検証対象位置を同一データ列の長さ分だけ進める。
3.同一データ列が旧目印領域外から検出されたときには、同一データ列を含むように旧目印領域を移動させ、未検証データ列の少なくとも一部に対応する差分単位データ列として、旧目印領域の移動後の位置と同一データ列の長さを記録する。このときにも、検証対象位置を同一データ列の長さ分だけ進める。
新データ列において未検証データ列が残っているときには、上記処理を再実行する。
本発明のある態様は、旧データ列と新データ列との差分データ列により、旧データ列に基づいて新データ列を復元する方法に関する。
このデータ復元方法においては、旧データ列の一部に旧目印領域を設定し、新データ列のうち、差分単位データ列に対応する部分の新データ列を旧データ列に基づいて復元する。
新データ列の復元においては、
1.差分データ列から所定単位の差分データ列を読み出す。
2.読み出した差分データ列が新データ列のデータそのものを示すときには、前記差分データ列に含まれるデータを新データ列の一部として復元する。
3.読み出した差分データ列が位置と長さを示すときには、旧目印領域内における「位置」から「長さ」分のデータ列を新データ列の一部として復元する。
4.読み出した差分データ列が旧目印領域の移動位置を示すときには、旧目印領域を指定位置まで移動させる。
差分データ列において新データ列の復元をしていないデータ範囲が存在するときには、新データ列の復元を再実行することにより、旧データ列から新データ列を復元する。
なお、以上の構成要素の任意の組合せ、本発明を装置、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。
本発明によれば、コンパクトな差分データを作成できると共に、復元時の処理が簡易となる。
図1は、ネットワークシステム101の全体構成図である。
ネットワークシステム101において、サーバ装置100とクライアント端末200aはインターネット300を介して接続される。また、クライアント端末200bは、基地局302を介してインターネット300と接続されている。クライアント端末200aやクライアント端末200b(以下、まとめていうときには、単に「クライアント端末200」とよぶ)は、携帯電話、PDA(Personal Digital Assistant)、ラップトップ・コンピュータなどのモバイル機器であってもよいし、デスクトップ・コンピュータ、セットトップ・ボックスなどであってもよい。
クライアント端末200には「旧データ」が導入されている。旧データは、ファームウェアやアプリケーション、OS(Operating System)のようなプログラムデータに限らず、音声データや画像データであってもよい。サーバ装置100の主目的は、クライアント端末200の旧データを新データに変更することである。
図2は、アップデート処理の概要を説明するための模式図である。
サーバ装置100は、旧データと新データの両方を保持している。一方、クライアント端末200は旧データのみを保持している。以下、バイナリデータの集合という意味で、旧データ、新データ、差分データをそれぞれ「旧データ列」、「新データ列」、「差分データ列」と表記することにする。
サーバ装置100は、旧データ列と新データ列を入力として後述の「差分処理」を実行することにより、差分データ列を生成する。クライアント端末200は、サーバ装置100からこの差分データ列をダウンロードする。クライアント端末200は、旧データ列と差分データ列を入力として後述の「復元処理」を実行することにより、新データ列を復元する。差分データ列のサイズは、通常、新データ列のサイズや旧データ列のサイズに比べると格段に小さい。このような処理モデルによれば、通信負荷を抑制しつつ、クライアント端末200のファームウェア等を適宜・一斉に更新できる。
より具体的な例として、旧データ列はアプリケーションAのバージョン1.0(以下、「A(1.0)」と表記する)、新データ列がアプリケーションAのバージョン1.1(以下、「A(1.1)」)とする。サーバ装置100はA(1.1)がリリースされたときに、A(1.0)とA(1.1)の差分データ列(以下、「D(1.0→1.1)」と表記する)を生成する。更に、A(1.2)がリリースされると、D(1.0→1.2)、D(1.1→1.2)を生成する。サーバ装置100はアプリケーションAの新バージョンがリリースされるごとに差分データ列を生成する。
最新バージョンがA(1.2)であるときに、クライアント端末200aにはA(1.0)が導入されているとする。このときには、クライアント端末200aは、差分データ列D(1.0→1.2)をダウンロードすれば、既に保持しているA(1.0)からA(1.2)を復元できることになる。
サーバ装置100は各クライアント端末200にクエリ(Query)をブロードキャストしてもよい。クエリを受信した各クライアント端末200は、導入されているアプリケーションAのバージョンをサーバ装置100に通知する。最新バージョンがA(1.2)であるときには、A(1.0)を導入されているクライアント端末200には差分データ列D(1.0→1.2)、A(1.1)を導入されているクライアント端末200には差分データ列D(1.1→1.2)を送信すれば、すべてのクライアント端末200の旧データ列を適切かつ一斉にA(1.2)へとアップデートできる。このような処理モデルが有効に機能するためには、差分データ列の取り扱い方について、サーバ装置100とクライアント端末200が合意していることが前提となる。
新データ列は、旧データ列のアップデート版であってもよいが、必ずしもこれに限定する必要はなく、新データ列と旧データ列は本質的に異なるコンテンツであってもよい。
差分処理および復元処理については2つの実施例にわけて説明する。第2実施例は、第1実施例に対する改良例である。そのため、まず、第1実施例について図3から図16に関連して詳述したあとに、第2実施例について図17から図21に関連して説明する。なお、「本実施例」というときには「第1実施例」と「第2実施例」の両方を意味するものとする。
[第1実施例]
サーバ装置100と差分処理について図3から図11に関連して説明する。そのあと、クライアント端末200と復元処理について図12から図16に関連して説明する。
図3は、第1実施例における差分処理の概要を説明するための模式図である。
サーバ装置100は、旧データ列に「旧目印領域(Ro)」とよばれる所定幅以内の領域を設定する。「旧目印領域」は、所定長を上限とする大きさの領域であって、旧データ列における「位置」と「データ幅」のセットとして表現される。本実施例における旧目印領域のサイズは65535バイトである。初期設定時においては、旧目印領域Roの始点位置と旧データ列の始点位置は一致する。旧目印領域Roの始点位置とは、同図においては、旧目印領域Roに対応するデータ範囲のうち最も左に位置するバイトデータの位置Swoである。また、旧データ列の始点位置とは、同図においては、旧データ列の先頭バイトデータの位置Soである。いいかえれば、旧目印領域Roの始点位置は、旧データ列の先頭バイトに初期設定される。差分処理中に旧目印領域Roは左右に移動するがそのサイズ自体は変化しない。
新データ列には、「検証対象位置(P)」とよばれるポインタが設定される。初期設定時における検証対象位置Pは、新データ列の始点位置Snに初期設定される。サーバ装置100は、この検証対象位置Pから終点位置までの検証したいデータ範囲(以下、「未検証データ列」とよぶ)の少なくとも一部と同一内容のデータ列(以下、「同一データ列」とよぶ)が旧データ列内に存在するかを判定する。ここで、未検証データ列のうち、同一データ列に対応する範囲、すなわち、同一データが見つかった範囲を、特に、「部分データ列」とよぶことにする。未検証データ列のサイズは固定長であってもよいが、本実施例における未検証データ列は検証対象位置Pから続く検証対象位置Pを始点位置とした可変長である。以下、未検証データ列と同じ内容の同一データ列を検索する処理を「同一検索」とよぶことにする。
可変長の未検証データ列に対して同一検索を実行するので、同一データ列も可変長のデータ列となる。ただし、本実施例における同一データ列のサイズには、所定の下限値(以下、「検証下限値」とよぶ)が設定されている。本実施例においては、検証下限値=3バイトである。以下においては、特に断らない限り、「同一データ列」とは検証下限値以上の長さのデータ列であるとして説明する。同一検索の結果は以下の3通りに分類できる。
(a)(検証下限値以上の)同一データ列が存在しない。
(b)(検証下限値以上の)同一データ列が存在する。
(b−1).同一データ列の始点位置が旧目印領域内にある。
(b−2).同一データ列の始点位置が旧目印領域外にある。
同一検索の結果に応じて、未検証データ列の全部または一部は「差分単位データ列」に変換される。サーバ装置100は、検証対象位置Pを動かしながら同一検索を実行し、それにあわせて差分単位データ列を次々と生成する。未検証データ列の全てに範囲について同一検索を行った結果として生成される差分単位データ列の集合が差分データ列となる。以下、(a)を「同一なし」、(b)を「同一あり」、(b−1)を「目印領域内検出」、(b−2)を「目印領域外検出」とよぶことにする。
アルゴリズムの詳細については図5以降にて説明するが、その前にサーバ装置100の構成を図4を参照しつつ説明する。
図4は、サーバ装置100の機能ブロック図である。
ここに示す各ブロックは、ハードウェア的には、コンピュータのCPUをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
後の図12に示すクライアント端末200の機能ブロック図についても同様である。
サーバ装置100は、通信部110、データ処理部120、データ保持部160を含む。
通信部110は、クライアント端末200との通信処理を担当する。データ処理部120は、通信部110から取得されたデータを元にして各種のデータ処理を実行する。データ処理部120は、通信部110とデータ保持部160の間のインタフェースの役割も果たす。データ保持部160は、旧データ列や新データ列等の各種データを格納する。
通信部110は、データ取得部112と差分送信部114を含む。データ取得部112は、新データ列を外部装置から受信したり、クエリの発行やクエリに対する応答を受信する。差分送信部114は、差分処理により生成された差分データ列をクライアント端末200に送信する。
データ保持部160は、旧データ保持部162、新データ保持部164および差分データ保持部166を含む。旧データ保持部162は旧データ列を保持する。新データ保持部164は新データ列を保持する。差分データ保持部166は差分データ列を保持する。
データ処理部120は、目印領域処理部130、差分処理部140およびハッシュ処理部152を保持する。
目印領域処理部130は、旧目印領域Ro、また、第2実施例に関連して後述する「新目印領域(Rn)」を制御する。「新目印領域」は、所定長を上限とする大きさの領域であって、新データ列における位置とデータ幅として定義されてもよい。目印領域処理部130は、各目印領域を移動させる移動設定部132と、新目印領域と旧目印領域のいずれかを「現目印領域」として設定するアクティブ設定部138を含む。「現目印領域」についても第2実施例に関連して後述する。移動設定部132は、旧目印領域を移動させる旧目印領域設定部134と新目印領域を移動させる新目印領域設定部136を含む。
差分処理部140は、旧データ列と新データ列から差分データ列を生成する。差分処理部140は、検証位置特定部142、同一検索部144、差分データ生成部146およびデータサイズ率算出部150を含む。検証位置特定部142は、新データ列に検証対象位置Pを設定する。同一検索部144は同一検索を実行する。差分データ生成部146は、未検証データ列の少なくとも一部から差分単位データ列を生成し、最終的に差分データ列全体を生成する。差分データ生成部146は、対象選択部149とエンコード部148を含む。対象選択部149は、後述の符号化データ決定処理の実行に際して、1以上の同一データ列の中から差分単位データ列を生成するための同一データ列を選択する。詳しくは、図11に関連して後述する。エンコード部148は、差分単位データ列を符号化する。符号化についても後述する。データサイズ率算出部150は同一データ列とその同一データ列に対応する差分単位データ列を比較して、その「データサイズ率」を算出する。データサイズ率とは、同一データ列のサイズに対する差分単位データ列のサイズの比率を示すが、具体的には後述する。
なお、目印領域処理部130による目印領域に関する処理と、差分処理部140による差分データ生成に関する処理とは、単一のコンピュータプログラムによって実現されてもよい。
図5は、第1実施例における差分処理の過程を示すフローチャートである。
まず、旧目印領域設定部134は、旧データ列の先頭バイトが旧目印領域Roの始点位置となるように、旧目印領域Roを初期設定する(S10)。検証位置特定部142は、新データ列の先頭バイトに検証対象位置Pを初期設定する(S12)。同一検索部144は、検証対象位置Pの1バイト分のデータ列と同じ内容のデータ列を、旧データ列全体を対象として同一検索する(S16)。初期状態においては、未検証データ列の先頭1バイトと同一内容のデータ列を検索することになる。検出されなければ(S18のN)、差分データ生成部146は検索対象位置Pの未検証データ列の1バイト分を差分単位データ列として取り出して符号化し(S30)、検証対象位置Pを1バイトだけ進める(S32)。処理はS14に戻る。新データ列全体について検証が完了すると(S14のY)、差分データ列の終端を示す「終端マーク(EOF)」を挿入する(S34)。新データ列に未検証のデータ範囲が存在するときには(S14のN)、移動後の検証対象位置Pに基づいて、S16以降の処理を再実行する。
同一内容のデータ列が検出されると(S18のY)、検証位置特定部142は、未検証データ列の検証対象位置Pから長さを1バイトずつ延長しながら、一致しなくなるまで同一部分を検索する。そして、同一データ列が検証下限値以上の長さとなるか判定する(S20)。そして検証下限値以上の長さの同一データ列が検出されなければ(S20のN)、処理はS30に移行する。このときにも、差分データ生成部146は検証対象位置Pの新データ列の1バイト分を差分単位データ列として取り出して符号化し(S30)、検証対象位置Pを1バイトだけ進める(S32)。
すなわち、上記(a)の「同一なし」に該当する場合には(S18のN、S20のN)、差分データ生成部146は検索対象位置Pの新データ列の1バイト分を差分単位データ列として取り出して符号化し(S30)、検証対象位置Pを1バイトだけ進める(S32)。「同一なし」時の処理内容については、次の図6に関連して更に詳述する。
検証下限値以上の長さの同一データ列が検出されるごとに少なくともその位置と一致長とを保存しておき、次に見つかったときには保存されているものとどちらが長いかを比較する。最終的に最長一致する同一データ列を特定する。本実施例においては、符号化データ決定処理(S22)により同一データ列を選択しているが、この符号化データ決定処理を実行しなくても、最長一致を判断基準として同一データ列を選択しても差分処理を実現することは可能である。説明を簡単にするため、以下においては、特に断らない限り「未検証データ列について同一検索を実行し、最終的に最長一致する同一データ列を特定する。」という前提にて説明する。符号化データ決定処理(S22)も、最長一致する同一データ列を選ぶという考え方を基本原則としているが、差分データ列全体としてのサイズを小さくするという観点からより合理的に同一データ列を選択するための工夫が施されている。符号化データ決定処理(S22)の詳細については図11に関連して後述する。
同一データ列が特定されると、差分データ生成部146は、選択された同一データ列の始点位置が旧目印領域Ro内にあるか否かを判定する(S24)。同一データ列の始点位置が旧目印領域Ro内にあれば(S24のY)、すなわち、上記(b−1)の「目印領域内検出」であれば、差分データ生成部146は、同一データ列から図7に関連して説明する方法にて差分単位データ列を生成する(S28)。このときの同一データ列のサイズが(n+1)バイトであれば、検証開始位置はP+n+1に移動する(S32)。本実施例の場合、検証下限値=3バイトなので(n+1)≧3である。
同一データ列の開始位置が旧目印領域Ro外であれば(S24のN)、すなわち、上記(b−2)の「目印領域外検出」であれば、旧目印領域設定部134は旧目印領域Ro内に同一データ列の始点位置が含まれるように旧目印領域Roを移動させてから(S26)、同一データ列から図8に関連して説明する方法にて差分単位データ列を生成する(S28)。同一データ列のサイズが(n+1)バイトであれば、検証開始位置はP+n+1に移動する(S32)。
こうして、新データ列の検証対象位置Pを少しずつ移動させながら差分単位データ列の集合が生成されることになる。S28やS30にて差分単位データ列を順次生成していき、最終的に、全体としての差分データ列を生成する。実際には、同一データ列から差分単位データ列を生成する処理S100は更に複雑であるが、これについては図10に関連して説明する。差分処理の基本的な仕組みは以上の通りである。
図6は、(a)「同一なし」時における差分単位データ列の生成方法を示す模式図である。
同一検索部144は、検証対象位置Pにある1バイトの部分データ列「n0」と同じデータ列を旧データ列から検索する。検出できれば、検証対象位置P〜P+1の2バイト分の部分データ列「n0、n1」と一致するか判定する。こうして1バイトずつ延長しながら同一データ列の一致する長さを検証する。同図の場合、同一検索の結果が「同一なし」である場合を示している。すなわち、検証対象位置P〜P+2までの3バイト分のデータ列について同一データ列が検出できなかった場合を示している。
同一検索の結果が「同一なし」となると、差分データ生成部146は、新データ列の検証対象位置Pにある「n0」を取り出して差分単位データ列として記録する(S30)。検証位置特定部142は、新たな検証対象位置をP+1に設定変更する(S32)。同一検索部144は、新たな検証対象位置P+1について同一検索を実行する。ここでも同一検索の結果が「同一なし」となると、検証対象位置P+1にある「n1」が差分単位データ列として取り出して符号化され(S30)、新たな検証対象位置はP+2となる(S32)。このように、同一検索の結果が「同一なし」となるときには、検証対象位置Pに位置する1バイトのデータが差分データ列の一部を形成する差分単位データ列として記録される。
図7は、(b−1)「目印領域内検出時」における差分単位データ列の生成方法を示す模式図である。
同図の場合、まず、検証下限値以上一致する同一データ列「m0、m1、m2、m3、m4」が旧目印領域Ro内を始点位置として検出されている。このときの旧目印領域Ro内における始点位置と長さを保存しておく。更に、同一検索を続行すると、検証下限値以上一致する同一データ列「m0、m1、m2」が旧目印領域Ro外を始点位置として検出されている。同一データ列「m0、m1、m2、m3、m4」の方が、同一データ列「m0、m1、m2」より長いため、同一検索の結果は「(b−1)目印領域内検出」となる。
n0=m0、n1=m1、・・・、n4=m4であるが、新データ列における未検証データ列の開始位置と旧データ列における同一データ列の始点位置は必ずしも対応関係にはない。同一検索においてはあくまでも「データの並びが一致するか否か」だけが判断の対象となる。
差分データ生成部146は、同一データ列の長さ(以下、「同一サイズ」とよぶ)と同一データ列の始点位置の旧目印領域Ro内における位置(以下、「目印領域内位置」とよぶ)を特定する。本実施例における目印領域内位置は、一例として、旧目印領域R0の先頭位置からの距離(バイト数)により示されるものとして説明する。旧目印領域Roの先頭バイトの位置を「0」とすると、同図における同一データ列の目印領域内位置は「1」となる。また、同一サイズは5バイトである。したがって、差分データ生成部146は、未検証データ列「n0〜n4」を符号化して、差分単位データ列(5,1)に変換する。いいかえれば、n0〜n4の5バイトのデータ列は、(5,1)という2つの数値で表現されることになる。同一サイズが大きいほど、差分データ列のサイズを効率的に小さくできる。
図8は、(b−2)「目印領域外検出時」における差分単位データ列の生成方法を示す模式図である。
同図においては、5バイトのデータ列「n0〜n4」と最長一致するデータ列「m0〜m4」が同一データ列として検出されている。同一データ列「m0〜m4」の始点位置、すなわち、「m0」の位置は旧目印領域Roの外にある。したがって、同一検索の結果は、「(b−2)目印領域外検出」である。
目印領域外検出時においては、旧目印領域設定部134は、旧目印領域Roが同一データ列の始点位置を含むように旧目印領域Roを移動させる。旧目印領域の移動後の位置を「移動位置Mr」と表記する。旧目印領域Roの移動方向は限定されない。右にも左にも移動可能である。この旧目印領域の移動後の位置は、旧データ列の先頭バイトから数えて何バイト目か、あるいは、旧データ列の最終バイトから数えて何バイト目かにより示される。本実施例においては、旧データ列の先頭バイトから数えた位置を「Mr」と表記することにする。
差分データ生成部146は、旧目印領域Roの移動を示すMと、移動位置Mr、移動後の旧目印領域Ro’についての目印領域内位置、同一サイズを特定する。同図の場合、(領域移動を示すマーク(以下、「移動マーク」とよぶ),移動位置)(同一サイズ,目印領域内位置)=(M,Mr)(5,0)となる。本実施例においては、目印領域外検出時においては、旧目印領域Ro’の始点位置が同一データ列の始点位置と一致するように、旧目印領域Roを移動させる。そのため、目印領域内位置は必ず「0」となる。これにより復元時の処理が容易となる。別例として、目印領域内位置「0」を省略するとしてもよい。この場合、n0〜n4の5バイトの未検証データ列は(M,Mr)(5)という数値で表現されることになる。目印領域外検出においても、同一データ列が長いほど、差分データ列のサイズを効率的に小さくできることになる。
本実施例のサーバ装置100は、旧目印領域Ro内だけではなく旧データ列全体を対象として同一検索を実行する。このため同一データ列が検出される可能性が高いアルゴリズムとなっている。本実施例では、新データ列の検証対象位置Pが移動したからといって旧目印領域が移動するとは限らない。(b−2)の目印領域外検出により旧目印領域Roを移動させるときには、領域移動を意味する移動マークMと移動位置Mrが差分データ列の一部として明示的に記録されることになる。差分処理において最長一致する同一データ列をカバーできるように旧目印領域Roの位置を自由に動かす形式となっている。こうすることで、差分処理や複合処理の処理速度を速めることと、差分データのサイズを小さくすることとを好適に実現することを目的としている。
本実施例における旧目印領域Roのサイズは65535バイトという固定長となっている。このため、目印領域内検出、目印領域外検出のいずれの場合においても目印領域内位置nの範囲を検証下限値3〜旧目印領域Roのサイズ65535の範囲内に納めることができる。更に、同一データ列に検証上限値Lmを設定することにより、同一サイズLの範囲を狭めてもよい。検証上限値Lmについては図9に関連して説明する。
差分単位データ列において、目印領域内位置nや同一サイズL、移動位置Mr等を数値として記録してもよいが、これらのデータを符号化することにより差分データ列をいっそう小さくできる。たとえば、検証上限値Lm=645とすると、同一サイズLは3〜645の範囲の数値となる。エンコード部148は、所定の符号変換表に基づいて、同一サイズLを所定サイズの符号に変換する。移動マークMや、目印領域の移動後位置を示すMrは特殊コードにより識別される。
検証下限値を設けなければ、同一データ列の検出率は高くなる。しかし、1バイト程度の部分データ列を差分単位データ列に変換すると、かえって冗長となってしまう。検証下限値を設けることにより、このような冗長な変換処理が発生しないように制御できる。以下、(b)の「同一あり」により記録される未検証データ列を目印領域内位置や同一サイズ等に変換したデータのことを「変換データ」とよび、(a)の「同一なし」により新データ列に含まれている文字そのものを符号化したデータ「非変換データ」と呼んで区別する。復元側のクライアント端末200は、差分単位データ列のデータを復号するとき、それが文字そのものを符号化した「非変換データ」であるか目的領域内位置等から符号化された「変換データ」であるかを識別できる。
更に、本実施例においては、ハッシュ・アルゴリズムを利用することにより、差分処理を高速化している。ハッシュ処理部152は、旧データ列の第0バイトから3バイト分、第1バイトから3バイト分、・・・のようにデータ列の3バイト単位の所定のハッシュ関数によりハッシュ値を生成する。旧データ保持部162は、旧データ列自体に加えて旧データ列のハッシュ値列も保持する。
ハッシュ処理部152は、新データ列の検証対象位置Pから3バイト分のデータ列について、上記ハッシュ関数によりハッシュ値を生成する。同一検索部144は、旧データ列のハッシュ値列を対象として未検証データ列のハッシュ値を検索することにより、同一データ列の位置を検索する。本発明者の検証によると、このような処理方法によれば、同一データ列の検索速度を40倍から50倍向上させることができる。
ただし、実装においては、ハッシュ値による検索により同一データ列候補の位置を特定したあとは、旧データ列における候補位置のデータそのものを検証することにより最終的に同一データ列を特定している。たとえば、ハッシュ関数によっては、「abc」というデータ列と「bac」というデータ列が同一のハッシュ値を生成してしまう可能性がある。そこで、図5のS16からS20においては、まず、ハッシュ値に基づいて同一データ列の存在する可能性のある位置を特定した上で、1バイトずつ検証することにより、高速性と正確性を両立させている。
図9は、同一データ列のサイズが検証上限値Lmに達するときの処理内容を示す模式図である。
検証上限値Lmを設けることにより、同一サイズnの取りうる範囲を狭めることができる。特に、差分単位データ列を符号化する上で検証上限値Lmの設定は有効である。実装における検証上限値Lmは645バイトであるが、ここでは説明を簡単にするためにLm=7バイトであるとする。同図においては、12バイトの部分データ列「n0〜n11」とデータ列「m0〜m11」が最長一致し、その長さが12バイトであるとしても、検証上限値Lm=7バイトなので、7バイトの部分データ列「n0〜n6」について7バイトの同一データ列「m0〜m6」が検出される。
部分データ列「n0〜n6」を差分単位データ列に変換すると(同一サイズL,目印領域内位置n)=(Lm,2)となる。旧目印領域設定部134は、同一サイズL=Lmとなるときには、同一データ列「m0〜m6」の次の「m7」が旧目印領域Roの始点位置となるように旧目印領域Roを移動させる。検証対象位置は、P+7となる。
次の部分データ列「n7〜n11」について最長一致する同一データ列「m7〜m11」が検出される。部分データ列「n7〜n11」を差分単位データ列に変換すると(L,n)=(5,0)となる。このような場合、移動後の旧目印領域Ro’の始点位置と同一データ列「m7〜m11」の始点位置は一致するので、n=0となっている。そのため、(L,n)=(5,0)のうちn=0は省略してもよい。同一サイズが検証上限値Lmとなり、旧目印領域Roが移動しても、差分単位データ列には旧目印領域Roの移動位置Mrのようなデータや移動マークMが明示的に記録されない点は重要である。「Lm」というデータが、「同一サイズが検証上限値Lmであって、旧目印領域Roを移動させる」という2つの情報を意味するためである。
このように、差分処理において旧目印領域Roが移動する契機となるのは、
(A)(b−2)の目印領域外検出が発生したとき(以下、この場合の目印領域の移動のことを「調整移動」とよぶ)。
(B)同一サイズL=検証上限値Lmのとき(以下、この場合の目印領域の移動のことを「上限移動」とよぶ)。
の2種類である。調整移動のときには、差分単位データ列には目印領域の移動マークMと移動位置Mrが明示的に記録されるが、上限移動のときにはLmが暗黙的に目印領域の移動量を示すことになる。
図10は、図5のS100における処理内容を詳細に示すフローチャートである。
同図は、図6〜図7に関連して説明した内容を踏まえて、図5のS100の処理内容を詳細に示す。(b−1)の目印領域内検出のときには(S102のY)、差分データ生成部146は同一サイズLが検証上限値Lmとなるか判定する(S104)。同一サイズL=Lmであれば(S104のY)、差分データ生成部146は部分データ列から差分単位データ列(Lm,n)を生成する(S106)。nは、旧目印領域Roにおける目印領域内位置を示す。より正確には、エンコード部148は、(Lm,n)をそれぞれ符号化する。旧目印領域設定部134は旧目印領域Roを上限移動させる(S106)。
同一サイズL<Lmであれば(S104のN)、差分データ生成部146は部分データ列から差分データ列(L,n)を生成する(S110)。このときには、旧目印領域Roは上限移動しない。
(b−2)の目印領域外検出のときには(S102のN)、旧目印領域設定部134は図8に示した方法により旧目印領域Roを調整移動させる(S112)。同一サイズL=Lmであれば(S114のY)、差分データ生成部146は、部分データ列を差分データ列(M,Mr)(Lm,0)に変換する(S116)。旧目印領域設定部134は旧目印領域Roを更に上限移動させる(S118)。
同一サイズL<Lmであれば(S114のN)、差分データ生成部146は未検証データ列を差分単位データ列(M,Mr)(L,0)に変換する(S120)。このときには、旧目印領域Roは上限移動しない。
以上のように、サーバ装置100は、旧データ列に旧目印領域Roを設定し、新データ列の検証対象位置Pを動かしながら順次可変長の未検証データ列に対して同一検索を実行し、差分単位データ列を生成する。そして、差分単位データ列を連結することにより、差分データ列全体を生成する。同一検索の処理結果に応じて、旧目印領域Roの位置が移動する。
長い同一データ列が多く検出されるほど差分データ列を小さくできる。しかし、符号化処理等の過程において、必ずしも同一サイズが大きければ差分データ列を小さくできるとは限らない。たとえば、目印領域外検出の場合調整移動が発生するが、移動マークMと移動位置Mrが必要となり、特に移動位置Mrが大きな値となる可能性がある。そのため、旧目印領域外において大きな同一データ列を検出できても、移動位置Mrが大きい分だけ差分データ列のサイズは大きくなってしまうかもしれない。
そこで、サーバ装置100は、未検証データ列と差分単位データ列を比較したときのデータサイズ率まで考慮して差分処理を実行する。このための処理が、図5で触れた「符号化データ決定処理」である。
図11は、第1の実施例における符号化データ決定処理の処理内容を示す模式図である。
符号化データ決定処理においても、旧データ列全体において可変長の未検証データ列と最長一致する同一データ列を検出することが基本原則である。ただし、符号化データ決定処理では、旧目印領域Ro内と旧目印領域外のそれぞれから最長一致する同一データ列を検出する。本実施例では、更に、旧データ列の範囲を3つに分けている。すなわち、旧目印領域Roよりも前方のデータ範囲A、旧目印領域Ro内のデータ範囲B、旧目印領域Roよりも後方のデータ範囲Cの3つである。このときにも、ハッシュ値に基づいて、同一検索部144は各データ範囲から同一データ列の存在する可能性がある候補位置を検索する。そして、旧データ列における各候補位置のデータ列を検証することにより、同一検索部144は、データ範囲A、B、Cのそれぞれに始点位置のある同一データ列を検出する。各データ範囲から検出される同一データ列は、各データ範囲において最長一致する同一データ列である。同図の場合、検証開始位置Pからの部分データ列として、部分データ列N1に対して同一データ列M1、部分データ列N2に対して同一データ列M2、部分データ列N3に対して同一データ列M3をそれぞれ検出する。部分データ列N3のサイズは、部分データ列N2や部分データ列N1のサイズよりも大きい。
データサイズ率算出部150は、こうして検出された3種類の同一データ列についてのデータサイズ率を計算する。本実施例においては、
データサイズ率=(差分単位データ列のサイズ)/(同一データ列のサイズ)
と定義する。データサイズ率が小さいほど、同一データ列(あるいは、同一データ列に対応する部分データ列)のサイズに比べて差分単位データ列のサイズが小さくなっていることになる。すなわち、効率よく差分単位データ列のサイズを小さくできていることになる。データサイズ率算出部150は、まず、部分データ列N1から同一データ列M1について差分単位データ列を試験的に生成し、部分データ列N1についてのデータサイズ率を算出する。同様にして、部分データ列N2と同一データ列M2、部分データ列N3と同一データ列M3についてもデータサイズ率を計算する。対象選択部149は、3つの同一データ列のうちもっともデータサイズ率が小さい同一データ列を選択する。差分データ生成部146は、選択された同一データ列に基づいて差分単位データ列を生成する。データサイズ率を考慮せず、最長一致する同一データ列を選ぶとすれば部分データ列N3と同一データ列M3から差分単位データ列が生成されることになる。これに対して符号化データ決定処理によりデータサイズ率まで考慮すると、部分データ列N1や部分データ列N2について差分単位データ列が生成される可能性もある。「部分データ列と最長一致する同一データ列」という観点だけではなく、「実際に効率的にデータサイズを小さくできる同一データ列」という観点からも差分生成処理を実行できるため、差分データ列のサイズを合理的に縮小できる。なお、ここでは、旧データ列の3つの範囲からそれぞれ最長一致する同一データ列を検索するとしているが、旧目印領域R0の内(B)と外(AとC)の2つの範囲からそれぞれ最長一致する同一データ列を検索するとしてもよい。
変形例として、検証対象位置Pを開始位置とする可変長の未検証データ列について、同一検索部144は、目印領域の内外にかかわらず検証下限値以上のサイズとなる長短様々な同一データ列を順次検出し、データサイズ率算出部150はその都度データサイズ率を算出してもよい。そして、対象選択部149は、最終的にデータサイズ率が最小となるときの同一データ列を選択してもよい。
次に、サーバ装置100が生成した差分データ列に基づいて、新データ列を復元する復元処理について説明する。その前に、復元処理を実行するクライアント端末200の構成について説明する。
図12は、クライアント端末200の機能ブロック図である。
クライアント端末200は、通信部210、データ処理部220およびデータ保持部240を含む。
通信部210は、インターネット300を介したサーバ装置100との通信を行う。データ処理部220は、通信部210から取得されたデータを元にして各種のデータ処理を実行する。データ処理部220は、通信部210とデータ保持部240の間のインタフェースの役割も果たす。データ保持部240は、旧データ列や新データ列等の各種データを格納する。
通信部210は、サーバ装置100から差分データ列を受信する差分受信部212を含む。
データ保持部240は、旧データ保持部242、新データ保持部244、差分データ保持部246を含む。旧データ保持部242は旧データ列を保持する。新データ保持部244は旧データ列と差分データ列から復元される新データ列を保持する。差分データ保持部246は差分データ列を保持する。
データ処理部220は、目印領域処理部222と復元部232を含む。
目印領域処理部222は、旧目印領域と、第2実施例で説明する「新目印領域(Rn)」を制御する。目印領域処理部222は、目印領域を移動させる移動設定部224と、新目印領域と旧目印領域のいずれかを「現目印領域」として設定するアクティブ設定部230を含む。「現目印領域」についても第2実施例に関連して説明する。移動設定部224は、旧目印領域を移動させる旧目印領域設定部226と新目印領域を移動させる新目印領域設定部228を含む。
復元部232は、読出部234と新データ生成部236を含む。
読出部234は、差分データ列を順次読み出す。新データ生成部236は、旧データ列と差分データ列から新データ列を復元する。新データ生成部236はデコード部238を含む。デコード部238は差分データ列の符号を復号する
データ処理部220には、このほかにもクライアント端末200のアプリケーション実行機能などさまざまな機能が実装されている。
図13は、復元処理の過程を示すフローチャートである。
図13と図14ではフローチャートを用いて説明し、図15と図16では模式図により復元処理の内容を更に具体的に説明する。復元処理の目的は、旧データ列と差分データ列から新データ列を復元することである。そのために、旧目印領域設定部226は、まず、旧データ列の先頭バイトを始点位置として旧目印領域Roを初期設定する(S130)。読出部234は、新データ列の先頭バイトに復元開始位置Qを初期設定する(S132)。復元処理開始時には新データ列は存在しないので、復元開始位置Q=0となる。
読出部234は、差分データ列の一部を読み出す(S134)。デコード部238は、符号化されているこのデータ列をデコードする(S136)。終端マーク(EOF)であれば(S138のY)、復元処理は終了する。終端マークではなく(S138のN)、文字そのものであれば(S140のY)、すなわち、図6に関連して説明したように新データ列に含まれるテキストデータが非変換データとして記録されているのであれば、新データ生成部236は読み出した1バイト分のデータ列を新データ列に追加する(S142)。このとき、新データ生成部236は、復元開始位置Qを1バイト分だけ進める。一方、読み出したデータ列が変換データであって(S140のN)、旧目印領域Roの移動を示す移動マークMであれば(S144のY)、差分データ列をさらに読み出してデコードすることで移動位置Mrを取得する(S146)。旧目印領域設定部226は、旧目印領域RoをMrによって示される位置に調整移動させる(S148)。
移動マークMでなければ(S144のN)、読み出されたデータ列(L,n)と旧データ列に基づいて新データ列を復元する(S150)。いいかえれば、終端マーク、文字、移動指示マークMのいずれでもなければ、同一サイズLと目印領域内位置nであるため、nとLに基づいて、新データ列を復元する。S150の部分復元処理の詳細については次の図14に関連して説明する。このとき、読み出されたデータ列から復元された新データ列のサイズがLであれば、復元開始位置はQ+Lに変更される。このように、終端マークが現れるまで、S140以降の処理が繰り返され、差分データ列を少しずつ読み出してデコードしながら新データ列全体が復元されることになる。いいかえれば、差分単位データ列を基本的な処理単位として、復元処理が実行されている。
図14は、図13のS150における部分復元処理を詳細に示すフローチャートである。
読出部234は、同一サイズLを読み出し(S150)、次のデータを読み出す(S152)。デコード部238はこれを復元する(S154)。読出部234は、復元されたデータから目的領域内位置nを取得する(S156)。新データ生成部236は、旧目印領域Roを基準として、(L,n)から部分的な新データ列を復元する(S158)。すなわち、新データ生成部236は旧目印領域Ro内の位置nからLバイト分のデータ列を取り出して新データ列として追加する。
ここで、L=Lmであれば(S160のY)、旧目印領域設定部226は旧目印領域Roを上限移動させる(S162)。
図15は、図13のS142における文字復元処理を説明するための模式図である。
同図においては、読み出した差分データ列において、「n0」という1バイトの文字データが含まれているとする。ただし、この文字データは符号化されている。読出部234は、まず、差分データ列として1バイトのデータ「n0」を抽出し、これをデコードし、文字データであると判定する。新データ生成部236は、復元中の新データ列において、復元開始位置Qに「n0」を追加する。復元開始位置はQ+1に変更される。このように、差分データ列が符号化された文字データであるときには、その文字データが新データ列として追加されていく。
図16は、図14における変換データの復元を示す模式図である。
読み出した差分データ列が(5,1)という変換データであったとする。「5」は同一サイズLを示し、「1」は目印領域内位置nを示す。このとき新データ生成部236は、旧目印領域Roの位置「1」から5バイト分のデータを新データ列に追加する。このため、(5,1)という小さな差分データ列から5バイト分の新データ列を復元できることになる。復元開始位置はQからQ+5に移動する。
仮に、読み出した差分データ列が(Lm,n)という変換データでも、旧目印領域Roの位置「n」からLmバイト分のデータ列を新データ列に追加する。復元開始位置はQからQ+Lmに移動する。ただし、旧目印領域設定部226は、検証上限値Lmを検出すると旧目印領域Roを上限移動させる(S162)。差分単位データ列(Lm,n)のうち、「Lm」は旧目印領域Roの上限移動を暗黙的に指示するデータとなっている。
読み出した差分データ列が(M,Mr)(L,0)という変換データの場合、旧目印領域設定部226は旧目印領域RoをMrに調整移動させた後、移動後の旧目印領域Ro’の始点位置から「L」バイト分のデータ列を取り出して新データ列に追加する。
更に、読み出した差分データ列が(M,Mr)(Lm,0)という変換データの場合には、旧目印領域設定部226は、旧目印領域RoをMrに調整移動させ、新データ生成部236は移動後の旧目印領域Ro’の始点位置から「Lm」バイト分のデータ列を取り出す。そのあと、更に、旧目印領域設定部226は、旧目印領域Roを上限移動させる。
[第2実施例]
第1実施例において同一検索の対象となるのは、「旧データ列全体」である。これに対して、第2実施例において同一検索の対象となるのは、「旧データ列全体+差分処理済みの新データ列全体」となる。
図17は、第2実施例における差分処理の概要を説明するための模式図である。
同図において検証開始位置Pとすると、同一検索対象となるのは、旧データ列全体と、新データ列のうち「0〜(P−1)」の範囲である。すなわち、差分処理が進行し、Pが移動するごとに同一検索の対象範囲が拡大していく。このため、差分処理が進むほど、同一データ列の検出率がいっそう向上しやすい。第2実施例に示す差分処理は、同一内容のデータ列が繰り返し現れるタイプの新データ列において特に有効である。
第2実施例においては、旧目印領域Roだけでなく、新目印領域Rnを新データ列に設定する。旧データ列から同一データ列が目印領域内検出されると差分単位データ列を(Ro,L,n)、新データ列から同一データ列が目印領域内検出されると差分単位データ列を(Rn,L,n)として表現してもよい。このように、旧データ列と新データ列のいずれを対象として差分単位データ列を生成したかを、Ro、Rnの指定により示してもよい。
たとえば、5バイトの未検証データ列「n0〜n4」を対象として同一検索を行ったとき、新目印領域Rn内において最長一致する同一データ列「c0〜c4」が検出されたとする。この場合、差分単位データ列は、(Rn,5,1)となる。
ただし、第2実施例においては、旧目印領域Roと新目印領域Rnのいずれかを現目印領域Rcとして設定する。この現目印領域Rcには、常に、旧目印領域Roと新目印領域Rnのいずれかが設定されている。現目印領域Rcは、新データ列と旧データ列のどちらが「アクティブ」であるかを示す。一例を示す。
Rc=Roのとき:
未検証データ列のうち同一データ列が検出された部分データ列「n0〜n4」の差分単位データ列は(Sw)(5,1)となる。Swは、現目印領域の変更を示す。現目印領域Rc=旧目印領域Roのときに、新データ列に基づいて差分単位データ列を生成するときには、新データ列を非アクティブからアクティブに変更する。このとき、アクティブ設定部138は、現目印領域Rc=新目印領域Rnに設定変更し、現目印領域Rcの設定変更を示すSwを差分単位データ列の一部として記録する。差分単位データ列(Sw)(5,1)は、変更後の現目印領域Rcについて、目印領域内位置n=1、同一サイズL=5のデータ列から新データ列を復元できることを示す。
復元側では、差分単位データ列からSwを検出すると、現目印領域Rcを設定変更する。
Rc=Rnのとき:
未検証データ列のうち同一データ列が検出された部分データ列「n0〜n4」の差分単位データ列は(5,1)となる。現目印領域Rc=新目印領域Rnのときに、新データ列に基づいて差分単位データ列を生成するときには、新データ列はアクティブのままである。すなわち、差分単位データ列(5,1)は、現在の現目印領域Rcについて、目印領域内位置n=1、同一サイズL=5のデータ列から新データ列を復元できることを示す。
上記は、(b−1)目印領域内検出の場合についての説明であるが、(b−2)目印領域外検出の場合についても同様である。現目印領域Rcによってアクティブとなっているデータ列に基づいて差分単位データ列を生成するときにはSwは記録されないが、非アクティブなデータ列に基づいて差分単位データ列を生成するときには、現目印領域Rcを設定変更して、差分単位データ列にSwを記録する。
第2実施例においても、検証下限値から検証上限値の範囲において最長一致する同一データ列を検出対象としてもよい。また、目印領域内位置nや同一サイズL、移動コードM、移動位置Mrについても、第1実施例と同様にして符号化してもよい。また、第2実施例においても、第1実施例と同様にしてハッシュ関数により同一検索の速度を向上させることができる。部分データ列の検出にともなってPを移動させる場合において、ハッシュ処理部152はP−1までの新データ列について随時ハッシュ値を生成する。
第2実施例においては、サーバ装置100は、旧データ列に旧目印領域Ro、新データ列に新目印領域Rnを設定し、生成済みの新データ列からも同一データ列を検出することで、差分単位データ列を生成する。そして、差分単位データ列を連結することにより、差分データ列全体を生成する。サイズの大きな同一データ列が多く検出されるほど、差分データ列のサイズを小さくできるのは第1実施例と同様である。また、第1実施例と同様に第2実施例においても、サーバ装置100は、データサイズ率まで考慮した符号化データ決定処理により差分単位データ列に変換すべき同一データ列を選択する。
第2実施例においては、旧データ列における旧目印領域Ro内と旧目印領域Ro外、新データ列(0〜P+1)の範囲における新目印領域Rn内と新目印領域外Rnのそれぞれにおいて最長一致する同一データ列を検出する。同図では、更に、旧データ列の範囲を3つ、新データ列(0〜P+1)の範囲を3つに分けている。すなわち、旧目印領域Roよりも前方のデータ範囲Ao、旧目印領域Ro内のデータ範囲Bo、旧目印領域Roよりも後方のデータ範囲Co、新目印領域Rnよりも前方のデータ範囲An、新目印領域Rn内のデータ範囲Bn、新目印領域Rnよりも後方のデータ範囲Cnの計6つである。同一検索部144は、データ範囲Ao、Bo、Co、An、Bn、Cnからそれぞれ同一データ列候補を最大6つ検出する。
データサイズ率算出部150は、こうして検出された最大6種類の同一データ列についてのデータサイズ率を計算する。差分データ生成部146は、もっともデータサイズ率が小さくなるときの同一データ列について差分単位データ列を生成する。
なお、旧目印領域Ro内、旧目印領域Ro外、新目印領域Rn内、新目印領域Rn外の4つの範囲から最長一致する同一データ列をそれぞれ検出してもよい。また、6つ全ての同一データ列候補のデータサイズ率を比較するのではなく、順次一つずつ比較してデータサイズ率の小さい方を覚えておき最終的にデータサイズ率の小さいものを選択してもよい。
図18は、第2実施例における変換データの復元を示す模式図である。
復元側のクライアント端末200においても、旧目印領域Roと新目印領域Rnのいずれかが現目印領域Rcとして設定される。復元側においても現目印領域Rcは、新データ列と旧データ列のどちらが「アクティブ」であるかを示す。ここで、読み出した差分データ列が(Sw)(5,1)であったとする。また、現目印領域Rc=旧目印領域Roであるとする。
クライアント端末200のアクティブ設定部230は現目印領域Rc=新目印領域Rnに設定変更し、新たな現目印領域Rcである新目印領域Rnについて、目印領域内位置「1」から5バイト分のデータ列を新データ列として追加する。
一方、読み出した差分データ列が(5,1)であったとする。現目印領域Rc=旧目印領域Roであれば、旧目印領域Roについて、目印領域内位置「1」から5バイト分のデータ列を新データ列として追加する。アクティブなデータ列の変更が発生するときだけSwを挿入すればよいので、2つの目印領域を使い分ける場合でも、第1実施例と比べても差分データ列に対するオーバーヘッドはそれほど大きくならない。
図19は、第2実施例における差分処理の過程を示すフローチャートである。
まず、旧目印領域設定部134は、旧データ列の先頭バイトが旧目印領域Roの始点位置となるように、旧目印領域Roを初期設定する(S60)。新目印領域設定部136は、新データ列の先頭バイトが新目印領域Rnの始点位置となるように、新目印領域Rnを初期設定する(S62)。アクティブ設定部138は、現目印領域Rc=旧目印領域Roとして初期設定する(S64)。検証位置特定部142は、新データ列の先頭バイトに検証対象位置Pを初期設定する(S66)。同一検索部144は、検証対象位置Pの1バイト分の部分データ列と同じ内容のデータ列を旧データ列全体と新データ列の(0〜P−1)の範囲を対象として検索する(S70)。検出されなければ(S170のN)、差分データ生成部146は検索対象位置Pの新データ列1バイト分を差分単位データ列として取り出して符号化し(S178)、検証対象位置Pを1バイトだけ進める(S180)。処理はS68に戻る。新データ列全体について検証が完了すると(S68のY)、差分データ列の終端を示す「終端マーク(EOF)」を挿入する(S182)。新データ列に未検証のデータ範囲が存在するときには(S68のN)、移動後の検証対象位置Pに基づいて、S70以降の処理を再実行する。
同一内容のデータ列が検出されると(S170のY)、検証位置特定部142は、検証対象位置Pからの未検証データ列の長さを1バイトずつ延長しながら、一致しなくなるまで同一部分を検索する。そして、同一データ列が検証下限値以上の長さとなるか判定する(S172)。そして検証下限値以上の長さの同一データ列が検出されなければ(S172のN)、処理はS180に移行する。このときにも、差分データ生成部146は検証対象位置Pの新データ列1バイト分を差分単位データ列として取り出して符号化し(S178)、検証対象位置Pを1バイトだけ進める(S180)。このときの処理については図6に関連して説明した内容と同等である。
検証下限値以上のサイズの同一データ列が検出されれば(S172のY)、次に、符号化データ決定処理により同一データ列を選択する(S174)。同一データ列の検出位置に基づいて、差分処理部140は差分単位生成処理を実行する(S176)。
図20は、図19のS176における差分単位生成処理の詳細を示すフローチャートである。
差分データ生成部146は、特定された同一データ列が旧データ列内にあるか新データ列内にあるかを判定する(S72)。
A.旧データ列内の場合(S72のY):
差分データ生成部146は同一データ列の始点位置が旧目印領域Ro内か否かを判定する(S74)。同一データ列の始点位置が旧目印領域Ro外であれば(S74のN)、すなわち、旧データ列について目印領域外検出の場合、旧目印領域設定部134は、旧目印領域Roの始点位置と同一データ列の始点位置が一致するように、旧目印領域Roを調整移動させる(S78)。同一データ列の始点位置が旧目印領域Ro内であれば(S74のY)、すなわち、旧データ列について目印領域内検出の場合、S78の処理はスキップされる。
Rc=Roでなければ(S76のN)、いいかえれば、新データ列がアクティブのときに旧データ列から同一データ列が検出された場合には、アクティブ設定部138はRc=Roに設定変更する(S80)。現目印領域が変更になったので、差分データ生成部146は、差分単位データ列に「Sw」を記録する(S82)。Rc=Roのときには(S76のY)、S80、S82の処理は実行しない。差分データ生成部146は、現目印領域Rc=旧目印領域Roに対して図7や図8等に関連して説明した処理を実行することにより部分データ列に対応する同一データ列を差分単位データ列に変換する(S84)。検証データ列の範囲がP〜P+nであれば、検証開始位置はP+n+1に移動する(S98)。
B.新データ列内の場合(S72のN):
差分データ生成部146は同一データ列の始点位置が新目印領域Rn内か否かを判定する(S86)。同一データ列の始点位置が新目印領域Rn外であれば(S86のN)、新目印領域設定部136は、新目印領域Rnの始点位置と同一データ列の始点位置が一致するように、新目印領域Rnを調整移動させる(S88)。同一データ列の始点位置が新目印領域Rn内であれば(S86のY)、S88の処理はスキップされる。
Rc=Rnでなければ(S90のN)、いいかえれば、旧データ列がアクティブのときに新データ列から同一データ列が検出された場合には、アクティブ設定部138はRc=Rnに設定変更する(S92)。現目印領域が変更になったので、差分データ生成部146は、差分データ列に「Sw」を記録する(S94)。Rc=Rnのときには(S90のY)、S92、S94の処理は実行しない。差分データ生成部146は、現目印領域Rc=新目印領域Rnに対して図7や図8等に関連して説明した処理を実行することにより検証データ列を差分単位データ列に変換する(S84)。検証データ列の範囲がP〜P+nであれば、検証開始位置はP+n+1に移動する(S98)。
こうして、新データ列の検証対象位置Pを少しずつ移動させながら全体としての差分データ列が生成されることになる。差分処理が進むごとに同一データ列の検出率が向上するため、第1実施例の差分処理以上に差分データ列のサイズを小さくしやすい。
図21は、第2実施例における復元処理の過程を示すフローチャートである。
まず、旧目印領域設定部226は、旧データ列の先頭バイトを始点位置として旧目印領域Roを初期設定する(S1130)。新目印領域設定部228は、新データ列の先頭バイトを始点位置として新目印領域Rnを初期設定する(S1132)。ただし、この段階では新データ列は復元されていないので、新目印領域Roに含まれるデータは存在しない。アクティブ設定部230は、現目印領域Rc=旧目印領域Roに初期設定する(S1133)。読出部234は、新データ列の先頭バイトに復元開始位置Qを初期設定する(S1134)。
読出部234は、差分データ列の一部を読み出す(S1136)。デコード部238は、符号化されているこのデータ列をデコードする(S1140)。終端マーク(EOF)であれば(S1142のY)、復元処理は終了する。終端マークではなく(S1142のN)、文字であれば(S1144のY)、すなわち、新データ列に含まれるテキストデータが非変換データとして記録されているのであれば、新データ生成部236は読み出した1バイト分のデータ列を新データ列に追加する(S1146)。このとき、新データ生成部236は、復元開始位置Qを1バイト分だけ進める。一方、読み出したデータ列が変換データであって(S1144のN)、旧目印領域Roの移動を示す移動マークMであれば(S1148のY)、さらに差分データ列を読み出してデコードすることで移動位置Mrを取得する(S1150)。旧目印領域設定部134または新目印領域設定部136は、現目印領域Rcとして設定されている目印領域をMrによって示される位置に調整移動させる(S1152)。
Swであれば(S1154のY)、アクティブ設定部230は現目印領域を設定変更する(S1156)。Swでもなければ(S1154のN)、読み出されたデータ列と旧データ列に基づいて新データ列を復元する(S1158)。S1158の部分復元処理の詳細については次の図22に関連して説明する。読み出されたデータ列から復元された新データ列のサイズがLであれば、復元開始位置はQ+Lに変更される。このように、終端マークが現れるまで、S1144以降の処理が繰り返され、差分データ列を少しずつ読み出しながら新データ列全体が復元されることになる。いいかえれば、差分単位データ列を基本的な処理単位として、復元処理が実行されている。
図22は、図21のS1158における部分復元処理を詳細に示すフローチャートである。
読出部234は、同一サイズLを読み出し(S1160)、次のデータは、目印領域内位置であるので、差分データを読み出す(S1162)。デコード部238はこれを復元する(S1164)。読出部234は、復元されたデータから目的領域内位置nを取得する(S1166)。新データ生成部236は、現目印領域Rcを基準として、(L,n)から部分的な新データ列を復元する(S1168)。すなわち、新データ生成部236は現目印領域Rc内の位置nからLバイト分のデータ列を取り出して新データ列として追加する。
ここで、L=Lmであれば(S1170のY)、旧目印領域設定部226または新目印領域設定部228は現目印領域Rcを上限移動させる(S1172)。
以上、サーバ装置100およびクライアント端末200を実施例に基づいて説明した。
第1実施例に示したサーバ装置100によれば、新データ列に含まれるデータの特徴と旧データ列に含まれるデータの特徴に基づいてコンパクトな差分データ列を生成できる。第2実施例に示したサーバ装置100によれば、更に、新データ列自体も対象として同一データ列を検出できる。そのため、同一データ列の検出率をいっそう高めることができる。更に、図11に関連して説明したように、データサイズ減少率を考慮した差分処理を実行することにより、いっそう差分データ列のサイズを小さくできる。
このような差分データ列をクライアント端末200に送信することにより、クライアント端末200の旧データ列を適宜・一斉に更新させることができる。
また、本実施例に示した方法によれば、小さな処理負荷にて復元処理を実行できる。クライアント端末200が、CPUやメモリ等の計算資源に制約がある携帯電話などの場合、復元処理の処理負荷を抑制することは重要である。クライアント端末200は、実質的に、旧データ列や新データ列において、差分データ列による指定位置から指定量のデータを抽出したり、目印領域を移動させることにより復元処理を実行するのであって、ソート・比較・検索といった負荷の高い処理や、前の処理を覚えておくような高度な処理を実行する必要がない。
以上、本発明について実施例をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
請求項に記載の各構成要件が果たすべき機能は、本実施例において示された各機能ブロックの単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
変形例として、サーバ装置100は、新データ列全体としてのハッシュ値を生成し、差分データ列に加えてこのハッシュ値をクライアント端末200に送信してもよい。クライアント端末200は、差分データ列に基づいて新データ列を復元し、復元した新データ列全体としてのハッシュ値を生成する。クライアント端末200は、サーバ装置100から受信したハッシュ値と生成したハッシュ値を比較することにより、正しく復元ができているかを自己判定できる。また、新データ列全体に限らず、所定の一部についてハッシュ値を生成してもよい。
ネットワークシステムの全体構成図である。 アップデート処理の概要を説明するための模式図である。 第1実施例における差分処理の概要を説明するための模式図である。 サーバ装置の機能ブロック図である。 第1実施例における差分処理の過程を示すフローチャートである。 (a)「同一なし」時における差分単位データ列の生成方法を示す模式図である。 (b−1)「目印領域内検出時」における差分単位データ列の生成方法を示す模式図である。 (b−2)「目印領域外検出時」における差分単位データ列の生成方法を示す模式図である。 同一データ列のサイズが検証上限値Lmに達するときの処理内容を示す模式図である。 図5のS100における処理内容を詳細に示すフローチャートである。 第1の実施例における符号化データ決定処理の処理内容を示す模式図である。 クライアント端末の機能ブロック図である。 復元処理の過程を示すフローチャートである。 図13のS150における部分復元処理を詳細に示すフローチャートである。 図13のS142における文字復元処理を説明するための模式図である。 図14における変換データの復元を示す模式図である。 第2実施例における差分処理の概要を説明するための模式図である。 第2実施例における変換データの復元を示す模式図である。 第2実施例における差分処理の過程を示すフローチャートである。 図19のS176における差分単位生成処理の詳細を示すフローチャートである。 第2実施例における復元処理の過程を示すフローチャートである。 図21のS1158における部分復元処理を詳細に示すフローチャートである。
符号の説明
100 サーバ装置、 101 ネットワークシステム、 110 通信部、 112 データ取得部、 114 差分送信部、 120 データ処理部、 130 目印領域処理部、 132 移動設定部、 134 旧目印領域設定部、 136 新目印領域設定部、 138 アクティブ設定部、 140 差分処理部、 142 検証位置特定部、 144 同一検索部、 146 差分データ生成部、 148 エンコード部、149 対象選択部、 150 データサイズ率算出部、 152 ハッシュ処理部、 160 データ保持部、 162 旧データ保持部、 164 新データ保持部、 166 差分データ保持部、 200 クライアント端末、 210 通信部、 212 差分受信部、 220 データ処理部、 222 目印領域処理部、 224 移動設定部、 226 旧目印領域設定部、 228 新目印領域設定部、 230 アクティブ設定部、 232 復元部、 234 読出部、 236 新データ生成部、 238 デコード部、 240 データ保持部、 242 旧データ保持部、 244 新データ保持部、 246 差分データ保持部。

Claims (21)

  1. コンピュータが旧データ列と新データ列との差分データ列を生成する方法であって、
    前記コンピュータが実行するステップとして、
    前記旧データ列を取得するステップと、
    前記新データ列を取得するステップと、
    前記旧データ列の部分的な領域を示す旧目印領域を設定するステップと、
    前記新データ列に検証対象位置を設定するステップと、
    同一検索処理として、前記新データ列の前記検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を前記旧データ列から検索するステップと、
    前記同一検索処理の結果に基づいて、前記差分データ列の一部として、前記新データ列のうちの未検証データ列の少なくとも一部に対応する差分単位データ列を順次生成するステップと、
    を備え、
    前記差分単位データ列を生成するステップにおいては、
    前記同一データ列が前記旧データ列から検出されなければ、前記差分単位データ列として、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進め、
    前記同一データ列が前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の旧目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    前記同一データ列が前記旧目印領域外から検出されたときには、前記旧目印領域の始点位置が前記検出された同一データ列の始点位置と一致するように前記旧目印領域を移動させ、前記差分単位データ列として、少なくとも、前記旧目印領域の移動位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    前記新データ列において前記同一検索処理の対象となっていない未検証データ列が存在するときには、前記同一検索処理を再実行することにより、前記差分単位データ列を生成すること特徴とするデータ生成方法。
  2. 前記コンピュータが実行するステップとして、
    前記差分データ列を通信回線を介して外部に送信するステップ、
    を更に備えることを特徴とする請求項1に記載のデータ生成方法。
  3. 前記差分単位データ列を生成するステップにおいては、
    さらに、検出された前記同一データ列が所定下限長以上の可変長のデータ列であるか否かを判定し、
    所定下限長以上のときには、前記旧目印領域内における位置または前記旧目印領域の移動位置と、前記同一データ列の長さとを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    所定下限長未満のときには、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進めることを特徴とする請求項1又は請求項2に記載のデータ生成方法。
  4. 前記同一データ列を検索するステップにおいては、
    前記未検証データ列の少なくとも一部に対して最長一致する同一データ列を検出し、
    前記差分単位データ列を生成するステップにおいては、
    前記未検証データ列のうち、最長一致した同一データ列と内容が一致する未検証データ列の少なくとも一部を対象として差分単位データ列を記録することを特徴とする請求項1から請求項3の何れか一項に記載のデータ生成方法。
  5. 前記差分単位データ列は、
    前記同一データ列の前記旧目印領域内における位置、前記同一データ列の長さおよび前記旧目印領域の移動位置のうち少なくとも一つを所定の符号変換表により所定長の符号に変換された上で記録されることを特徴とする請求項1から請求項4の何れか一項に記載のデータ生成方法。
  6. 前記同一データ列を検索するステップにおいては、
    前記未検証データ列の少なくとも一部に対して最長一致する同一データ列を前記旧目印領域内及び前記旧目印領域外から検出し、
    前記差分単位データ列を生成するステップにおいては、
    前記検出した同一データ列を差分単位データ列に変換するときのデータサイズ率を算出し、最もデータサイズ率が小さくなる同一データ列を対象として差分単位データ列を記録することを特徴とする請求項に記載のデータ生成方法。
  7. 前記同一データ列は、所定上限長以下の可変長のデータ列であることを特徴とする請求項1から請求項6の何れか一項に記載のデータ生成方法。
  8. 前記差分単位データ列を生成するステップにおいては、
    前記所定上限長の同一データ列が前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記所定上限長分の一致を示す上限一致データを記録し、前記旧目印領域を所定量移動させることを特徴とする請求項に記載のデータ生成方法。
  9. 前記差分単位データ列を生成するステップにおいては、
    前記所定上限長の同一データ列が前記旧目印領域内から検出されたときに前記旧目印領域を所定量移動させても、前記差分単位データ列には、前記旧目印領域の移動位置を記録しないことを特徴とする請求項に記載のデータ生成方法。
  10. 前記コンピュータが実行するステップとして、
    所定のハッシュ関数により、前記旧データ列に含まれる所定長のデータ列をハッシュ値に変換するステップと、
    前記所定のハッシュ関数により、前記新データ列に含まれる所定長のデータ列をハッシュ値に変換するステップと、
    を更に備え、
    前記同一データ列を検出するステップにおいては、
    前記未検証データ列のハッシュ値と前記旧データ列のハッシュ値を比較することにより、前記未検証データ列に対する前記同一データ列を検出することを特徴とする請求項1から請求項9の何れか一項に記載のデータ生成方法。
  11. コンピュータが旧データ列と新データ列との差分データ列を生成する方法であって、
    前記コンピュータが実行するステップとして、
    前記旧データ列を取得するステップと、
    前記新データ列を取得するステップと、
    前記旧データ列の部分的な領域を示す旧目印領域を設定するステップと、
    前記新データ列の部分的な領域を示す新目印領域を設定するステップと、
    前記旧目印領域と前記新目印領域のいずれかを現目印領域として設定するステップと、
    前記新データ列に検証対象位置を設定するステップと、
    同一検索処理として、前記旧データ列と前記新データ列のうち既に生成されたデータ範囲とから、前記新データ列の前記検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を検索するステップと、
    前記同一検索処理の結果に基づいて、前記差分データ列の一部として、前記新データ列のうちの未検証データ列の少なくとも一部に対応する差分単位データ列を順次生成するステップと、
    を備え、
    前記差分単位データ列を生成するステップにおいては、
    前記同一データ列が前記旧データ列および前記新データ列のいずれからもから検出されなければ、前記差分単位データ列として、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進め、
    前記同一データ列が前記旧データ列から検出されたときであって、現目印領域として前記新目印領域が設定されているときには、前記旧目印領域を現目印領域に設定し、現目印領域の変更を示すスイッチデータを差分データ列の一部として記録し、
    前記同一データ列が前記旧データ列の前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の旧目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    前記同一データ列が前記旧データ列の前記旧目印領域外から検出されたときには、前記旧目印領域の始点位置が前記検出された同一データ列の始点位置と一致するように前記旧目印領域を移動させ、前記未検証データ列の少なくとも一部に対応する差分単位データ列として、少なくとも、前記旧目印領域の移動位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    前記同一データ列が前記新データ列から検出されたときであって、現目印領域として前記旧目印領域が設定されているときには、前記新目印領域を現目印領域として設定し、スイッチデータを差分データ列の一部として記録し、
    前記同一データ列が前記新データ列の前記新目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の新目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    前記同一データ列が前記新データ列の前記新目印領域外から検出されたときには、前記同一データ列を含むように前記新目印領域を移動させ、前記未検証データ列の少なくとも一部に対応する差分単位データ列として、少なくとも、前記新目印領域の移動位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    前記新データ列において前記同一検索処理の対象となっていない未検証データ列が存在するときには、前記同一検索処理を再実行することにより、前記差分単位データ列を生成すること特徴とするデータ生成方法。
  12. 前記同一データ列を検索するステップにおいては、
    前記未検証データ列の少なくとも一部に対して最長一致する同一データ列を検出し、
    前記差分単位データ列を生成するステップにおいては、
    前記未検証データ列のうち、最長一致した同一データ列と内容が一致する未検証データ列の少なくとも一部を対象として差分単位データ列を記録することを特徴とする請求項11に記載のデータ生成方法。
  13. 前記差分単位データ列は、前記同一データ列の位置、前記同一データ列の長さ、前記旧目印領域の移動位置および前記新目印領域の移動位置のうち少なくとも一つを所定の符号変換表により所定長の符号に変換された上で記録されることを特徴とする請求項11又は請求項12に記載のデータ生成方法。
  14. 前記同一データ列を検索するステップにおいては、
    未検証データ列の少なくとも一部に対して最長一致する同一データ列を前記旧目印領域内と前記旧データ列における前記旧目印領域外、前記新目印領域内、前記新データ列における前記新目印領域外のうち何れかから少なくとも一つ検出し、
    前記差分単位データ列を生成するステップにおいては、
    前記旧目印領域内の同一データ列を差分単位データ列に変換するときのデータサイズ率、前記旧目印領域外の同一データ列を差分単位データ列に変換するときのデータサイズ率、前記新目印領域内の同一データ列を差分単位データ列に変換するときのデータサイズ率および前記新目印領域外の同一データ列を差分単位データ列に変換するときのデータサイズ率を算出し、最もデータサイズ率が小さくなる同一データ列を対象として差分単位データ列を記録することを特徴とする請求項13に記載のデータ生成方法。
  15. 旧データ列と新データ列との差分データ列を生成する装置であって、
    前記旧データ列を保持する旧データ保持部と、
    前記新データ列を保持する新データ保持部と、
    前記旧データ列の部分的な領域を示す旧目印領域を設定する旧目印領域設定部と、
    前記新データ列に検証対象位置を設定する検証位置設定部と、
    同一検索処理として、前記新データ列の前記検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を前記旧データ列から検索する同一検索部と、
    前記同一検索処理の結果に基づいて、前記差分データ列の一部として、前記新データ列のうちの未検証データ列の少なくとも一部に対応する差分単位データ列を順次生成する差分生成部と、
    を備え、
    前記差分生成部は、
    前記同一データ列が前記旧データ列から検出されなければ、前記差分単位データ列として、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進め、
    前記同一データ列が前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の旧目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    前記同一データ列が前記旧目印領域外から検出されたときには、前記旧目印領域の始点位置が前記検出された同一データ列の始点位置と一致するように前記旧目印領域を移動させ、前記差分単位データ列として、少なくとも、前記旧目印領域の移動後の位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
    前記新データ列において前記同一検索処理の対象となっていない未検証データ列が存在するときには、前記同一検索処理を再実行することにより、前記差分単位データ列を生成すること特徴とするデータ生成装置。
  16. 前記差分データ列を通信回線を介して外部に送信する差分送信部、
    を更に備えることを特徴とする請求項15に記載のデータ生成装置。
  17. 旧データ列と新データ列との差分データ列を生成するコンピュータプログラムであって、
    前記旧データ列を保持する機能と、
    前記新データ列を保持する機能と、
    前記旧データ列の部分的な領域を示す旧目印領域を設定する機能と、
    前記新データ列に検証対象位置を設定する機能と、
    同一検索処理として、前記新データ列の前記検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を前記旧データ列から検索する機能と、
    前記同一データ列が前記旧データ列から検出されなければ、前記差分データ列のうち前記部分データ列に対応する差分単位データ列として、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進める機能と、
    前記同一データ列が前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の旧目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進める機能と、
    前記同一データ列が前記旧目印領域外から検出されたときには、前記旧目印領域の始点位置が前記検出された同一データ列の始点位置と一致するように前記旧目印領域を移動させ、前記差分単位データ列として、少なくとも、前記旧目印領域の移動後の位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進める機能と、
    前記新データ列において前記同一検索処理の対象となっていない未検証データ列が存在するときには、前記同一検索処理を再実行する機能と
    をコンピュータに実現させるためのコンピュータプログラム。
  18. コンピュータが、請求項1から請求項10の何れか一項に記載のデータ生成方法により生成された、旧データ列と新データ列との差分データ列により、前記旧データ列に基づいて前記新データ列を復元する方法であって、
    前記コンピュータが実行するステップとして、
    前記旧データ列を取得するステップと、
    前記差分データ列を取得するステップと、
    前記旧データ列の部分的な領域を示す旧目印領域を設定するステップと、
    前記読み出した差分データ列に基づいて前記旧データ列を用いて新データ列を復元するステップとを、
    備え、
    前記新データ列を復元するステップにおいては、
    前記差分データ列から前記差分単位データ列を読み出し、
    前記読み出した差分単位データ列が新データ列のデータそのものを示すときには、当該データを新データ列の一部として復元し、
    前記読み出した差分単位データ列が位置と長さを示すときには、前記旧目印領域内における前記位置から前記長さ分のデータ列を前記新データ列の一部として復元し、
    前記読み出した差分単位データ列が前記旧目印領域の移動位置を示すときには、前記旧目印領域を前記移動位置に移動させ、
    前記差分データ列において前記新データ列を復元するステップを実行していないデータ範囲が存在するときには、前記復元するステップを再実行することにより、前記旧データ列から前記新データ列を復元することを特徴とするデータ復元方法。
  19. コンピュータが、請求項11から請求項14の何れか一項に記載のデータ生成方法により生成された、旧データ列と新データ列との差分データ列により、前記旧データ列に基づいて前記新データ列を復元する方法であって、
    前記コンピュータが実行するステップとして、
    前記旧データ列を取得するステップと、
    前記差分データ列を取得するステップと、
    前記旧データ列の部分的な領域を示す旧目印領域を設定するステップと、
    前記新データ列の部分的な領域を示す新目印領域を前記新データ列のうち前記旧データ列から復元済みのデータ範囲における所定位置に設定するステップと、
    前記読み出した差分データ列に基づいて前記旧データ列と前記新データ列の復元済みのデータ範囲とを用いて新データ列を復元するステップとを、
    備え、
    前記新データ列を復元するステップにおいては、
    前記差分データ列から前記差分単位データ列を読み出し、
    前記読み出した差分単位データ列が新データ列のデータそのものを示すときには、当該データを新データ列の一部として復元し、
    前記読み出した差分単位データ列が位置と長さを示すときには、前記旧目印領域と前記新目印領域のいずれかに設定されている現目印領域内における前記位置から前記長さ分のデータ列を前記新データ列の一部として復元し、
    前記読み出した差分単位データ列が前記現目印領域の移動位置を示すときには、前記現目印領域を前記移動位置に移動させ、
    前記読み出した差分単位データ列が、現目印領域の変更を示すスイッチデータを示すときには、前記現目印領域を設定変更し、
    前記差分データ列において新データ列を復元するステップを実行していないデータ範囲が存在するときには、前記復元するステップを再実行することにより、前記新データ列を復元することを特徴とするデータ復元方法。
  20. 請求項15又は請求項16に記載のデータ生成装置により生成された、旧データ列と新データ列との差分データ列により、前記旧データ列に基づいて前記新データ列を復元する装置であって、
    前記旧データ列を保持する旧データ保持部と、
    前記差分データ列を保持する差分データ保持部と、
    前記旧データ列の部分的な領域を示す旧目印領域を設定する旧目印領域設定部と、
    前記差分データ列に基づいて前記旧データ列を用いて新データ列を復元する復元部と、
    を備え、
    前記復元部は、
    前記差分データ列から前記差分単位データ列を読み出し、
    前記読み出した差分単位データ列が新データ列のデータそのものを示すときには、前記差分データ列に含まれるデータを新データ列の一部として復元し、
    前記読み出した差分単位データ列が位置と長さを示すときには、前記旧目印領域内における前記位置から前記長さ分のデータ列を前記新データ列の一部として復元し、
    前記読み出した差分単位データ列が前記旧目印領域の移動位置を示すときには、前記旧目印領域を前記移動位置に移動させ、
    前記差分データ列において前記新データ列を復元していないデータ範囲が存在するときには、前記新データ列の復元を再実行することにより、前記旧データ列から前記新データ列を復元することを特徴とするデータ復元装置。
  21. 請求項17に記載のコンピュータプログラムにより生成された、旧データ列と新データ列との差分データ列により、前記旧データ列に基づいて前記新データ列を復元するコンピュータプログラムであって、
    前記旧データ列を保持する機能と、
    前記差分データ列を保持する機能と、
    前記旧データ列の部分的な領域を示す旧目印領域を設定する機能と、
    前記差分データ列から前記差分単位データ列を読み出す機能と、
    前記読み出した差分単位データ列が新データ列のデータそのものを示すときには、前記差分単位データ列に含まれるデータを新データ列の一部として復元する機能と、
    前記読み出した差分単位データ列が位置と長さを示すときには、前記旧目印領域内における前記位置から前記長さ分のデータ列を前記新データ列の一部として復元する機能と、
    前記読み出した差分単位データ列が前記旧目印領域の移動位置を示すときには、前記旧目印領域を前記移動位置に移動させる機能と、
    前記差分データ列において前記差分単位データ列を抽出していないデータ範囲が存在するときには、前記差分データ列から差分単位データ列の抽出を再実行する機能と、
    をコンピュータに実現させるためのコンピュータプログラム。
JP2007041211A 2007-02-21 2007-02-21 データ生成方法、データ復元方法、データ生成装置およびデータ復元装置 Expired - Fee Related JP4907380B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007041211A JP4907380B2 (ja) 2007-02-21 2007-02-21 データ生成方法、データ復元方法、データ生成装置およびデータ復元装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007041211A JP4907380B2 (ja) 2007-02-21 2007-02-21 データ生成方法、データ復元方法、データ生成装置およびデータ復元装置

Publications (2)

Publication Number Publication Date
JP2008204287A JP2008204287A (ja) 2008-09-04
JP4907380B2 true JP4907380B2 (ja) 2012-03-28

Family

ID=39781712

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007041211A Expired - Fee Related JP4907380B2 (ja) 2007-02-21 2007-02-21 データ生成方法、データ復元方法、データ生成装置およびデータ復元装置

Country Status (1)

Country Link
JP (1) JP4907380B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5347657B2 (ja) 2009-03-31 2013-11-20 富士通株式会社 データ記憶プログラム、方法、及び情報処理装置
JP5669431B2 (ja) * 2010-05-06 2015-02-12 キヤノン株式会社 情報処理装置、ファームウェア適用方法、及びコンピュータプログラム
JP5907927B2 (ja) * 2013-04-22 2016-04-26 京セラドキュメントソリューションズ株式会社 機器管理システム、電子機器、および機器管理プログラム
DE112014006841B4 (de) * 2014-07-28 2021-06-10 Mitsubishi Electric Corporation Datenaktualisierungssystem für eine mobile Navigationsvorrichtung zum Erzeugen von Differentialdaten und Speichervorrichtung hierfür
CN110244973B (zh) * 2018-03-09 2022-09-16 阿里巴巴(中国)有限公司 数据更新包的生成方法、装置及数据更新方法、装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004152136A (ja) * 2002-10-31 2004-05-27 Matsushita Electric Ind Co Ltd データ更新システム、データ更新システムの差分データ生成装置及びプログラム、並びに更新後ファイル復元装置及びプログラム
JP2004227520A (ja) * 2003-01-27 2004-08-12 Mitsubishi Electric Corp 新旧プログラム書換情報生成装置及び新旧プログラム書換情報生成方法及びプログラム及びプログラムを記録したコンピュータ読み取り可能な記録媒体
JP4153324B2 (ja) * 2003-01-31 2008-09-24 松下電器産業株式会社 差分データ生成装置及び方法、更新後データ復元装置及び方法、並びにプログラム
JP4360816B2 (ja) * 2003-03-20 2009-11-11 アルパイン株式会社 地図データ更新方法及びナビゲーション装置
JP3990354B2 (ja) * 2003-12-26 2007-10-10 株式会社東芝 通信システム
JP4036852B2 (ja) * 2004-09-13 2008-01-23 三菱電機株式会社 差分データ生成装置、差分データ生成方法および差分データ生成プログラム

Also Published As

Publication number Publication date
JP2008204287A (ja) 2008-09-04

Similar Documents

Publication Publication Date Title
US9768802B2 (en) Look-ahead hash chain matching for data compression
JP3571079B2 (ja) データ圧縮方法及びシステム
JP4814292B2 (ja) データ圧縮及び復元装置、並びに方法
JP4907380B2 (ja) データ生成方法、データ復元方法、データ生成装置およびデータ復元装置
JP5008106B2 (ja) データ圧縮装置および方法
US20080033942A1 (en) Substring search algorithm optimized for hardware acceleration
US9043275B2 (en) Data synchronization using string matching
US8868584B2 (en) Compression pattern matching
JP4156381B2 (ja) 文字テーブルによって実施されるデータ圧縮の方法および装置
JPS63161731A (ja) 逐次誤り訂正復号化装置
US20180276260A1 (en) Search apparatus and search method
JP5778595B2 (ja) データ圧縮方法及び装置
JP5149063B2 (ja) データ比較装置およびプログラム
CN107689796B (zh) 一种基于先验信息的无损压缩文件容错解压方法
US20150242433A1 (en) Data compression apparatus and data compression method
KR102189920B1 (ko) 비트 매칭 기반으로 선형 부호를 고속 복호화하는 방법 및 장치
JP3384844B2 (ja) データ圧縮方法および装置並びにデータ復元方法および装置
JP2827982B2 (ja) データ圧縮制御方法
Kanaya et al. An almost sure recurrence theorem with distortion for stationary ergodic sources
JP2000353961A (ja) 画像処理装置
JP3812289B2 (ja) 符号化器と復号器、及び、符号化方法と復号方法
JP4380052B2 (ja) スライド辞書の故障検出方法及び故障検出装置
CN115664428A (zh) 译码方法及设备
CN114124102A (zh) 一种数据压缩方法、装置、设备及计算机存储介质
JPH05150940A (ja) データ圧縮方法およびデータ伸張方法ならびに装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100209

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110707

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20110713

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111004

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111202

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111222

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150120

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees