JP5729901B2 - 差分管理装置及びコンピュータプログラム及び差分管理方法 - Google Patents

差分管理装置及びコンピュータプログラム及び差分管理方法 Download PDF

Info

Publication number
JP5729901B2
JP5729901B2 JP2009266352A JP2009266352A JP5729901B2 JP 5729901 B2 JP5729901 B2 JP 5729901B2 JP 2009266352 A JP2009266352 A JP 2009266352A JP 2009266352 A JP2009266352 A JP 2009266352A JP 5729901 B2 JP5729901 B2 JP 5729901B2
Authority
JP
Japan
Prior art keywords
difference
data
version
unit
plate
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
JP2009266352A
Other languages
English (en)
Other versions
JP2011113123A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2009266352A priority Critical patent/JP5729901B2/ja
Publication of JP2011113123A publication Critical patent/JP2011113123A/ja
Application granted granted Critical
Publication of JP5729901B2 publication Critical patent/JP5729901B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Between Computers (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

この発明は、3以上の版を有するデータについての差分データを管理する差分管理装置に関する。
オンラインあるいはオフラインでプログラムなどのデータを端末装置に配布したのち、不具合の修正や機能追加などのため、データを更新する必要が生じる場合がある。配布するデータ量を抑えるため、更新したデータそのものを配布するのではなく、最初に配布したデータと更新したデータとの差分を表わす差分データを配布する方式がある。
特開2006−293512号公報 特開2001−325140号公報 特開2003−280918号公報
一般にデータの更新は、複数回行われ、そのたびに、同じデータの異なる版ができることになる。差分データは、2つの版の間の差分を表わすものであるから、同じデータの異なる版が多数あれば、それに対応して差分データも多数必要になる。
また、利用者によっては、最新版のデータに更新するのではなく、異なる版のデータに更新したいという要望を持つ場合もある。すべての要望に対処するためには、版の数の二乗に近い数の差分データが理論的には必要になる。
また、差分データを適用してデータの版を更新するのは、そのデータを保持している端末装置である。端末装置は、処理能力が低い場合や記憶容量が小さい場合があるので、データの更新による負荷は、なるべく小さいことが望まれる。
この発明は、例えば、上記のような課題を解決するためになされたものであり、差分データを効率的に管理するとともに、差分データ適用時の負荷を小さくすることを目的とする。
この発明にかかる差分管理装置は、
3以上の版を有する有版データについて、上記有版データの2つの版の間の差分を表わす差分データを管理する差分管理装置において、
データを記憶する記憶装置と、データを処理する処理装置と、差分記憶部と、差分合成部と、要求取得部とを有し、
上記差分記憶部は、上記記憶装置を用いて、上記有版データの第一の版と第二の版との間の差分を表わす第一の差分データと、上記有版データの第二の版と第三の版との間の差分を表わす第二の差分データとを記憶し、
上記要求取得部は、端末装置が有する上記有版データの版に関する情報を含み、上記差分データを要求するための差分要求メッセージを取得し、
上記差分合成部は、上記差分要求メッセージを上記要求取得部が取得する前に、上記処理装置を用いて、上記差分記憶部が記憶した第一の差分データと第二の差分データとを合成して、上記有版データの第一の版と第三の版との間の差分を表わす第三の差分データを生成し、
上記処理装置は、上記差分要求メッセージに上記端末装置の目的とする上記有版データの版に関する情報が含まれている場合には上記端末装置の目的とする上記有版データの版に更新するための上記差分データを配布するよう判断し、上記差分要求メッセージに上記端末装置の目的とする上記有版データの版に関する情報が含まれていない場合には最新版に更新するための上記差分データを配布するよう判断し、
上記処理装置は、上記差分要求メッセージに基づき上記端末装置に対して上記第一の差分データと上記第二の差分データの両方を与えることが必要な場合に、上記第一の差分データ及び上記第二の差分データの代わりに上記第三の差分データを上記端末装置に配布するよう処理することを特徴とする。
この発明にかかる差分管理装置によれば、配布すべきデータ量を削減できるとともに、有版データの版の数が多くても記憶すべき差分データの数が少なく、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
実施の形態1における配布システム800の全体構成の一例を示すシステム構成図。 実施の形態1における配布装置100および端末装置200の外観の一例を示す斜視図。 実施の形態1における配布装置100および端末装置200のハードウェア資源の一例を示す図。 実施の形態1における配布装置100の機能ブロックの構成の一例を示すブロック構成図。 実施の形態1における端末装置200の機能ブロックの構成の一例を示すブロック構成図。 実施の形態1における差分版記憶部125が記憶した差分コード511の一例を示す図。 実施の形態1における差分データ520の一例を示す図。 実施の形態1における2つの有版データ530a,530bの関係の一例を示す図。 実施の形態1における差分生成処理S610の流れの一例を示すフローチャート図。 実施の形態1におけるデータ更新処理S650の流れの一例を示すフローチャート図。 実施の形態1における差分合成処理S670の流れの一例を示すフローチャート図。 実施の形態1における差分データ520bの一例を示す図。 実施の形態1における差分データ520cの一例を示す図。 実施の形態1における3つの有版データ530a〜530cの関係の一例を示す図。 実施の形態1における2つの有版データ530a,530cの関係の一例を示す図。 実施の形態1における配布判定処理S710の流れの一例を示すフローチャート図。 実施の形態1における適用判定処理S740の流れの一例を示すフローチャート図。 実施の形態1における差分データ520d〜520kと有版データ530d〜530iとの関係の一例を示す模式図。 実施の形態2におけるシステムの構成例を示す図。 実施の形態2におけるソフトウェア配布サーバ10の構成例を示す図。 実施の形態2における端末装置30の構成例を示す図。 実施の形態2におけるソフトウェア配布サーバ10の処理フロー図。 実施の形態2における端末装置30の更新フロー図。 実施の形態2における差分情報管理部13が差分情報を管理する管理の例を示す図。 実施の形態2におけるソフトウェアイメージと差分との関係の例を示す図。 実施の形態2におけるソフトウェアイメージと差分合成との関係の例を示す図。 実施の形態2における差分合成の処理フロー図。 実施の形態2における差分合成においてコピーする範囲を抽出するための情報の例を示す図。
実施の形態1.
実施の形態1について、図1〜図18を用いて説明する。
図1は、この実施の形態における配布システム800の全体構成の一例を示すシステム構成図である。
配布システム800は、プログラムなどのソフトウェアを配布するシステムである。配布システム800は、開発装置810、配布装置100、端末装置200などを有する。開発装置810は、開発者がソフトウェアを開発する装置である。配布装置100は、開発装置810で開発されたソフトウェアを端末装置200に配布する装置である。端末装置200は、配布装置100から配布されたソフトウェアを実行する装置である。開発装置810と配布装置100との間は、例えばネットワークなどにより接続していて、開発装置810で開発されたソフトウェアを配布装置100に伝送することができる。しかし、開発装置810で開発したソフトウェアを配布装置100が取得できる構成であれば、開発装置810と配布装置100との間は必ずしも接続されている必要はない。例えば、開発装置810で開発したソフトウェアを記憶媒体に記憶させ、配布装置100が記憶媒体からソフトウェアを読み出す構成であってもよい。配布装置100と端末装置200との間も同様に、配布装置100が配布したソフトウェアを端末装置200が取得できるよう構成する。例えば、ネットワークによる常時接続やダイヤルアップ回線による接続を介してオンラインでソフトウェアを配布する構成でもよいし、記憶媒体を郵送するなどしてオフラインでソフトウェアを配布する構成でもよい。
ソフトウェアは、1つのファイルからなるものであってもよいし、複数のファイルからなるものであってもよい。この例では、ソフトウェア全体を一続きのデータとして取り扱う。例えば、ソフトウェアを構成する1以上のファイルを1つに結合して生成した書庫ファイルを対象とする。なお、ソフトウェア全体を一続きのデータとして取り扱うのではなく、複数のファイルなど複数のデータの集合として取り扱う場合は、個々のファイルなど一続きのデータとして取り扱うことができる部分を対象とすればよい。
配布装置100は、開発装置810で開発されたソフトウェアを端末装置200に配布する。その後、開発装置810では、例えば不具合の修正や新機能の追加などを目的として、既に配布したソフトウェアを修正した新しい版のソフトウェアを開発する。ソフトウェアの修正は、1回に限らず、何回も繰り返し行われる。このため、ソフトウェアには、多数の版が存在する。
新しい版のソフトウェアを配布するに当たり、古い版のソフトウェアとの差が小さければ、その差を表わす差分データを配布するほうが、配布すべきデータ量が少なくなり効率がよい。このため、配布装置100は、端末装置200に対して差分データを配布する。端末装置200は、既に配布されている古い版のソフトウェアに、配布された差分データを適用することにより、ソフトウェアを更新し、新しい版のソフトウェアを取得する。
配布装置100からソフトウェアの配布を受ける端末装置200は、1以上存在し、通常は非常に多数存在する。端末装置200が配布装置100からソフトウェアの配布を受ける形態には、上述したように様々な形態がある。
端末装置200がネットワークなどを介して配布装置100と常時接続している場合、ソフトウェアの新しい版が開発されるたびに、配布装置100から差分データを端末装置200に配布することができる。
しかし、端末装置200がダイヤルアップ回線などを介して配布装置100と接続している場合、配布装置100と端末装置200とが接続していない間は、差分データを配布できない。
また、郵送などオフラインでの配布の場合、些細な修正のたびに差分データを配布することは、郵送料や利用者が差分データをソフトウェアに適用する手間などの点で現実的ではなく、セキュリティホールの修正など重要な修正があった場合のみ、差分データを配布する。
更に問題を複雑にするのは、端末装置200の利用者の好みの問題である。利用者は、必ずしも最新版のソフトウェアを好むとは限らない。データの互換性などの問題から古い版を使う必要がある場合や、既に使い慣れた操作方法が変更されることへの抵抗感がある場合など、様々な理由により、利用者は、古い版のソフトウェアを使い続けている場合がある。場合によっては、一度新しい版を導入したのち、古い版に戻したいという要望が出る場合もある。
したがって、ソフトウェアの多数の版のうち、どの版を、端末装置200が現在記憶しているかは必ずしも明らかではないし、端末装置200が記憶しているソフトウェアを更新する場合、どの版に更新すればよいかも必ずしも明らかではない。
配布システム800は、このように、ソフトウェアが多数の版を有し、その差分データを配布することによりソフトウェアを配布する場合において、効率的なソフトウェアの更新を実現する。
図2は、この実施の形態における配布装置100および端末装置200の外観の一例を示す斜視図である。
配布装置100および端末装置200は、システムユニット910、CRT(Cathode・Ray・Tube)やLCD(液晶)の表示画面を有する表示装置901、キーボード902(Key・Board:K/B)、マウス903、FDD904(Flexible・Disk・Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット910は、コンピュータであり、ファクシミリ機932、電話器931とケーブルで接続され、また、ローカルエリアネットワーク942(LAN)、ゲートウェイ941を介してインターネット940に接続されている。
図3は、この実施の形態における配布装置100および端末装置200のハードウェア資源の一例を示す図である。
配布装置100および端末装置200は、プログラムを実行するCPU911(Central・Processing・Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。CPU911は、バス912を介してROM913、RAM914、通信装置915、表示装置901、キーボード902、マウス903、FDD904、CDD905、プリンタ装置906、スキャナ装置907、磁気ディスク装置(以下「HDD」と呼ぶ。)920と接続され、これらのハードウェアデバイスを制御する。HDD920の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、HDD920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。通信装置915、キーボード902、スキャナ装置907、FDD904などは、入力部、入力装置の一例である。
また、通信装置915、表示装置901、プリンタ装置906などは、出力部、出力装置の一例である。
通信装置915は、ファクシミリ機932、電話器931、LAN942等に接続されている。通信装置915は、LAN942に限らず、インターネット940、ISDN等のWAN(ワイドエリアネットワーク)などに接続されていても構わない。インターネット940或いはISDN等のWANに接続されている場合、ゲートウェイ941は不用となる。
HDD920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。
上記プログラム群923には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのCPUの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、HDD920の磁気ディスク、その他光ディスク、ミニディスク、DVD(Digital・Versatile・Disk)等の記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
図4は、この実施の形態における配布装置100の機能ブロックの構成の一例を示すブロック構成図である。
配布装置100(差分管理装置)は、旧版データ記憶部111、新版データ取得部112、差分生成部113、旧版データ更新部114、差分記憶部115、旧版コード記憶部121、旧版コード更新部124、差分版記憶部125、要求取得部131、配布判定部132、差分合成部133、差分配布部134を有する。
旧版データ記憶部111は、HDD920を用いて、多数の版を有するソフトウェア(以下「有版データ」と呼ぶ。)のうち、現行の版(以下「旧版データ」と呼ぶ。)を記憶している。有版データには、その版を識別するためのコード(以下「版コード」と呼ぶ。)がある。版コードは、例えばソフトウェアのバージョン番号やリビジョン番号である。
開発装置810が有版データの新たな版を開発すると、新版データ取得部112は、CPU911を用いて、開発装置810から有版データの最新の版(以下「新版データ」と呼ぶ。)と、新版データの版を識別する版コード(以下「新版コード」と呼ぶ。)とを取得する。
差分生成部113は、CPU911を用いて、旧版データ記憶部111が記憶した旧版データと、新版データ取得部112が取得した新版データとの間の差分データを生成する。
差分記憶部115は、HDD920を用いて、差分生成部113が生成した差分データを記憶する。差分記憶部115は、複数の差分データを記憶する。差分生成部113が生成した差分データを記憶することにより、差分記憶部115が記憶した差分データの数が1つ増える。
旧版データ更新部114は、CPU911を用いて、旧版データ記憶部111が記憶した旧版データを更新して、新版データ取得部112が取得した新版データを旧版データ記憶部111に記憶させる。
旧版データ記憶部111は、有版データの1つの版しか記憶しない。これにより、HDD920の記憶容量を節約することができる。旧版データ更新部114による更新により、旧版データ記憶部111は、HDD920を用いて、新版データを新たな旧版データとして記憶する。すなわち、旧版データ記憶部111が記憶している有版データの現行の版は、差分生成部113が差分データを生成している間を除き、常に、その有版データの最新の版である。
1つの有版データのデータ量が大きい場合はもちろん、配布装置100が多数の種類の有版データを配布する場合、1つ1つの有版データのデータ量は小さくても、全体としてのデータ量は膨大になる場合がある。旧版データ記憶部111が1つの有版データにつき1つの版しか記憶せず、HDD920の記憶容量を節約することにより、配布装置100の設置コストを抑えることができる。
なお、HDD920の記憶容量に余裕があれば、旧版データ記憶部111は、1つの有版データにつき複数の版を記憶する構成としてもよい。更に、空き容量監視部と版数算出部とを設け、HDD920の空き容量を空き容量監視部が監視し、HDD920の空き容量に基づいて、旧版データ記憶部111が記憶する版の数を版数算出部が算出する構成としてもよい。
旧版コード記憶部121は、HDD920を用いて、旧版データ記憶部111が記憶している旧版データの版を識別する版コード(以下「旧版コード」と呼ぶ。)を記憶している。
差分版記憶部125は、CPU911を用いて、新版データ取得部112が取得した新版コードと、旧版コード記憶部121が記憶した旧版コードとに基づいて、差分生成部113が生成した差分データがどの版とどの版との間のものであるかを表わすデータ(以下「差分コード」と呼ぶ。)を生成する。差分版記憶部125は、HDD920を用いて、生成した差分コードを記憶する。差分版記憶部125は、差分記憶部115が記憶した複数の差分データに対応して同じ数の差分コードを記憶する。例えば、差分記憶部115が差分データを記憶するファイルのファイル名として差分コードを用いるなどして、差分記憶部115が記憶した差分データと、差分版記憶部125が記憶した差分コードとを対応づける。
旧版コード更新部124は、CPU911を用いて、旧版コード記憶部121が記憶した旧版コードを更新して、新版データ取得部112が取得した新版コードを旧版コード記憶部121に記憶させる。
旧版データ記憶部111が1つの旧版データを記憶する構成である場合、旧版コード記憶部121も1つの旧版コードを記憶する。
旧版データ記憶部111が複数の旧版データを記憶する構成である場合、旧版コード記憶部121は、それに対応して同じ数の旧版コードを記憶する。旧版データ記憶部111が記憶した旧版データと、旧版コード記憶部121が記憶した旧版コードとの対応がわかるよう、例えば、旧版データ記憶部111が旧版データを記憶するファイルのファイル名として旧版コードを用いるなどして、旧版データ記憶部111が記憶した旧版データと、旧版コード記憶部121が記憶した旧版コードとを対応づける。
要求取得部131は、CPU911を用いて、端末装置200から差分データを要求する差分要求メッセージを取得する。例えば、要求取得部131は、ネットワークを介して接続した端末装置200が送信した差分要求メッセージを、通信装置915を用いて受信する。あるいは、要求取得部131は、オフラインの端末装置200の利用者からの要求を配布装置100の管理者がキーボード902などを用いて入力することにより、差分要求メッセージを取得する。
差分要求メッセージは、少なくとも、端末装置200が現在所持している有版データ(以下「現版データ」と呼ぶ。)の版を識別する版コード(以下「現版コード」と呼ぶ。)を含む。また、差分要求メッセージは、端末装置200が取得したい有版データ(以下「更新版データ」と呼ぶ。)の版を識別する版コード(以下「更新版コード」と呼ぶ。)を含む。なお、差分要求メッセージが更新版コードを含まない場合は、最新版を取得したいものと解釈する構成であってもよい。
更に、差分要求メッセージは、端末装置200が現在所持している差分データを識別する差分コードを含んでもよい。上述したように、端末装置200は、配布装置100が配布したすべての差分データを取得しているとは限らないし、端末装置200が記憶している有版データの版や、取得したい有版データの版は様々である。したがって、端末装置200が所持している差分データが現版データに適用できるとは限らないし、適用できたとしてもその結果として更新版データが得られるとは限らない。このため、端末装置200が差分データを所持していたとしても、それとは異なる差分データを配布する必要がある場合がある。
配布判定部132は、CPU911を用いて、要求取得部131が取得した差分要求メッセージと、差分版記憶部125が記憶した差分コードとに基づいて、差分記憶部115が記憶した差分データのなかから、端末装置200に配布すべき差分データを判定する。
現版データに適用することにより更新版データを得ることができる差分データを配布すれば、端末装置200からの要求を満たすことができるのは、もちろんである。また、複数の差分データを順次適用することにより現版データから更新版データを得ることができる差分データであっても、端末装置200からの要求を満たすことができる。例えば、現版データに第一の差分データを適用し、その結果得られた版の有版データに第二の差分データを適用して更新版データを得ることができればよい。順次適用する差分データの数は、2つに限らず、3つ以上であってもよい。また、順次適用する複数の差分データのうちいくつかの差分データを端末装置200が既に所持しているのであれば、その差分データについては、端末装置200に配布する必要はなく、差分記憶部115が記憶している必要もない。
差分合成部133は、CPU911を用いて、差分記憶部115が記憶した複数の差分データを合成して、新たな差分データを生成する。差分データの合成とは、順次適用可能な複数の差分データから、1つの差分データを生成することである。例えば、第一の差分データは、有版データの第一の版に適用することにより有版データの第二の版を生成できるものであり、第二の差分データは、有版データの第二の版に適用することにより有版データの第三の版を生成できるものであるとする。この場合、有版データの第一の版に、第一の差分データと第二の差分データとを順次適用することにより、有版データの第三の版を生成することができる。差分合成部133は、第一の差分データと第二の差分データとを合成することにより、1回の適用で、有版データの第一の版から、有版データの第三の版を生成することができる第三の差分データを生成する。
差分記憶部115は、HDD920を用いて、差分合成部133が生成した新たな差分データを記憶する。これにより、差分記憶部115が記憶した差分データの数がまた1つ増える。
差分版記憶部125は、CPU911を用いて、差分合成部133が生成した差分データに対応する差分コードを生成し、HDD920を用いて、生成した差分コードを記憶する。
例えば、配布判定部132が端末装置200に配布すべきと判定した差分データのなかに、順次適用すべき複数の差分データがある場合、これを合成して1つの差分データにしてから配布するほうが、配布すべきデータ量が減るので効率がよい。差分合成部133は、CPU911を用いて、配布判定部132が判定した差分データに基づいて、合成すべき差分データを判定し、差分データを合成する。
また、配布する時点で合成を始めたのでは配布が遅れる可能性があるので、差分合成部133は、CPU911を用いて、前もって差分データを合成しておく構成であってもよい。例えば、負荷監視部を設け、負荷監視部がCPU911の負荷を監視し、CPU911の負荷が所定の値よりも低く、差分合成部133が差分データを合成する差分合成処理をしても他の処理に影響が出ないと判定した場合に、差分版記憶部125が記憶した差分コードに基づいて、合成により生成することが可能であるがまだ生成されていない差分データを差分合成部133が判定し、判定した差分データを生成する。
差分配布部134(差分通知部)は、CPU911を用いて、差分記憶部115が記憶した差分データを端末装置200に対して配布する。配布の方式には、上述したように様々な方式がある。例えば、差分配布部134が通信装置915を用いて、インターネットなどを介して差分データを端末装置200に対して送信する。あるいは、差分配布部134が記憶媒体に差分データを保存し、差分データを保存した記憶媒体を端末装置200の利用者に対して郵送する。また、配布の時期にも、様々な時期がある。例えば、端末装置200からの差分要求メッセージに対する応答として、配布判定部132が判定した差分データを差分配布部134が配布する。あるいは、開発装置810が有版データの新しい版を開発したことに伴って、有版データを最新版に更新する差分データを差分配布部134が配布する。
図5は、この実施の形態における端末装置200の機能ブロックの構成の一例を示すブロック構成図である。
端末装置200(差分管理装置)は、有版データ記憶部211、有版データ更新部212、現版コード記憶部213、差分取得部221、差分記憶部222、差分版記憶部223、差分合成部224、更新版取得部231、適用判定部240を有する。
有版データ記憶部211は、HDD920を用いて、有版データのいずれかの版を記憶している。
現版コード記憶部213は、HDD920を用いて、有版データ記憶部211が記憶している有版データの版を表わす版データ(以下「現版コード」と呼ぶ。)を記憶している。
有版データ更新部212は、CPU911を用いて、差分記憶部222が記憶した差分データを、有版データ記憶部211が記憶した有版データに適用して、有版データの異なる版を生成する。有版データ更新部212は、CPU911を用いて、有版データ記憶部211が記憶した有版データを更新して、生成した異なる版の有版データを記憶させる。有版データ記憶部211は、HDD920を用いて、更新された異なる版の有版データを記憶する。現版コード記憶部213は、HDD920を用いて、更新された異なる版を表わす現版コードを記憶する。
差分取得部221は、CPU911を用いて、配布装置100が配布した差分データと、その差分データに対応する差分版データとを取得する。
差分記憶部222は、HDD920を用いて、差分取得部221が取得した差分データを記憶する。差分記憶部222は、複数の差分データを記憶する。差分取得部221が取得した差分データを記憶することにより、差分記憶部222が記憶した差分データの数が1つ増える。
差分版記憶部223は、HDD920を用いて、差分取得部221が取得した差分版データを記憶する。差分版記憶部223は、差分記憶部222が記憶した差分データに対応して、同じ数の差分版データを記憶する。例えば、差分記憶部222が差分データを記憶するファイルのファイル名として差分コードを用いるなどして、差分記憶部222が記憶した差分データと、差分版記憶部223が記憶した差分コードとを対応づける。
差分合成部224は、CPU911を用いて、差分記憶部222が記憶した複数の差分データを合成して、新たな差分データを生成する。差分記憶部222は、HDD920を用いて、差分合成部224が生成した差分データを記憶する。これにより、差分記憶部222が記憶した差分データの数が1つ増える。差分版記憶部223は、差分合成部224が生成した差分データに対応する差分版データを記憶する。
更新版取得部231は、CPU911を用いて、有版データのうち、利用者が取得したい版を表わす版コード(更新版コード)を取得する。例えば、利用者がキーボード902などを操作して、更新版取得部231がその操作内容を入力して解釈することにより、更新版コードを入力する。
適用判定部240は、CPU911を用いて、有版データ記憶部211が記憶した有版データと、差分記憶部222が記憶した差分データとに基づいて、更新版コードが表わす利用者が取得したい版の有版データを得ることができるか否かを判定する。
単独適用判定部241は、CPU911を用いて、差分記憶部222が記憶した差分データのなかに、有版データ記憶部211が記憶した有版データに適用することにより、更新版取得部231が取得した更新版コードが表わす版の有版データを生成することができる差分データ(以下「単独適用差分データ」と呼ぶ。)があるか否かを判定する。
単独適用差分データがないと単独適用判定部241が判定した場合、合成適用判定部242は、CPU911を用いて、差分記憶部222が記憶した差分データのなかに、有版データ記憶部211が記憶した有版データに順次適用することにより、更新版取得部231が取得した更新版データが表わす版の有版データを生成することができる複数の差分データ(以下「合成適用差分データ」と呼ぶ。)があるかを判定する。
合成適用差分データがないと合成適用判定部242が判定した場合、差分要求部243は、CPU911を用いて、配布装置100に対して差分データの配布を要求する差分要求メッセージを通知する。通知の方式は、配布装置100が有版データや差分データを配布する場合と同様、様々な方式がある。例えば、配布装置100と端末装置200とがインターネットなどを介して接続している場合には、差分要求部243は、通信装置915を用いて、配布装置100に対して差分要求メッセージを送信する。あるいは、差分要求部243は、表示装置901を用いて、端末装置200の利用者に対してメッセージを表示する。それを見た利用者が電話や葉書で配布装置100の管理者に連絡する。配布装置100の管理者が配布装置100にその内容を入力することにより、配布装置100に差分要求メッセージを通知する。
合成適用差分データがあると合成適用判定部242が判定した場合、差分合成部224は、CPU911を用いて、差分記憶部222が記憶した合成適用差分データを合成して、単独適用差分データを生成する。
有版データ更新部212は、CPU911を用いて、単独適用判定部241が判定した単独適用差分データもしくは差分合成部224が合成した単独適用差分データを、有版データ記憶部211が記憶した有版データに適用して、更新版コードが表わす版の有版データを生成する。
有版データの更新は、CPU911に負荷がかかり、作業用にRAM914やHDD920の記憶領域を使用する。特に、有版データのデータ量が大きい場合、CPU911にかかる負荷が大きくなり、使用する記憶領域も大きくなる。このため、合成適用差分データを順次適用するよりも、合成適用差分データを合成して単独適用差分データを生成し、生成した単独適用差分データを使って有版データを更新するほうが、CPU911にかかる負荷や使用する記憶領域が少なくて済む。
図6は、この実施の形態における差分版記憶部125が記憶した差分コード511の一例を示す図である。
この例において、差分版記憶部125は、10個の差分コード511(複数の差分コード511を区別するため、英小文字を付加する場合がある。他のデータについても同様。)を記憶している。各差分コード511は、適用前コード512と適用後コード513との組である。適用前コード512及び適用後コード513は、いずれも版コードである。適用前コード512は、その差分コード511に対応する差分データを適用できる版の版コードを表わし、適用後コード513は、その差分コード511に対応する差分データを適用した結果として生成される版の版コードを表わす。差分記憶部222が記憶する差分コードも同様である。
例えば、差分コード511aは、対応する差分データ(順方向差分データ)が、版コード「1.0」の有版データと版コード「1.1」の有版データとの差分を表わし、版コード「1.0」の有版データに適用することにより、版コード「1.1」の有版データを生成することができることを表わす。差分コード511bは、対応する差分データ(逆方向差分データ)が、差分コード511aに対応する差分データと同じく、版コード「1.0」の有版データと版コード「1.1」の有版データとの差分を表わすが、差分コード511aに対応する差分データとは逆に、版コード「1.1」の有版データに適用することにより、版コード「1.0」の有版データを生成することができることを表わす。
この例に示したように、差分生成部113(および差分合成部133,224)が生成する差分データは、その差分データを生成する元になった2つの有版データのうち、いずれか一方にのみ適用できるものであってもよいし、この例と異なり、双方向に適用できるものであってもよい。
差分データが双方向に適用できるものである場合、1つの差分データをバージョンアップとバージョンダウンの両方に用いることができるので、差分記憶部115が、比較的少ない数の差分データさえ記憶しておけば、様々なニーズに対応できる。
これに対し、差分データが片方向にしか適用できないものである場合、差分データ1つ当たりのデータ量が少なくて済むので、配布するデータ量を抑えることができる。利用者は、多くの場合、有版データの版を更新したら更新した版を使い続けるので、元に戻したいというニーズは存在してもごくわずかである。また、利用者が更新前の有版データをバックアップしている場合には、元に戻すために差分データを用いる必要はない。したがって、最初は片方向にしか適用できない差分データを配布し、元に戻したいというニーズが発生した時点で、元に戻すための差分データを配布するほうが効率がよい。
図7は、この実施の形態における差分データ520の一例を示す図である。
差分データ520は、1以上のコマンド521を有する。
1つのコマンド521は、命令522とサイズ523とソース524との組である。
命令522は、そのコマンド521が複写コマンドであるか追加コマンドであるかを表わす。この例では、複写コマンドの場合を「copy」、追加コマンドの場合を「data」として記述しているが、これは理解を助けるためである。実際には、複写コマンドと追加コマンドとを区別できればよいので、命令522は、例えば1ビットのデータでよい。
サイズ523は、そのコマンドにより生成するデータのサイズ(データ量)を表わす。
ソース524は、そのコマンドにより生成するデータの源泉を表わす。複写コマンドは、適用前の版の有版データからデータを複写してくることを表わし、ソース524は、例えば、複写するデータの開始位置を表わす。追加コマンドは、新たなデータを追加することを表わし、ソース524は、追加するデータそのものである。
例えば、コマンド521aは、適用前の版の有版データの0バイト目(最初)から3200バイトのデータを複写することを表わす。コマンド521bは、ソース524bが表わす1200バイトのデータを追加することを表わす。コマンド521cは、適用前の版の有版データの3200バイト目から4600バイトのデータを複写することを表わす。
コマンド521には順番があり、コマンド521の順番は、適用後の版の有版データにおいて、生成したデータを配置する順序を表わす。
例えば、コマンド521aにより生成した3200バイトのデータは、適用後の版の有版データの0バイト目(最初)から3199バイト目までの間に配置する。コマンド521bにより生成した1200バイトのデータは、適用後の版の有版データの3200バイト目から4399バイト目までの間に配置する。コマンド521cにより生成した4600バイトのデータは、適用後の版の有版データの4400バイト目から8999バイト目までの間に配置する。
図8は、この実施の形態における2つの有版データ530a,530bの関係の一例を示す図である。
この例は、図7に示した差分データ520を適用する適用前の版の有版データ530aと、差分データ520を適用した適用後の版の有版データ530bとの関係を表わしている。
有版データ530aは、全部で12800バイトのデータである。有版データ530bは、全部で13400バイトのデータである。このように、有版データ530のサイズは、版により異なっていてもよい。
有版データ530aの0バイト目(最初)から3199バイト目までの3200バイトの部分531a(複写部分)のデータは、有版データ530bの0バイト目(最初)から3199バイト目までの3200バイトの部分531b(含有部分)のデータと同一である。有版データ530の3200バイト目から7799バイト目までの4600バイトの部分532a(複写部分)のデータは、有版データ530bの4400バイト目から8999バイト目までの4600バイトの部分533b(含有部分)のデータと同一である。有版データ530aの10200バイト目から12799バイト目(最後)までの2600バイトの部分534a(複写部分)のデータは、有版データ530bの9000バイト目から11599バイト目までの2600バイトの部分534b(含有部分)のデータと同一である。
有版データ530aの7800バイト目から10199バイト目までの2400バイトの部分533aのデータと同一のデータは、有版データ530bには存在しない。また、有版データ530bの3200バイト目から4399バイト目までの1200バイトの部分532b(非含有部分)のデータ、および、有版データ530bの11600バイト目から13399バイト目(最後)までの1800バイトの部分535b(非含有部分)のデータと同一のデータは、有版データ530aには存在しない。
図7に示したコマンド521を順に実行することにより、有版データ更新部212は、有版データ530aから有版データ530bを生成する。
まず、有版データ更新部212は、コマンド521aにしたがって、有版データ530aの部分531aのデータを、有版データ530bの部分531bに複写する。次に、有版データ更新部212は、コマンド521bにしたがって、ソース524bが表わすデータを、有版データ530bの部分532bに追加する。次に、有版データ更新部212は、コマンド521cにしたがって、有版データ530aの部分532aのデータを、有版データ530bの部分533bに複写する。次に、有版データ更新部212は、コマンド521dにしたがって、有版データ530aの部分534aのデータを、有版データ530bの部分534bに複写する。最後に、有版データ更新部212は、コマンド521eにしたがって、ソース524eが表わすデータを、有版データ530bの部分535bに追加する。
なお、複写する部分の順序が入れ替わっていてもよいし、複写元の部分が重複していてもよい。
差分データがこのような形式である場合、適用前の版の有版データから適用後の版の有版データを生成することはできるが、適用後の版の有版データから適用前の版の有版データを生成することはできない。適用前の版の有版データのうち、適用後の版の有版データに複写されない部分(この例では、部分533a)のデータが失われるからである。すなわち、この形式の差分データは、片方向にしか適用できない差分データである。
差分生成部113は、CPU911を用いて、2つの有版データを比較して、一方の版から他方の版を生成するための差分データを生成する。例えば、古い版を適用前の版とし、新しい版を適用語の版として、差分生成部113は、古い版から新しい版を生成するための差分データを生成する。しかし、上述したようにバージョンダウンしたいという要望も存在する可能性を考慮して、差分生成部113は、古い版から新しい版を生成するための差分データだけでなく、新しい版を適用前の版とし、古い版を適用後の版として、新しい版から古い版を生成するための差分データを生成する構成とするのが好ましい。
差分記憶部115,222は、このような差分データを複数記憶する。
差分合成部133,224は、差分記憶部115,222が記憶した差分データを解釈して、合成した新しい差分データを生成する。
有版データ更新部212は、差分記憶部222が記憶した差分データを解釈して、順番どおりにコマンドを実行することにより、有版データ記憶部211が記憶した有版データを更新し、更新後の版の有版データを生成する。
図9は、この実施の形態における差分生成処理S610の流れの一例を示すフローチャート図である。
差分生成処理S610において、差分生成部113は、CPU911を用いて、2つの有版データ530から差分データを生成する。以下では、旧版データを新版データに更新するための差分データを差分生成部113が生成する手順について説明する。新版データを旧版データに更新するための差分データを生成する手順は、旧版データと新版データとを逆にすればよいので、説明を省略する。
差分生成処理S610は、新版単位取得工程S611、旧版単位取得工程S613、単位比較工程S615、一致長更新工程S617、2つの一致長判定工程S621,S631、2つの不一致判定工程S623,S633、3つの追加コマンド生成工程S625,S635,S639、2つの複写コマンド生成工程S627,S637を有する。
新版単位取得工程S611において、差分生成部113は、CPU911を用いて、新版データの最初から順に、1つの単位となるデータ量の部分(以下「新版単位データ」と呼ぶ。)を取得する。1つの単位となるデータ量とは、例えば1バイトでもよいし、1キロバイトでもよい。1つの単位となるデータ量を小さくすれば、その分、旧版データと新版データとで一致する部分が多くなることが予想されるので、差分データのデータ量が小さくなる。逆に、1つの単位となるデータ量を大きくすれば、差分データのデータ量は大きくなるが、差分生成処理S610によってCPU911にかかる負荷が小さくなる。同様に、差分合成部133,224が差分データを合成する処理によってCPU911にかかる負荷も小さくなる。
新版データの最後まで到達し、差分生成部113が新版単位データを取得しなかった場合、差分生成部113は、一致長判定工程S631へ進む。
差分生成部113が新版単位データを取得した場合、差分生成部113は、旧版単位取得工程S613へ進む。
旧版単位取得工程S613において、差分生成部113は、CPU911を用いて、旧版データの最初から順に、新版単位データと同じデータ量の部分(以下「旧版単位データ」と呼ぶ。)を取得する。
旧版データの最後に到達し、差分生成部113が旧版単位データを取得しなかった場合、差分生成部113は、一致長判定工程S621へ進む。
差分生成部113が旧版単位データを取得した場合、差分生成部113は、単位比較工程S615へ進む。
単位比較工程S615において、差分生成部113は、CPU911を用いて、新版単位取得工程S611で取得した新版単位データと、旧版単位取得工程S613で取得した旧版単位データとを比較する。
新版単位データと旧版単位データとが一致すると差分生成部113が判定した場合、差分生成部113は、一致長更新工程S617へ進む。
新版単位データと旧版単位データとが一致しないと差分生成部113が判定した場合、差分生成部113は、旧版単位取得工程S613に戻り、次の旧版単位データを取得する。
一致長更新工程S617において、差分生成部113は、CPU911を用いて、新版単位データと一致した旧版単位データの位置(以下「一致位置」と呼ぶ。)と、それより前の新版単位データと旧版単位データとが連続して一致していた数(以下「一致長」と呼ぶ。)とを表わすデータ(以下「一致長データ」と呼ぶ。)を生成する。差分生成部113は、RAM914を用いて、生成した一致長データを記憶する。新版単位データと一致する旧版単位データが複数ある場合もあるので、差分生成部113は、一つの新版単位データについて、複数の一致長データを記憶する場合がある。
例えば、差分生成部113は、CPU911を用いて、新版単位取得工程S611で取得した新版単位データより一つ前の新版単位データについてRAM914を用いて記憶した一致長データを取得する。差分生成部113は、CPU911を用いて、取得した一致長データのなかから、一致長データが表わす一致位置が、旧版単位取得工程S613で取得した旧版単位データより一つ前の旧版単位データの位置である一致長データを抽出する。差分生成部113は、CPU911を用いて、抽出した一致長データが表わす一致長に1を加えた和を算出し、算出した和を一致長に設定する。一つ前の新版単位データについて記憶した一致長データがない場合や、取得した一致長データのなかに、一致長データが表わす一致位置が一つ前の旧版単位データの位置である一致長データがない場合、差分生成部113は、CPU911を用いて、1を一致長に設定する。差分生成部113は、CPU911を用いて、旧版単位取得工程S613で取得した旧版単位データの位置と、設定した一致長とを表わす一致長データを生成し、RAM914を用いて、生成した一致長データを記憶する。
その後、差分生成部113は、旧版単位取得工程S613に戻り、次の旧版単位データを取得する。
一致長判定工程S621において、差分生成部113は、CPU911を用いて、新版単位取得工程S611で取得した新版単位データについて一致長更新工程S617で記憶した一致長データのなかから、一致長データが表わす一致長が最も大きい一致長(以下「最大一致長」と呼ぶ。)を算出する。現在の新版単位データについて記憶した一致長データがない場合、差分生成部113は、CPU911を用いて、0を最大一致長に設定する。差分生成部113は、RAM914を用いて、算出した最大一致長を記憶する。
差分生成部113は、CPU911を用いて、算出した最大一致長と、新版単位取得工程S611で取得した新版単位データより一つ前の新版単位データについてRAM914を用いて記憶した最大一致長とを比較する。
算出した最大一致長が、記憶した一つ前の最大一致長より小さい場合、一つ前の新版単位データの位置で、旧版データと新版データとが一致する部分が途切れたことを意味する。差分生成部113は、複写コマンドを生成するため、不一致判定工程S623へ進む。
算出した最大一致長が、記憶した一つ前の最大一致長以上である場合、差分生成部113は、新版単位取得工程S611に戻り、次の新版単位データを取得する。
なお、一致する部分のサイズが小さい場合、複写コマンドを生成するよりも、前後の不一致部分と合わせて一つの追加コマンドを生成したほうが、差分データのデータ量が小さくなる場合がある。このため、算出した最大一致長が、記憶した一つ前の最大一致長より小さい場合であっても、記憶した一つ前の最大一致長が所定の閾値以下である場合は、新版単位取得工程S611に戻る構成であってもよい。
不一致判定工程S623において、差分生成部113は、CPU911を用いて、一つ前の新版単位データについてRAM914を用いて記憶した最大一致長に基づいて、新版データにおける一致部分の開始位置を算出する。差分生成部113は、CPU911を用いて、算出した開始位置を、既に生成したコマンドにより生成される新版データの終了位置と比較する。
算出した開始位置が、既に生成したコマンドにより生成される新版データの終了位置の次の位置である場合、一致部分が連続していることを意味する。差分生成部113は、複写コマンド生成工程S627へ進む。
算出した開始位置が、既に生成したコマンドにより生成される新版データの終了位置の次の位置よりもあとである場合、一致部分の間に不一致部分があることを意味する。差分生成部113は、不一致部分について追加コマンドを生成するため、追加コマンド生成工程S625へ進む。
追加コマンド生成工程S625において、差分生成部113は、CPU911を用いて、追加コマンドを生成する。
例えば、差分生成部113は、CPU911を用いて、不一致判定工程S623で算出した開始位置と、既に生成したコマンドにより生成される新版データの終了位置とに基づいて、不一致部分のサイズを算出し、新版データのなかから追加する不一致部分のデータを取得する。差分生成部113は、CPU911を用いて、算出したサイズをサイズ523に設定し、取得したデータをソース524に設定した追加コマンドを生成する。
差分生成部113は、CPU911を用いて、生成中の差分データの後ろに、生成した追加コマンドを追加する。差分生成部113は、HDD920を用いて、生成した追加コマンドを追加した差分データを記憶する。
複写コマンド生成工程S627において、差分生成部113は、CPU911を用いて、複写コマンドを生成する。
例えば、差分生成部113は、CPU911を用いて、新版単位取得工程S611で取得した新版単位データより一つ前の新版単位データについて記憶した一致長データのなかから、一致長データが表わす一致長が、一つ前の新版単位データについて記憶した最大一致長に一致する一致長データを取得する。差分生成部113は、CPU911を用いて、取得した一致長データが表わす位置に基づいて、旧版データから複写する一致部分の開始位置を算出する。差分生成部113は、CPU911を用いて、一つ前の新版単位データについて記憶した最大一致長をサイズ523に設定し、算出した開始位置をソース524に設定した追加コマンドを生成する。
差分生成部113は、CPU911を用いて、生成中の差分データの後ろに、生成した複写コマンドを追加する。差分生成部113は、HDD920を用いて、生成した複写コマンドを追加した差分データを記憶する。
差分生成部113は、RAM914を用いて、既に生成したコマンドにより生成できる新版データの終了位置として、新版単位取得工程S611で取得した新版単位データの一つ前の新版単位データの終了位置を記憶する。
その後、差分生成部113は、新版単位取得工程S611に戻り、次の新版単位データを取得する。
一致長判定工程S631〜複写コマンド生成工程S637は、新版データの最後まで処理した後、コマンドをまだ生成していない部分についてコマンドを生成するための処理であり、基本的には、一致長判定工程S621〜複写コマンド生成工程S627と同じである。そのため、詳しい説明は省略し、概要を説明する。
一致長判定工程S631において、差分生成部113は、CPU911を用いて、新版単位取得工程S611で最後に取得した新版単位データについて最大一致長を算出する。
算出した最大一致長が0(あるいは所定の閾値以下)である場合、新版データの最後の部分が不一致部分であることを意味する。差分生成部113は、追加コマンド生成工程S639へ進む。
算出した最大一致長が0(あるいは所定の閾値)より大きい場合、新版データの最後の部分が一致部分であることを意味する。差分生成部113は、不一致判定工程S633へ進む。
不一致判定工程S633において、差分生成部113は、CPU911を用いて、最後の一致部分の前に不一致部分があるか否かを判定する。
不一致部分があると判定した場合、差分生成部113は、追加コマンド生成工程S635へ進む。
不一致部分がなく、一致部分が連続していると判定した場合、差分生成部113は、複写コマンド生成工程S637へ進む。
追加コマンド生成工程S635において、差分生成部113は、CPU911を用いて、追加コマンドを生成する。
複写コマンド生成工程S637において、差分生成部113は、CPU911を用いて、複写コマンドを生成する。
その後、差分生成部113は、差分生成処理S610を終了する。
追加コマンド生成工程S639において、差分生成部113は、CPU911を用いて、追加コマンドを生成する。
例えば、差分生成部113は、CPU911を用いて、既に生成したコマンドにより生成される新版データの終了位置に基づいて、不一致部分のサイズを算出し、新版データのなかから追加する不一致部分のデータを取得する。差分生成部113は、CPU911を用いて、算出したサイズをサイズ523に設定し、取得したデータをソース524に設定した追加コマンドを生成する。
差分生成部113は、CPU911を用いて、生成中の差分データの後ろに、生成した追加コマンドを追加する。差分生成部113は、HDD920を用いて、生成した追加コマンドを追加した差分データを記憶する。
その後、差分生成部113は、差分生成処理S610を終了する。
なお、差分生成処理S610は、上記説明した手順に限らず、他の手順で実行する構成であってもよい。
図10は、この実施の形態におけるデータ更新処理S650の流れの一例を示すフローチャート図である。
データ更新処理S650において、有版データ更新部212は、差分記憶部222が記憶した差分データを、有版データ記憶部211が記憶した有版データに適用して、更新版の有版データを生成する。データ更新処理S650は、コマンド取得工程S651、データ追加工程S653、データ複写工程S655、データ更新工程S657を有する。
コマンド取得工程S651において、有版データ更新部212は、CPU911を用いて、差分記憶部222が記憶した差分データのなかから、有版データ記憶部211が記憶した有版データに適用する差分データを取得する。有版データ更新部212は、CPU911を用いて、取得した差分データの最初の位置にポインタを設定する。有版データ更新部212は、RAM914を用いて、設定したポインタを記憶する。
有版データ更新部212は、コマンド取得工程S651で取得した差分データのうち、RAM914を用いて記憶したポインタが表わす位置から、CPU911を用いて、コマンドの命令522と、サイズ523とを取得する。
ポインタが表わす位置が差分データの最後であり、有版データ更新部212が命令522を取得しなかった場合、有版データ更新部212は、データ更新工程S657へ進む。
有版データ更新部212が命令522とサイズ523とを取得した場合、有版データ更新部212は、CPU911を用いて、取得したサイズ523の次の位置(ソース524の位置)へポインタを進める。有版データ更新部212は、RAM914を用いて、進めたポインタを記憶する。有版データ更新部212は、取得した命令522に基づいて、そのコマンドが複写コマンドであるか追加コマンドであるかを判定する。
そのコマンドが追加コマンドである場合、有版データ更新部212は、データ追加工程S653へ進む。
そのコマンドが複写コマンドである場合、有版データ更新部212は、データ複写工程S655へ進む。
データ追加工程S653において、有版データ更新部212は、コマンド取得工程S651で取得した差分データのうち、RAM914を用いて記憶したポインタが表わす位置から、CPU911を用いて、サイズ523が表わすバイト数のデータをソース524として取得する。有版データ更新部212は、CPU911を用いて、取得したソース524の次の位置(次のコマンドの命令522の位置または差分データの最後)へポインタを進める。有版データ更新部212は、RAM914を用いて、進めたポインタを記憶する。
有版データ更新部212は、CPU911を用いて、生成中の有版データの後ろに、取得したソース524を追加する。有版データ更新部212は、HDD920を用いて、ソース524を追加した生成中の有版データを記憶する。
その後、有版データ更新部212は、コマンド取得工程S651に戻り、次のコマンドを処理する。
データ複写工程S655において、有版データ更新部212は、コマンド取得工程S651で取得した差分データのうち、RAM914を用いて記憶したポインタが表わす位置から、CPU911を用いて、ソース524を取得する。有版データ更新部212は、CPU911を用いて、取得したソース524の次の位置(次のコマンドの命令522の位置または差分データの最後)へポインタを進める。有版データ更新部212は、RAM914を用いて、進めたポインタを記憶する。
有版データ更新部212は、CPU911を用いて、有版データ記憶部211が記憶した有版データから、ソース524が表わす開始位置からサイズ523が表わすバイト数のデータを取得する。有版データ更新部212は、CPU911を用いて、生成中の有版データの後ろに、取得したデータを追加する。有版データ更新部212は、HDD920を用いて、データを追加した生成中の有版データを記憶する。
その後、有版データ更新部212は、コマンド取得工程S651に戻り、次のコマンドを処理する。
データ更新工程S657において、有版データ更新部212は、HDD920を用いて記憶した生成中の有版データを、更新後の有版データとして、CPU911を用いて、有版データ記憶部211に通知する。有版データ記憶部211は、HDD920を用いて、有版データ更新部212から通知された更新後の有版データを記憶する。
このように、有版データ更新部212は、差分データが表わすコマンドを最初から順に解釈し、解釈したコマンドにしたがって、更新後の有版データを生成する。
図11は、この実施の形態における差分合成処理S670の流れの一例を示すフローチャート図である。
差分合成処理S670において、差分合成部133は、差分記憶部115が記憶した2つの差分データを合成して、新しい差分データを生成する。なお、差分記憶部222が記憶した2つの差分データを合成して差分合成部224が新しい差分データを生成する処理の流れも、差分合成処理S670と同じである。
差分合成処理S670は、コマンド取得工程S671、2つの追加コマンド生成工程S673,S677、複写部分取得工程S675、複写コマンド生成工程S679を有する。
以下の説明において、有版データに順次適用できる2つの差分データのうち、初めに適用するほうを第一の差分データ、後から適用するほうを第二の差分データと呼ぶ。また、合成により生成される差分データを第三の差分データと呼ぶ。すなわち、第一の差分データが、有版データの第一の版に適用して第二の版を生成するための差分データであるとすると、第二の差分データは、有版データの第二の版に適用して第三の版を生成するための差分データであり、第三の差分データは、有版データの第一の版に適用して第三の版を生成するための差分データである。
コマンド取得工程S671において、差分合成部133は、CPU911を用いて、差分記憶部115が記憶した差分データのなかから、第二の差分データを取得する。差分合成部133は、CPU911を用いて、取得した差分データの最初の位置にポインタを設定する。差分合成部133は、RAM914を用いて、設定したポインタを記憶する。
差分合成部133は、コマンド取得工程S671で取得した第二の差分データのうち、RAM914を用いて記憶したポインタが表わす位置から、CPU911を用いて、コマンドの命令522と、サイズ523とを取得する。
ポインタが表わす位置が第二の差分データの最後であり、差分合成部133が命令522を取得しなかった場合、差分合成部133は、差分合成処理S670を終了する。
差分合成部133が命令522とサイズ523とを取得した場合、差分合成部133は、CPU911を用いて、取得したサイズ523の次の位置(ソース524の位置)へポインタを進める。差分合成部133は、RAM914を用いて、進めたポインタを記憶する。差分合成部133は、取得した命令522に基づいて、そのコマンドが複写コマンドであるか追加コマンドであるかを判定する。
そのコマンドが追加コマンドである場合、差分合成部133は、追加コマンド生成工程S673へ進む。
そのコマンドが複写コマンドである場合、差分合成部133は、複写部分取得工程S675へ進む。
追加コマンド生成工程S673において、差分合成部133は、コマンド取得工程S671で取得した第二の差分データのうち、RAM914を用いて記憶したポインタが表わす位置から、CPU911を用いて、サイズ523が表わすバイト数のデータをソース524として取得する。差分合成部133は、CPU911を用いて、取得したソース524の次の位置(次のコマンドの命令522の位置または第二の差分データの最後)へポインタを進める。差分合成部133は、RAM914を用いて、進めたポインタを記憶する。
差分合成部133は、CPU911を用いて、取得したサイズ523をサイズ523に設定し、取得したソース524をソース524に設定した追加コマンドを生成する。すなわち、差分合成部133は、取得した追加コマンドを複製する。差分合成部133は、CPU911を用いて、生成中の第三の差分データの後ろに、生成した追加コマンドを追加する。差分合成部133は、HDD920を用いて、生成した追加コマンドを追加した第三の差分データを記憶する。
その後、差分合成部133は、コマンド取得工程S671に戻り、次のコマンドを処理する。
複写部分取得工程S675において、差分合成部133は、コマンド取得工程S671で取得した第二の差分データのうち、RAM914を用いて記憶したポインタが表わす位置から、CPU911を用いて、ソース524を取得する。差分合成部133は、CPU911を用いて、取得したソース524の次の位置(次のコマンドの命令522の位置または差分データの最後)へポインタを進める。差分合成部133は、RAM914を用いて、進めたポインタを記憶する。
差分合成部133は、CPU911を用いて、差分記憶部115が記憶した差分データのなかから、第一の差分データを取得する。差分合成部133は、CPU911を用いて、取得した第一の差分データに含まれるコマンドを解釈して、第一の差分データに含まれるコマンドのなかから、有版データの第二の版において、取得したソース524が表わす開始位置からサイズ523が表わすバイト数のデータ(以下「複写部分データ」と呼ぶ。)を生成するコマンドを抽出する。複写部分データを生成するコマンドは、1つとは限らず、複数ある場合がある。また、複写部分データを生成するコマンドは、複写部分データだけでなく、その前後のデータも合わせて生成するものである場合がある。
例えば、差分合成部133は、CPU911を用いて、第一の差分データの最初から順にコマンドを1つずつ取得する。最初のコマンドが生成するデータの範囲の開始位置は「0」である。二番目以降のコマンドが生成するデータの範囲の開始位置は、それより前のコマンドのサイズ523の合計である。差分合成部133は、CPU911を用いて、取得したコマンドのサイズ523を累計することにより、そのコマンドにより生成されるデータの開始位置を算出する。差分合成部133は、CPU911を用いて、算出した開始位置とサイズ523とに基づいて、そのコマンドにより生成されるデータが、有版データの第二の版において複写部分データに含まれるか否かを判定する。
差分合成部133は、CPU911を用いて、第一の差分データから抽出したコマンドのなかから、コマンドを1つ取得する。第一の差分データから抽出したコマンドが複数である場合、差分合成部133は、複数のコマンドを最初から順に1つずつ処理する。
第一の差分データから抽出したコマンドの処理がすべて終了し、取得すべきコマンドがない場合、差分合成部133は、コマンド取得工程S671に戻り、第二の差分データにおける次のコマンドを処理する。
第一の差分データから抽出したコマンドを取得した場合、差分合成部133は、CPU911を用いて、取得したコマンドが複写コマンドであるか追加コマンドであるかを判定する。
取得したコマンドが追加コマンドである場合、差分合成部133は、追加コマンド生成工程S677へ進む。
取得したコマンドが複写コマンドである場合、差分合成部133は、複写コマンド生成工程S679へ進む。
追加コマンド生成工程S677において、差分合成部133は、CPU911を用いて、複写部分取得工程S675で取得した追加コマンドに基づいて、追加コマンドを生成する。
例えば、複写部分取得工程S675で取得した追加コマンドにより生成されるデータが、有版データの第二の版において複写部分データのなかに完全に含まれている場合、差分合成部133は、CPU911を用いて、複写部分取得工程S675で取得した追加コマンドのサイズ523をサイズ523に設定し、ソース524をソース524に設定した追加コマンドを生成する。すなわち、差分合成部133は、複写部分取得工程S675で取得した追加コマンドを複製する。
複写部分取得工程S675で取得した追加コマンドにより生成されるデータが、有版データの第二の版において複写部分データに含まれない部分を含む場合、差分合成部133は、CPU911を用いて、複写部分取得工程S675で取得した追加コマンドのソース524のなかから、複写部分データに含まれる部分のデータを切り出す。差分合成部133は、CPU911を用いて、切り出したデータのサイズをサイズ523に設定し、切り出したデータをソース524に設定した追加コマンドを生成する。
差分合成部133は、CPU911を用いて、生成中の第三の差分データの後ろに、生成した追加コマンドを追加する。差分合成部133は、HDD920を用いて、生成した追加コマンドを追加した第三の差分データを記憶する。
その後、差分合成部133は、複写部分取得工程S675に戻り、第一の差分データから抽出した次のコマンドを処理する。
複写コマンド生成工程S679において、差分合成部133は、CPU911を用いて、複写部分取得工程S675で取得した複写コマンドに基づいて、複写コマンドを生成する。
例えば、複写部分取得工程S675で取得した複写コマンドにより生成されるデータが、有版データの第二の版において複写部分データのなかに完全に含まれている場合、差分合成部133は、CPU911を用いて、複写部分取得工程S675で取得した複写コマンドのサイズ523をサイズ523に設定し、ソース524をソース524に設定した複写コマンドを生成する。すなわち、差分合成部133は、複写部分取得工程S675で取得した複写コマンドを複製する。
複写部分取得工程S675で取得した複写コマンドにより生成されるデータが、有版データの第二の版において複写部分データより前の部分のデータ(以下「前部分データ」と呼ぶ。)を含む場合、差分合成部133は、CPU911を用いて、複写部分取得工程S675で取得した複写コマンドにより生成されるデータのうち、複写部分に含まれる部分のデータ(以下「承継部分データ」と呼ぶ。)のサイズを算出する。また、差分合成部133は、CPU911を用いて、前部分データのサイズを算出する。差分合成部133は、CPU911を用いて、複写部分取得工程S675で取得した複写コマンドのソース524に、算出した前部分データのサイズを加えた和を算出する。差分合成部133は、CPU911を用いて、算出した承継部分データのサイズをサイズ523に設定し、算出した和をソース524に設定した複写コマンドを生成する。
複写部分取得工程S675で取得した複写コマンドにより生成されるデータが、前部分データを含まず、有版データの第二の版において複写部分データより後の部分のデータ(以下「後部分データ」と呼ぶ。)を含む場合、差分合成部133は、CPU911を用いて、承継部分データのサイズを算出する。差分合成部133は、CPU911を用いて、算出したサイズをサイズ523に設定し、複写部分取得工程S675で取得した複写コマンドのソース524をソース524に設定した複写コマンドを生成する。
差分合成部133は、CPU911を用いて、生成中の第三の差分データの後ろに、生成した複写コマンドを追加する。差分合成部133は、HDD920を用いて、生成した複写コマンドを追加した第三の差分データを記憶する。
その後、差分合成部133は、複写部分取得工程S675に戻り、第一の差分データから抽出した次のコマンドを処理する。
このように、差分合成部133(および差分合成部224)は、差分データを適用する有版データを用いることなく、差分データを合成する。差分データのデータ量は、有版データのデータ量より小さいので、差分データを有版データに適用する場合と比較して、使用するRAM914やHDD920の記憶領域の容量が少なくて済み、CPU911にかかる負荷が小さくなる。
特に、端末装置200には、CPU911の処理能力が低いものやHDD920の記憶容量が小さいものが存在する。有版データに複数の差分データを順次適用して有版データを更新するよりも、差分データを合成してから、有版データに1回だけ適用するほうが、CPU911にかかる負荷が小さく、使用する記憶領域の容量が少なくて済むので、処理速度が向上し、端末装置200が並列して実行する他の処理に影響を与えることなく、有版データを更新することができる。
図12は、この実施の形態における差分データ520bの一例を示す図である。
図13は、この実施の形態における差分データ520cの一例を示す図である。
図7に示した差分データ520が第一の差分データであるものとし、図12に示した差分データ520bが第二の差分データであるものとする。差分データ520cは、差分合成部133(あるいは差分合成部224)が差分データ520と差分データ520bとを合成して生成する第三の差分データである。
以下、図11のフローチャートを参照しつつ、差分合成部133の動作の具体例を説明する。
コマンド取得工程S671において、差分合成部133は、差分データ520bから最初のコマンド521fの命令522「copy」、サイズ523「4000」を取得する。
命令522「copy」は複写コマンドを表わすので、複写部分取得工程S675へ進む。
差分合成部133は、コマンド521fのソース524「0」を取得する。差分合成部133は、差分データ520のなかから、有版データ530bの0バイト目(最初)から3999バイト目までの4000バイトの部分のデータ(複写部分データ)を生成するコマンドを抽出する。
差分データ520には、5つのコマンド521a〜521eが含まれる。コマンド521aは、有版データ530bの0バイト目から3199バイト目までの3200バイトの部分531bのデータを生成するコマンドである。コマンド521bは、有版データ530bの3200バイト目から4399バイト目までの1200バイトの部分532bのデータを生成するコマンドである。コマンド521cは、有版データ530bの4400バイト目から8999バイト目までの4600バイトの部分533bのデータを生成するコマンドである。コマンド521dは、有版データ530bの9000バイト目から11599バイト目までの2600バイトの部分534bのデータを生成するコマンドである。コマンド521eは、有版データ530bの11600バイト目から13399バイト目(最後)までの1800バイトの部分535bのデータを生成するコマンドである。したがって、差分合成部133は、2つのコマンド521a,521bを抽出する。
差分合成部133は、抽出したコマンドを前から順に処理するため、まず、コマンド521aを取得する。
なお、差分合成部133は、差分合成処理S670の開始に先立ち、CPU911を用いて、あらかじめ差分データ520のどのコマンドが有版データ530bのどの位置のデータを生成するものであるかを算出しておく構成であってもよい。差分合成部133は、算出した結果を表わすテーブルなど検索しやすい形式のデータを生成して、RAM914を用いて記憶しておく。複写部分取得工程S675において、差分合成部133は、あらかじめ記憶したデータを検索することにより、コマンドを抽出する。これにより、複写部分取得工程S675の処理を速くすることができる。
コマンド521aは複写コマンドなので、複写コマンド生成工程S679へ進む。
コマンド521aにより生成される3200バイトのデータは、有版データ530bにおいて複写部分データに完全に含まれるので、差分合成部133は、コマンド521aを複製して、複写コマンド521jを生成する。
複写部分取得工程S675に戻り、差分合成部133は、次のコマンド521bを取得する。
コマンド521bは追加コマンドなので、追加コマンド生成工程S677へ進む。
コマンド521bにより生成される1200バイトのデータのうち、有版データ530bにおいて複写部分データに含まれるのは前半の800バイトだけである。差分合成部133は、ソース524bから前半の800バイトを切り出す。差分合成部133は、切り出したデータのサイズ「800」をサイズ523に設定し、切り出したデータをソース524kに設定した追加コマンド521kを生成する。
複写部分取得工程S675に戻り、抽出した2つのコマンド521a,521bの処理が終わったので、コマンド取得工程S671に戻る。
差分合成部133は、差分データ520bから次のコマンド521gの命令522「copy」、サイズ523「4400」を取得する。
命令522「copy」は複写コマンドを表わすので、再び複写部分取得工程S675へ進む。
差分合成部133は、コマンド521gのソース524「5200」を取得する。差分合成部133は、差分データ520のなかから、有版データ530bの5200バイト目から4400バイトの部分のデータ(複写部分データ)を生成するコマンドである2つのコマンド521c,521dを抽出する。
差分合成部133は、抽出したコマンドを前から順に処理するため、まず、コマンド521cを取得する。
コマンド521cは複写コマンドなので、複写コマンド生成工程S679へ進む。
コマンド521cにより生成される4600バイトのデータのうち、有版データ530bにおいて複写部分データに含まれる部分のデータ(承継部分データ)は後半の3800バイトだけであり、それより前の800バイトは複写部分データに含まれない前部分データである。差分合成部133は、承継部分データのサイズ「3800」をサイズ523に設定し、コマンド521cのソース524「3200」に前部分データのサイズ「800」を加えた和「4000」をソース524に設定した複写コマンド521lを生成する。
複写部分取得工程S675に戻り、差分合成部133は、次のコマンド521dを取得する。
コマンド521dは複写コマンドなので、複写コマンド生成工程S679へ進む。
コマンド521dにより生成される2600バイトのデータのうち、有版データ530bにおいて複写部分データに含まれる部分のデータ(承継部分データ)は前半の600バイトだけである。差分合成部133は、承継部分データのサイズ「600」をサイズ523に設定し、コマンド521dのソース524「10200」をソース524に設定した複写コマンド521mを生成する。
複写部分取得工程S675に戻り、抽出した2つのコマンド521c,521dの処理が終わったので、コマンド取得工程S671に戻る。
差分合成部133は、差分データ520bから、次のコマンド521hの命令522「data」と、サイズ523「3000」とを取得する。
命令522「data」は追加コマンドを表わすので、追加コマンド生成工程S673へ進む。
差分合成部133は、コマンド521hを複製して、コマンド521nを生成する。
コマンド取得工程S671に戻り、差分合成部133は、差分データ520bから、次のコマンド521iの命令522「copy」と、サイズ523「2800」とを取得する。
命令522「copy」は複写コマンドを表わすので、複写部分取得工程S675へ進む。
差分合成部133は、コマンド521iのソース524「10600」を取得する。差分合成部133は、差分データ520のなかから、有版データ530bの10600バイト目から2800バイトの部分のデータ(複写部分データ)を生成するコマンドである2つのコマンド521d,521eを抽出する。
差分合成部133は、抽出したコマンドを前から順に処理するため、まず、コマンド521dを取得する。
コマンド521dは複写コマンドなので、複写コマンド生成工程S679へ進む。
コマンド521dにより生成される2600バイトのデータのうち、有版データ530bにおいて複写部分データに含まれる部分のデータ(承継部分データ)は後半の1000バイトだけであり、それより前の1600バイトは複写部分データに含まれない前部分データである。差分合成部133は、承継部分データのサイズ「1000」をサイズ523に設定し、コマンド521cのソース524「10200」に前部分データのサイズ「1600」を加えた和「11800」をソース524に設定した複写コマンド521oを生成する。
複写部分取得工程S675に戻り、差分合成部133は、次のコマンド521eを取得する。
コマンド521eは追加コマンドなので、追加コマンド生成工程S673へ進む。
コマンド521eにより生成される1800バイトのデータは、有版データ530bにおいて複写部分データに完全に含まれるので、差分合成部133は、コマンド521eを複製して、追加コマンド521pを生成する。
コマンド取得工程S671に戻り、差分データ520bのコマンドをすべて処理したので、差分合成処理S670を終了する。差分合成部133は、生成した7つのコマンド521j〜521pを差分データ520cとする。
図14は、この実施の形態における3つの有版データ530a〜530cの関係の一例を示す図である。
有版データ530aは、差分データ520を適用する適用前の版の有版データである。有版データ530bは、有版データ530aに差分データ520を適用した結果として生成される適用後の版の有版データであるとともに、差分データ520bを適用する適用前の版の有版データでもある。有版データ530cは、有版データ530bに差分データ520bを適用した結果として生成される適用後の版の有版データである。
有版データ530aと有版データ530bとの関係については、図8を用いて既に説明しているので、ここでは、主に有版データ530bと有版データ530cとの関係について説明する。
有版データ530cは、全部で14200バイトのデータである。
有版データ530cの0バイト目(最初)から3999バイト目までの4000バイトの部分531c(含有部分)のデータは、有版データ530bの0バイト目(最初)から3999バイト目までの4000バイトの部分541b(複写部分)のデータと同一である。そのうち、前半の3200バイトは、有版データ530aの部分531aから承継した部分531b(承継部分)であり、残りの800バイトは、有版データ530bで新たに追加された部分532bの一部(非承継部分)である。
有版データ530cの4000バイト目から8399バイト目までの4400バイトの部分532c(含有部分)のデータは、有版データ530bの5200バイト目から9599バイト目までの4400バイトの部分543b(複写部分)のデータと同一である。そのうち、前半の3800バイトは、有版データ530aの部分532aから承継した部分533bの一部(承継部分)であり、残りの600バイトは、有版データ530aの部分534aから承継した部分534bの一部(非承継部分)である。
有版データ530cの11400バイト目から14199バイト目(最後)までの2800バイトの部分534c(含有部分)のデータは、有版データ530bの10600バイト目から13399バイト目(最後)までの2800バイトの部分545b(複写部分)のデータと同一である。そのうち、前半の1000バイトは、有版データ530aの部分534aから承継した部分534bの一部(承継部分)であり、残りの1800バイトは、有版データ530bで新たに追加された部分535b(非承継部分)である。
有版データ530cの8400バイト目から11399バイト目までの3000バイトの部分533c(非含有部分)のデータは、有版データ530bのなかに一致する部分がなく、有版データ530cで新たに追加されたデータである。
図15は、この実施の形態における2つの有版データ530a,530cの関係の一例を示す図である。
有版データ530aは、差分データ520cを適用する適用前の版の有版データである。有版データ530cは、差分データ520cを適用した結果として生成される適用後の版の有版データである。差分データ520と差分データ520bとを合成した差分データ520cを有版データ530aに適用することにより、1回の適用で、有版データ530cを生成することができる。
有版データ530cの0バイト目(最初)から3199バイト目までの3200バイトの部分541cのデータは、有版データ530aの0バイト目(最初)から3199バイト目までの3200バイトの部分541aのデータと同一である。有版データ530cの4000バイト目から7799バイト目までの3800バイトの部分543cのデータは、有版データ530aの4000バイト目から7799バイト目までの部分543aのデータと同一である。有版データ530cの7800バイト目から8399バイト目までの600バイトの部分544cのデータは、有版データ530aの10200バイト目から10799バイト目までの600バイトの部分545aのデータと同一である。有版データ530cの11400バイト目から12399バイト目までの1000バイトの部分546cのデータは、有版データ530aの11800バイト目から12799バイト目(最後)までの1000バイトの部分547aのデータと同一である。有版データ530cのそれ以外の部分542c,545c,547cのデータは、有版データ530cで新たに追加されたデータである。
このように、差分合成部133および差分合成部224は、差分データを解釈することにより、データの承継関係を辿り、有版データの第一の版まで辿ることのできるデータは複写コマンドを使用して記述し、それ以外のデータは追加コマンドを使用して記述する。これにより、有版データを使わずに差分データを合成することができるとともに、複数の差分データを合成してデータ量の小さい差分データを生成することができる。
図16は、この実施の形態における配布判定処理S710の流れの一例を示すフローチャート図である。
配布判定処理S710において、配布判定部132は、要求取得部131が取得した差分要求メッセージに基づいて、配布すべき差分データを判定する。
配布判定処理S710は、更新版判定工程S711、適用版記憶工程S713、判定済記憶工程S715、差分版選択工程S721、適用判定工程S723、生成版算出工程S725、判定済判定工程S727、生成版記憶工程S729、配布判定工程S731、拒否判定工程S735を有する。
更新版判定工程S711において、配布判定部132は、CPU911を用いて、要求取得部131が取得した差分要求メッセージから、現版コードと更新版コードとを取得する。配布判定部132は、RAM914を用いて、取得した現版コードを、端末装置200が生成可能な版を表わす版コード(以下「生成版コード」と呼ぶ。)として記憶する。端末装置200は、現版コードが表わす版の有版データを所持している。その有版データに、端末装置200が現在所持している差分データや配布装置100が配布した差分データを適用すれば、異なる版の有版データを生成できる。配布判定部132は、このように、端末装置200が現に所持している版や生成可能な版の有版データに適用可能な差分データを辿ることにより、端末装置200が生成可能な版の有版データを判定し、更新版コードが表わす版にたどり着く道のりを検索する。
配布判定部132は、CPU911を用いて、記憶した生成版コードのなかに、取得した更新版コードと一致するものがあるかを判定する。
生成版コードのなかに更新版コードと一致するものがある場合、更新版コードが表わす版にたどり着く道のりが見つかったことを意味する。配布判定部132は、配布判定工程S731へ進む。
生成版コードのなかに更新版コードと一致するものがない場合、生成版コードが表わす版を出発点にして、差分データを適用することにより生成できる版を辿っていく。配布判定部132は、適用版記憶工程S713へ進む。
適用版記憶工程S713において、配布判定部132は、RAM914を用いて、記憶した生成版コードを、差分データを適用する適用前の版を表わす適用版コードとして記憶する。
記憶した生成版コードがない場合、更新版コードが表わす版への道のりをそれ以上辿れないことを意味する。配布判定部132は、拒否判定工程S735へ進む。
記憶した生成版コードがある場合、今度はそれを出発点にして道のりを辿っていく。配布判定部132は、記憶した生成版コードを初期化して消去する。配布判定部132は、判定済記憶工程S715へ進む。
判定済記憶工程S715において、配布判定部132は、RAM914を用いて、適用版記憶工程S713で記憶した適用版コードを、判定したことのある版を表わす判定済コードとして記憶する。これは、既に出発点にしたことのある版を再び出発点にすると無限の繰り返しになってしまうので、それを防ぐためである。
差分版選択工程S721において、配布判定部132は、CPU911を用いて、差分版記憶部125が記憶した差分版コードと、要求取得部131が取得した差分要求メッセージに含まれる端末装置200が所持している差分データを表わす差分版コードとの和集合のなかから、差分版コードを1つ選択する。配布判定部132は、差分版コードを1つずつ順に選択して、処理していく。
未処理の差分版コードがない場合、配布判定部132は、更新版判定工程S711に戻り、生成版コードのなかに更新版コードがあるかを判定する。
未処理の差分版コードを選択した場合、配布判定部132は、適用判定工程S723へ進む。
適用判定工程S723において、配布判定部132は、CPU911を用いて、差分版選択工程S721で選択した差分版コードに基づいて、その差分版コードに対応する差分データが、記憶した適用版コードが表わすいずれかの版の有版データに適用できるか否かを判定する。
選択した差分版コードに対応する差分データが、記憶した適用版コードが表わすいずれかの版の有版データに適用できると判定した場合、配布判定部132は、生成版算出工程S725へ進む。
選択した差分版コードに対応する差分データが、記憶した適用版コードが表わすいずれの版の有版データにも適用できないと判定した場合、配布判定部132は、差分版選択工程S721に戻り、次の差分版データを選択する。
生成版算出工程S725において、配布判定部132は、CPU911を用いて、差分版選択工程S721で選択した差分版コードに基づいて、その差分版コードに対応する差分データを有版データに適用することにより生成できる有版データの版を算出する。
判定済判定工程S727において、配布判定部132は、CPU911を用いて、記憶した判定済コードのなかに、生成版算出工程S725で算出した版を表わす版コードがあるかを判定する。
記憶した判定済コードのなかに、生成版算出工程S725で算出した版を表わす版コードがあると判定した場合、配布判定部132は、差分版選択工程S721に戻り、次の差分版データを選択する。
記憶した判定済コードのなかに、生成版算出工程S725で算出した版を表わす版コードがないと判定した場合、配布判定部132は、生成版記憶工程S729へ進む。
生成版記憶工程S729において、配布判定部132は、CPU911を用いて、生成版算出工程S725で算出した版を表わす版コードを、生成版コードとして記憶する。
その後、配布判定部132は、差分版選択工程S721に戻り、次の差分版データを選択する。
配布判定工程S731において、配布判定部132は、CPU911を用いて、更新版判定工程S711〜生成版記憶工程S729で辿った道のりに基づいて、端末装置200に配布すべき差分データを判定する。
その後、配布判定部132は、配布判定処理S710を終了する。
拒否判定工程S735において、配布判定部132は、CPU911を用いて、差分記憶部115が記憶している差分データを端末装置200に配布しても、更新版コードが表わす版の有版データを生成できないので、端末装置200からの要求を拒否すべきと判定する。配布判定部132の判定結果は、例えば、差分要求メッセージに対する応答として、端末装置200に対して送信する構成であってもよい。あるいは、表示装置901を用いて、配布判定部132の判定結果を表示し、配布装置100の管理者に対処を促す構成であってもよい。
図17は、この実施の形態における適用判定処理S740の流れの一例を示すフローチャート図である。
適用判定処理S740において、適用判定部240は、差分記憶部222が記憶した差分データを、有版データ更新部212が記憶した版の有版データに適用することにより、更新版コードが表わす版の有版データを生成できるかを判定する。
適用判定処理S740は、更新版判定工程S741、適用版記憶工程S743、判定済記憶工程S745、差分版選択工程S751、適用判定工程S753、生成版算出工程S755、判定済判定工程S757、生成版記憶工程S759、適用判定工程S761、差分取得工程S767を有する。
このうち、更新版判定工程S741〜生成版記憶工程S759の処理は、配布判定処理S710の更新版判定工程S711〜生成版記憶工程S729の処理と基本的に同じなので、簡単に説明する。
更新版判定工程S741において、単独適用判定部241(または合成適用判定部242)は、CPU911を用いて、現版コード記憶部213が記憶した現版コードと、更新版取得部231が取得した更新版コードとを取得する。単独適用判定部241(または合成適用判定部242)は、RAM914を用いて、現版コードを生成版コードとして記憶する。
単独適用判定部241(または合成適用判定部242)は、CPU911を用いて、生成版コードのなかに更新版コードと一致するものがあるかを判定する。
生成版コードのなかに更新版コードと一致するものがあると判定した場合、適用判定工程S761へ進む。
生成版コードのなかに更新版コードと一致するものがないと判定した場合、適用版記憶工程S743へ進む。
適用版記憶工程S743において、単独適用判定部241(または合成適用判定部242)は、RAM914を用いて、生成版コードを適用版コードとして記憶する。
生成版コードがない場合、差分要求工程S765へ進む。
生成版コードがある場合、判定済記憶工程S745へ進む。
判定済記憶工程S745において、単独適用判定部241(または合成適用判定部242)は、RAM914を用いて、適用版コードを判定済コードとして記憶する。
差分版選択工程S751において、単独適用判定部241(または合成適用判定部242)は、CPU911を用いて、差分版記憶部223が記憶した差分版コードのなかから、差分版コードを1つ選択する。
未処理の差分版コードがない場合、更新版判定工程S741に戻り、生成版コードのなかに更新版コードがあるかを判定する。
未処理の差分版コードを選択した場合、適用判定工程S753へ進む。
適用判定工程S753において、単独適用判定部241(または合成適用判定部242)は、CPU911を用いて、差分版選択工程S751で選択した差分版コードに対応する差分データが、適用版コードが表わす版の有版データに適用できるか否かを判定する。
適用できると判定した場合、生成版算出工程S755へ進む。
適用できないと判定した場合、差分版選択工程S751に戻り、次の差分版データを選択する。
生成版算出工程S755において、単独適用判定部241(または合成適用判定部242)は、CPU911を用いて、差分版選択工程S751で選択した差分版コードの適用により生成できる有版データの版を算出する。
判定済判定工程S757において、単独適用判定部241(または合成適用判定部242)は、CPU911を用いて、判定済コードのなかに、生成版算出工程S755で算出した版を表わす版コードがあるか否かを判定する。
判定済コードのなかに算出した版を表わす版コードがあると判定した場合、差分版選択工程S751に戻り、次の差分版データを選択する。
判定済コードのなかに算出した版を表わす版コードがないと判定した場合、生成版記憶工程S759へ進む。
生成版記憶工程S759において、単独適用判定部241(または合成適用判定部242)は、CPU911を用いて、生成版算出工程S755で算出した版を表わす版コードを生成版コードとして記憶する。
その後、差分版選択工程S751に戻り、次の差分版データを選択する。
適用判定工程S761において、単独適用判定部241(または合成適用判定部242)は、CPU911を用いて、更新版判定工程S741〜生成版記憶工程S759で辿った道のりに基づいて、差分記憶部222が記憶した差分データのうちから、有版データ記憶部211が記憶した有版データに適用すべき差分データを判定する。
その後、適用判定処理S740を終了する。
差分要求工程S765において、差分要求部243は、CPU911を用いて、配布装置100に対して差分データの配布を要求する差分要求メッセージを生成する。差分要求部243は、CPU911を用いて、生成した差分要求メッセージを配布装置100に対して通知する。
通知した差分要求メッセージに対する応答として、配布装置100から差分データが配布されてきた場合は、差分取得工程S767へ進む。
通知した差分要求メッセージが拒否された場合は、適用判定処理S740を終了する。
差分取得工程S767において、差分取得部221は、CPU911を用いて、配布装置100から配布された差分データを取得する。差分記憶部222は、HDD920を用いて、差分取得部221が取得した差分データを記憶する。差分版記憶部223は、HDD920を用いて、差分取得部221が取得した差分データに対応する差分版コードを記憶する。
その後、更新版判定工程S741に戻り、適用判定処理S740を最初からやり直す。
図18は、この実施の形態における差分データ520d〜520kと有版データ530d〜530iとの関係の一例を示す模式図である。
この図において、有版データ530d〜530iは、丸で示し、差分データ520d〜520kは、矢印で示している。矢印の根元は、その差分データを適用できる有版データを示し、矢印の先は、その差分データを適用した結果として生成される有版データを示す。例えば、差分データ520dは、有版データ530dに適用できる差分データであり、有版データ530dに適用した結果、有版データ530eを生成することができる差分データである。
差分記憶部222は、8つの差分データ520d〜520kを記憶しているものとする。これに対応して、差分版記憶部223は、8つの差分版コードを記憶している。有版データ記憶部211は、有版データ530dを記憶しているものとする。利用者は、有版データ530iを取得したいものとする。
以下、図17に示したフローチャートを参照しつつ、適用判定部240の動作の具体例を説明する。
更新版判定工程S741において、単独適用判定部241は、有版データ530dの版を表わす現版コードと、有版データ530iの版を表わす更新版コードとを取得する。単独適用判定部241は、有版データ530dの版を表わす現版コードを生成版コードとして記憶する。
記憶した生成版コードのなかに更新版コードがないので、適用版記憶工程S743へ進み、単独適用判定部241は、記憶した生成版コードを適用版コードとして記憶する。これにより、単独適用判定部241は、適用版コードとして、有版データ530dの版を表わす版コードを記憶する。
生成版コードがあったので、判定済記憶工程S745へ進み、単独適用判定部241は、記憶した適用版コードを判定済コードとして記憶する。これにより、単独適用判定部241は、適用版コードとして、有版データ530dの版を表わす版コードを記憶する。
差分版選択工程S751において、単独適用判定部241は、差分版記憶部223が記憶した8つの差分版コードのなかから差分版コードを1つ選択する。例えば、単独適用判定部241は、差分データ520dに対応する差分版コードを選択する。
適用判定工程S753において、差分データ520dは有版データ530dに適用できるので、生成版算出工程S755へ進み、単独適用判定部241は、差分データ520dを有版データ530dに適用した結果として生成される有版データが有版データ530eであることを算出する。
判定済判定工程S757において、判定済コードのなかに有版データ530eの版を表わす版コードがないので、生成版記憶工程S759へ進み、単独適用判定部241は、有版データ530eの版を表わす版コードを生成版コードとして記憶する。
差分版選択工程S751に戻り、単独適用判定部241は、未処理の7つの差分版コードのなかから、次の差分版コードを選択する。例えば、単独適用判定部241は、差分データ520eに対応する差分版コードを選択する。
適用判定工程S753において、差分データ520eは有版データ530dに適用できないので、差分版選択工程S751に戻る。
単独適用判定部241は、未処理の6つの差分版コードのなかから、次の差分版コードを選択する。例えば、単独適用判定部241は、差分データ520fに対応する差分版コードを選択する。
差分データ520fは有版データ530dに適用できるので、単独適用判定部241は、適用の結果得られる有版データが有版データ530gであることを算出する。判定済コードのなかに有版データ530gの版を表わす版データがないので、単独適用判定部241は、有版データ530gの版を表わす版コードを生成版コードとして記憶する。これにより、単独適用判定部241は、生成版コードとして、有版データ530eの版を表わす版コードと、有版データ530gの版を表わす版コードとを記憶する。
差分版選択工程S751に戻り、単独適用判定部241は、未処理の5つの差分版コードのなかから、次の差分版コードを選択する。残りの差分版コードに対応する差分データ520g〜520kはいずれも有版データ530dに適用できないので、適用判定工程S753で差分版選択工程S751に戻される。
未処理の差分版コードがなくなると、更新版判定工程S741に戻り、単独適用判定部241は、記憶した生成版コードのなかに更新版コードがあるか否かを判定する。単独適用判定部241が記憶した生成版コードが表わす版の有版データは、有版データ530e及び有版データ530gなので、有版データ530iの版を表わす更新版コードと一致する生成版コードはない。そのため、適用版記憶工程S743へ進む。
適用版記憶工程S743において、合成適用判定部242は、単独適用判定部241が記憶した生成版コードを適用版コードとして記憶する。合成適用判定部242が記憶した適用版コードが表わす版の有版データは、有版データ530e及び有版データ530gである。
判定済記憶工程S745において、合成適用判定部242は、記憶した適用版コードを単独適用判定部241が記憶した判定済コードと合わせて、判定済コードとして記憶する。合成適用判定部242が記憶した判定済コードが表わす版の有版データは、有版データ530d,530e,530gの3つである。
差分版選択工程S751において、合成適用判定部242は、差分版記憶部223が記憶した差分版コードのなかから、差分版コードを1つ選択する。
例えば、合成適用判定部242が、差分データ520dに対応する差分版データを選択した場合、差分データ520dは有版データ530eにも有版データ530gにも適用できないので、差分版選択工程S751に戻る。
合成適用判定部242が、差分データ520eに対応する差分版データを選択した場合、差分データ520eは有版データ530eに適用できるので、合成適用判定部242は、有版データ530fが生成できることを算出し、有版データ530fは判定済でないので、有版データ530fの版を表わす版コードを生成版コードとして記憶する。
合成適用判定部242が、差分データ520gに対応する差分版データを選択した場合、差分データ520gは有版データ530eに適用できる。合成適用判定部242は、有版データ530gを生成できることを算出するが、有版データ530gは判定済なので、差分版選択工程S751に戻る。
このようにして、差分版記憶部223が記憶したすべての差分版コードについての処理が終わると、合成適用判定部242は、生成版コードとして、有版データ530fの版を表わす版コードと、有版データ530hの版を表わす版コードとを記憶している。
更新版判定工程S741に戻り、生成版コードのなかに更新版コードと一致するものがないので、合成適用判定部242は、生成版コードを適用版コードとして記憶し、適用版コードを判定済コードとして記憶する。合成適用判定部242が記憶した適用版コードが表わす版の有版データは、有版データ530f,530hの2つになる。また、合成適用判定部242が記憶した判定済コードが表わす版の有版データは、有版データ530d〜530hの5つになる。
差分版選択工程S751において、合成適用判定部242は、差分版記憶部223が記憶した差分版コードのなかから、差分版コードを1つ選択する。
差分データ520h,520k以外は、有版データ530fにも有版データ530hにも適用できない。また、差分データ520hを適用した結果として生成できる有版データ530hは判定済である。したがって、合成適用判定部242が差分データ520k以外に対応する差分版コードを選択した場合は、差分版選択工程S751に戻り、差分データ520kに対応する差分版コードを選択した場合、合成適用判定部242は、生成版コードとして、有版データ530iの版を表わす版コードを記憶する。
このようにして、差分版記憶部223が記憶したすべての差分版コードについての処理が終わると、合成適用判定部242は、生成版コードとして、有版データ530iの版を表わす版コードを記憶する。
更新版判定工程S741に戻り、生成版コードのなかに更新版コードと一致するものがあるので、適用判定工程S761へ進む。合成適用判定部242は、それまでの道のりを辿ることにより、3つの差分データ520f,520j,520kを順次適用すれば、有版データ530dから有版データ530iを生成できることを判定する。
以上のようにして、適用判定部240は、更新のために使用する差分データを判定する。
適用判定部240が判定した3つの差分データ520f,520j,520kは順次適用するものなので、差分合成部224は、この3つの差分データ520f,520j,520kを合成して、1つの差分データを生成する。3以上の差分データを合成する場合、差分合成部224は、例えば、最初の2つの差分データを合成し、合成により生成した差分データと3つ目の差分データとを合成する。
もう一つの具体例として、差分記憶部222が差分データ520k以外の7つの差分データ520d〜520jを記憶していて、差分データ520kを記憶していなかったとする。
その場合、530iにたどり着く道のりは見つからず、合成適用判定部242は、生成版コードを記憶しないまま、差分版選択工程S751〜生成版記憶工程S759の繰り返しを抜ける。
生成版コードがないので、適用版記憶工程S743で差分要求工程S765へ進む。差分要求部243は、差分要求メッセージを生成し、配布装置100に対して通知する。
通知した差分要求メッセージに対する応答として、配布装置100から配布される差分データは、差分データ520kかもしれないし、1回の適用で有版データ530dから有版データ530iを生成できる差分データかもしれない。どのような差分データが配布されるかは、配布装置100の差分記憶部115がどのような差分データを記憶しているかによって変わるので、端末装置200の側では予想できない。このため、端末装置200は、配布された差分データを追加して、適用判定処理S740を最初からやり直すことにより、適用すべき差分データを判定する。
この実施の形態における差分管理装置(配布装置100・端末装置200)は、3以上の版を有する有版データ530について、上記有版データ530の2つの版の間の差分を表わす差分データ520を管理する。
差分管理装置は、データを記憶する記憶装置(RAM914・HDD920など)と、データを処理する処理装置(CPU911)と、差分記憶部115,222と、差分合成部133,224とを有する。
上記差分記憶部115,222は、上記記憶装置を用いて、上記有版データの第一の版530aと第二の版530bとの間の差分を表わす第一の差分データ520と、上記有版データの第二の版530bと第三の版530cとの間の差分を表わす第二の差分データ520bとを記憶する。
上記差分合成部133,224は、上記処理装置を用いて、上記差分記憶部115,222が記憶した第一の差分データ520と第二の差分データ520bとを合成して、上記有版データの第一の版530aと第三の版530cとの間の差分を表わす第三の差分データ520cを生成する。
これにより、配布すべきデータ量を削減できるとともに、有版データの版の数が多くても記憶すべき差分データの数が少なく、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
上記差分データ520は、上記有版データ530の更新前の版530a,530bを更新後の版530b,530cに更新するための更新コマンド521を表わす。
上記更新コマンド521は、複写コマンドと追加コマンドとのうち少なくともいずれかを含む。
上記複写コマンドは、上記有版データの更新後の版530b,530cのうち上記有版データの更新前の版530a,530bに同一の部分が存在する含有部分(一致部分・複写部分)について、上記有版データの更新前の版530a,530bのうち上記含有部分と同一の部分の位置(ソース524)を示し、上記同一の部分を上記含有部分に複写することを表わす。
上記追加コマンドは、上記有版データの更新後の版530b,530cのうち上記有版データの更新前の版530a,530bに同一の部分が存在しない非含有部分(不一致部分・追加部分)について、上記非含有部分と同一の追加データ(ソース524)を有し、上記追加データを上記非含有部分に追加することを表わす。
これにより、差分データが表わす更新コマンドを解釈して実行するだけで、有版データの更新ができるので、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
上記差分合成部133,224は、上記処理装置を用いて、上記第二の差分データ520bが上記複写コマンドを含む場合、上記複写コマンドに基づいて、上記有版データの第二の版530bのうち上記含有部分に複写する部分を判定して複写部分とし、上記第一の差分データ520に基づいて、上記複写部分のうち上記有版データの第一の版530aに含まれる承継部分について、上記有版データの第一の版530aの一部を上記含有部分のうち上記承継部分に対応する部分に複写することを表わす複写コマンドを生成し、上記複写部分のうち上記有版データの第一の版530aに含まれない非承継部分について、上記第一の差分データ520に含まれる追加コマンドが有する追加データ(ソース524)を上記含有部分のうち上記非承継部分に対応する部分に追加することを表わす追加コマンドを生成し、上記第二の差分データ520bが追加コマンドを含む場合、上記追加コマンドに基づいて、上記追加コマンドが有する追加データ(ソース524)を上記非含有部分に追加することを表わす追加コマンドを生成することにより、上記第三の差分データ520cを生成する。
これにより、有版データ530を使用せず、差分データ520の操作だけで差分データ520を合成することができるので、差分データを合成する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
上記差分管理装置(端末装置200)は、更に、有版データ記憶部211と、有版データ更新部212とを有する。
上記有版データ記憶部211は、上記記憶装置を用いて、上記有版データ530の第一の版(現版データ)を記憶する。
上記有版データ更新部212は、上記処理装置を用いて、上記差分合成部224が生成した第三の差分データ520cに基づいて、上記有版データ記憶部211が記憶した有版データ530の第一の版(現版データ)を更新して、上記有版データ530の第三の版(更新版データ)を生成する。
複数の差分データを順次適用して有版データを更新するのではなく、複数の差分データを合成して生成した1つの差分データを適用して有版データを更新するので、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
上記差分管理装置(端末装置200)は、更に、更新版取得部231と、単独適用判定部241と、合成適用判定部242とを有する。
上記更新版取得部231は、上記処理装置を用いて、上記有版データ記憶部211が記憶した有版データ(現版データ)を更新して生成する版を表わす更新版コードを取得する。
上記単独適用判定部241は、上記処理装置を用いて、上記差分記憶部222が記憶した差分データ520のなかに、上記有版データ記憶部211が記憶した有版データ(現版データ)を更新して上記更新版取得部231が取得した更新版コードが表わす版の有版データ(更新版データ)を生成できる単独適用差分データがあるか否かを判定する。
上記合成適用判定部242は、上記処理装置を用いて、上記差分記憶部222が記憶した差分データ520のなかに単独適用差分データがないと上記単独適用判定部241が判定した場合に、上記差分記憶部222が記憶した差分データ520のなかに、複数の差分データを合成することにより、上記単独適用差分データを生成することができる複数の合成適用差分データがあるか否かを判定する。
上記差分合成部224は、上記処理装置を用いて、上記差分記憶部222が記憶した差分データのなかに、上記複数の合成適用差分データがあると上記合成適用判定部242が判定した場合に、上記差分記憶部222が記憶した複数の合成適用差分データを合成して、上記単独適用差分データを生成する。
上記有版データ更新部212は、上記処理装置を用いて、上記差分記憶部222が記憶した差分データ520のなかに単独適用差分データがあると上記単独適用判定部241が判定した場合に、上記差分記憶部222が記憶した単独適用差分データに基づいて、上記有版データ記憶部211が記憶した有版データ(現版データ)を更新し、上記差分記憶部222が記憶した差分データ520のなかに、上記複数の合成適用差分データがあると上記合成適用判定部242が判定した場合に、上記差分合成部224が生成した単独適用差分データに基づいて、上記有版データ記憶部211が記憶した有版データ(現版データ)を更新する。
1回の適用で更新が可能な差分データ(単独適用差分データ)を差分記憶部222が記憶していれば、それを利用し、合成により単独適用差分データを生成可能な差分データ(合成適用差分データ)を差分記憶部222が記憶していれば、差分合成部224がそれを合成して生成した単独適用差分データを利用して、有版データ更新部212が有版データを更新するので、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
上記差分管理装置(端末装置200)は、更に、差分要求部243と、差分取得部221とを有する。
上記差分要求部243は、上記処理装置を用いて、上記差分記憶部222が記憶した差分データのなかに、上記複数の合成適用差分データがないと上記合成適用判定部242が判定した場合に、上記単独適用差分データ、および、上記複数の合成適用差分データ、および、上記差分記憶部が記憶した差分データと合成することにより上記単独適用差分データを生成できる補充差分データのうち少なくともいずれかを要求する差分要求メッセージを差分配布装置(配布装置100)に対して通知する。
上記差分取得部221は、上記処理装置を用いて、上記差分要求部243が通知した差分要求メッセージに対する応答として上記差分配布装置が配布した差分データを取得する。
上記差分記憶部222は、上記記憶装置を用いて、上記差分取得部221が取得した差分データを記憶する。
更新に必要な差分データを差分記憶部222が記憶していない場合は、差分配布装置に対して差分データの配布を要求するので、更新に必要な差分データを取得することができる。取得した差分データが単独適用差分データであれば、それを利用して、有版データを更新できる。取得した差分データが複数の合成適用差分データであれば、差分合成部224がそれを合成して生成した単独適用差分データを利用して、有版データを更新できる。取得した差分データが補充差分データであれば、差分記憶部222が記憶した差分データと補充差分データとを差分合成部224が合成して生成した単独適用差分データを利用して、有版データを更新できる。いずれの場合も、差分配布装置から配布を受ける差分データのデータ量を削減できるとともに、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
上記差分管理装置(配布装置100)は、更に、要求取得部131と、差分通知部(差分配布部134)とを有する。
上記要求取得部131は、上記処理装置を用いて、上記第三の差分データを要求する差分要求メッセージを端末装置200から取得する。
上記差分通知部は、上記差分合成部133が生成した第三の差分データ520cを上記端末装置200に対して通知する。
これにより、配布する差分データのデータ量を削減できるとともに、端末装置200の処理装置にかかる負荷や、端末装置200の記憶装置に必要な作業領域の容量を小さくすることができる。
上記差分管理装置(配布装置100)は、更に、旧版データ記憶部111と、新版データ取得部112と、差分生成部113と、旧版データ更新部114とを有する。
上記旧版データ記憶部111は、上記記憶装置を用いて、上記有版データの旧版(旧版データ)を記憶する。
上記新版データ取得部112は、上記処理装置を用いて、上記有版データの新版(新版データ)を取得する。
上記差分生成部113は、上記処理装置を用いて、上記旧版データ記憶部111が記憶した有版データの旧版(旧版データ)と、上記新版データ取得部112が取得した有版データの新版(新版データ)との間の差分データを生成する。
上記差分記憶部115は、上記記憶装置を用いて、上記差分生成部113が生成した差分データを記憶する。
上記旧版データ更新部114は、上記処理装置を用いて、上記旧版データ記憶部111が記憶した有版データ(旧版データ)を更新して、上記新版データ取得部112が取得した有版データの新版(新版データ)を記憶させる。
旧版データと新版データとの間の差分データを差分生成部113が生成すると、旧版データ記憶部111は、新版データを旧版データとして記憶するので、旧版データ記憶部111の記憶容量が小さくて済む。有版データの他の版の間の差分データが必要な場合は、差分記憶部115が記憶した差分データを差分合成部133が合成して、生成することができる。
上記差分管理装置(配布装置100)において、上記差分生成部113は、上記処理装置を用いて、上記有版データの旧版(旧版データ)を新版(新版データ)に更新するための順方向差分データと、上記有版データの新版(新版データ)を旧版(旧版データ)に戻すための逆方向差分データとを生成する。
上記差分記憶部115は、上記記憶装置を用いて、上記差分生成部113が生成した順方向差分データと逆方向差分データとを記憶する。
これにより、有版データを新しい版に更新したいという要望だけでなく、古い版に戻したいという要望にも答えることができる。旧版データよりも更に古い版に戻す場合は、差分合成部133が差分データを合成することにより、必要な差分データを生成することができる。
この実施の形態における差分管理装置(配布装置100、端末装置200)は、コンピュータが実行することにより上記コンピュータが差分管理装置として機能するコンピュータプログラムにより実現することができる。
これにより、配布すべきデータ量を削減できるとともに、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる差分管理装置を実現できる。
この実施の形態における差分管理装置(配布装置100、端末装置200)が、3以上の版を有する有版データ530について、上記有版データ530の2つの版の間の差分を表わす差分データ520を管理する差分管理方法は、以下の工程を有する。
上記記憶装置が、上記有版データの第一の版530aと第二の版530bとの間の差分を表わす第一の差分データ520と、上記有版データの第二の版530bと第三の版530cとの間の差分を表わす第二の差分データ520bとを記憶する。
上記処理装置が、上記記憶装置が記憶した第一の差分データ520と第二の差分データ520bとを合成して、上記有版データの第一の版530aと第三の版530cとの間の差分を表わす第三の差分データ520cを生成する。
これにより、配布すべきデータ量を削減できるとともに、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
実施の形態2.
実施の形態2について、図19〜図28を用いて説明する。
図19は、この実施の形態におけるシステムの構成例を示す図である。
ソフトウェア配布サーバ10(配布装置100)は、ソフトウェアを配布するためのサーバである。ソフトウェア配布サーバ10は、一般的にはWEBサーバで構成される。ソフトウェア配布サーバ10は、ネットワーク20であるインターネットや無線ネットワークからの要求を受け付ける。あるいは、ソフトウェア配布サーバ10は、情報を一斉送信する放送サーバであってもよい。
端末装置30は、一般的なPCやサーバあるいは携帯端末など配布されるソフトウェアが動作する装置である。
ソフトウェアの配布は、ネットワーク20を使った配布以外にも物理的な郵送という手段で、DVDやCD−Rを使って配送することもある。
図20は、この実施の形態におけるソフトウェア配布サーバ10の構成例を示す図である。
ソフトウェア配布サーバは、対象とする端末のソフトウェアの複数のバージョンであるソフトウェア11(有版データ)を保持する。対象とする端末は複数あっても良いが、対象機種ごとに管理する。また、対象機種の最新のソフトウェアバージョンがリリースされるたび最新版が追加となる。
差分抽出部12(差分生成部113)は、管理する2つのソフトウェア11のバージョン間の差分を抽出する。差分抽出部12は、一般的には複数のファイルを比較する。差分抽出部12は、同じ部分とそうでない部分を見つける。差分抽出部12は、同じ部分は旧版のどのアドレスから長さどれだけ分を新版のどのアドレスにコピーするということを示すCOPYコマンドと、旧版にないデータであって、新たにどこにどんなデータを追加するかを示すDATAコマンドからなる差分情報を生成する。
差分情報管理部13(差分記憶部115、差分版記憶部125)は、ある版と別の版の差分を2つの版名と関係付けて保持する。差分情報管理部13は、要求があれば該当する差分情報を提供する。該当する差分情報を保持していない場合には、差分情報管理部13は、差分抽出部12を利用して差分を生成してもかまわない。
差分情報要求受付部14は、クライアントからの要求に応じて差分情報を送る。
差分情報配布部15は、差分を配布する。差分情報配布部15は、一斉送信をすることができる。一斉送信は実質的には相手を決めて逐次送信していく方式でもかまわないし、マルチキャストいう技術を利用してネットワーク200上で経路が同じ部分は共通のデータとして送信し、経路が分かれるところで別データで送信してもかまわない。このようにしてネットワークトラフィックを削減するように動作する。
図21は、この実施の形態における端末装置30の構成例を示す図である。
差分受信部31(差分取得部221)は、ソフトウェア配布サーバ10からネットワーク200を経由して一斉配信されたものを受信する。あるいは、差分受信部31は、端末上のユーザからのリクエストや、設定された情報に従ったリクエストに応じてサーバから送られてくる差分情報を受信する。または、差分受信部31は、郵送で送られてきた情報に関してはCD−Rなどの外部デバイスからの情報を読み取ることによって受信する。
差分受信部31が受信した差分が、端末上のソフトウェアバージョンに応じたもの、すなわち端末上のソフトウェアバージョンに適用可能なものであれば、そのまま差分記憶部32が記憶する。差分記憶部32に古い差分データが残っている場合は、その差分データと今回受信した差分データを比較し、より新しいバージョンにアップすることが可能な版を残し、一方を削除する。
差分受信部31が受信した差分が、端末上のソフトウェアバージョンに応じたものでない、即ち端末上のソフトウェアに適用不可能なものであれば、差分合成部33(適用判定部240、差分合成部224)が、差分記憶部32が記憶している差分と合成可能かどうかを判定し、可能であれば差分を合成し、差分記憶部32が記憶する。差分合成不可な場合は、端末上の差分ファイルと受信した差分ファイルの間の差分ファイルがあるはずで、これを差分受信部31がサーバに要求し、取得し、再度、差分合成部33が逐次差分合成を行い、現状のソフトウェアバージョンから最新の版へバージョンアップ可能な合成差分情報のみを差分記憶部32が記憶する。
ユーザの要望やあるいはシステムの設定に応じて差分を適用し、ソフトウェアのバージョンアップを行う場合には、差分適用部34(有版データ更新部212)が、差分記憶部32が記憶している差分を適用する。
上記ソフトウェア配布サーバ10および端末装置30の動作の流れの例を説明する。
図22は、この実施の形態におけるソフトウェア配布サーバ10の処理フロー図である。
ステップ41で、ソフトウェア配布サーバ10は、まず対象端末の最初のソフトウェアイメージを保存する。
ステップ42で、ソフトウェア配布サーバ10は、次の版のリリースを待ち、リリースされればステップ43に移行する。
ステップ43で、ソフトウェア配布サーバ10は、次の版のイメージを保存する。
ステップ44で、差分抽出部12は、差分を抽出する。この差分は一般にバイナリ差分である。その例としては新版と旧版をサーチし、同じ部分があれば同じであることを示し、位置がずれていてもCOPYとして旧版のある場所から新版のある場所へCOPYすれば良いことを示すCOPYコマンドと、新たなデータであることを示すDATAコマンドからなる差分情報を抽出する。
ステップ45で、差分情報管理部13は、抽出された差分情報を保存する。
ステップ46で、差分情報配布部15は、差分を配布する。配布にはブロードキャストやマルチキャストあるいは逐次送信でもかまわない。通常のネットワークを利用するだけでなくDVDなどの媒体を使って郵送というのでもかまわない。
ステップ47で、ソフトウェア配布サーバ10は、旧版を削除する。保存領域に余裕があれば旧版を削除せずにバージョンの管理を行っておくのでもかまわない。
ステップ48で、差分情報要求受付部14は、端末側からの差分のダウンロード要求を待つ。端末に対しては差分情報を既にブロードキャストなどの手段で配布しているが、このタイミングで受信できなかった端末からは要求が来る可能性がある。要求がなければ、ステップ49で、ソフトウェア配布サーバ10は、次期リリース待ちである。ステップ48と49は同時に動作し、イベント待ちで、先におきたイベントの処理を行う。
ステップ48で、端末側から要求が来た場合、差分情報配布部15は、保存してある差分を送信する。その際、要求に含まれた端末側のバージョンから最新のバージョンに上げることができる差分情報を送信する。この差分は複数の差分をまとめて送信するのでもかまわないし、端末側のフローで説明する差分合成と同じフローを利用して差分合成をして送信してもかまわないし、ステップ47を実行せずに旧版を削除せずに残しているのであれば、要求に応じた差分を抽出して送信するのでもかまわない。
差分送信が完了すると、ソフトウェア配布サーバ10は、ステップ48,49のイベント待ちに移行する。
ステップ48,49で、次期リリースがなされた場合、ソフトウェア配布サーバ10は、ステップ43からの処理を繰り返す。
図23は、この実施の形態における端末装置30の更新フロー図である。
ステップ51で、端末装置30は、差分情報の受信待ちをする。受信待ちは、端末自らが要求を出してダウンロードを待っている場合もあれば、一斉送信や放送を待っている場合もある。即ち、イベントを待っている場合もある。
ステップ51で差分情報を受信したら、ステップ52で、差分適用部34は、適用可能かどうかの判断を行う。即ち、その差分情報がどのバージョンを対象にているのかの情報と自端末のバージョンとを比較し、同じものであれば適用可能であると判断できる。適用可能と判断されれば、端末装置30は、実際に端末に適用するかどうかをユーザに問い合わせて、ステップ56でユーザの判断を入力する。
適用不可能、即ち自端末のバージョンと差分情報の対象とするバージョンが違う場合には、ステップ53で、差分合成部33は、差分合成可能かどうかを判断する。合成が不可能、即ち、自端末に保存している差分でバージョンアップ可能なバージョンと、差分情報が対象とする差分が異なる場合は、ステップ54で、端末装置30は、その間を生める差分を要求する。サーバ側からはその差分を埋める情報が一つの差分情報で来る場合もあるし、複数の差分情報で来る場合もある。複数の差分情報で来た場合には、差分受信処理直後に差分合成部が合成処理を行い、ステップ52へ移行する。
ステップ53で、差分合成部33が差分合成可能と判断すると、ステップ55で、差分合成部33は、差分合成を行なう。ステップ56で、端末装置は、実際に適用するかどうかをユーザに問い合わせ適用判断を行う。適用しないのであれば、ステップ58で、差分記憶部は、その差分情報を保存しておく。適用するのであれば、ステップ57で、差分適用部34が適用して、差分情報を消す。その後、元の差分情報受信待ちステップ51に移行する。
図24は、この実施の形態における差分情報管理部13が差分情報を管理する管理の例を示す図である。
この情報は、図22のステップ45での保存時や、端末側らの要求に応じてステップ50で差分を送信する際に利用する。
差分情報管理部13は、複数の差分間の情報を2次元のテーブルで持ち、該当する場所にはそれぞれに対応するファイル名を入れておく。バージョンダウンのことも考えると、逆の差分もおいてもかまわない。
また、生成していない差分は空欄にしておき、サーバの空き時間に生成しても良いし、全く生成しなくても良い。
また、ステップ47で旧版を毎回消す場合には、隣の版との差分しかなく、他の差分は動的に合成処理するか、端末側で合成する。
図25は、この実施の形態におけるソフトウェアイメージと差分との関係の例を示す図である。
この例は、「Ver1.0」「Ver,2.0」「Ver3.0」の3つの版がある場合を示している。
「Ver1.0」と「Ver2.0」の比較で、全く同じ場所に同じコードがある部分と、ずれてコードがある部分をCOPYコマンド(複写コマンド)で表現する。一方全く違うデータがある部分をDATAコマンド(追加コマンド)で表現する。
新版のアドレス順にコマンドを記載することにより、消えてしまうデータに関しては気にする必要ないので、DELETEといったコマンド(削除コマンド)はなくてよい。
COPYコマンドには、元のアドレス情報(ソース524)と長さ(サイズ523)の情報が必要である。DATAコマンドには、長さ(サイズ523)の情報と書き換えるべきデータ(ソース524)の情報が必要である。この処理には、順に新版と旧版を比較しながら探すことによる例えばUnix(登録商標)環境にあるDIFFのアルゴリズムのような公知のアルゴリズムを使用してもよい。
図26は、この実施の形態におけるソフトウェアイメージと差分合成との関係の例を示す図である。
「Ver2.0」から「Ver3.0」への差分情報のうち、aの部分のCOPYコマンドは実際にはまだ存在しない「Ver2.0」からのCOPYコマンドである。この領域に対する旧差分情報を見ると、一部はCOPYコマンドで、一部はDATAコマンドである。こういう場合は、aの部分はCOPYコマンドで「Ver1.0」からコピーする部分と、DATAコマンドとに分けて合成する。
次のbの部分は、「Ver1.0」からすべてコピーすれば良いが、コピー元が分かれている。こういう場合は、2つのCOPYコマンドに分ける。
次のDATAコマンド部分は、そもそも「Ver1.0」上にもないデータであるため、DATAコマンドをそのまま使う。
最後のcの部分は、COPYコマンドとDATAコマンドとに分ける。
このようにして、差分情報を合成する。
図27は、この実施の形態における差分合成の処理フロー図である。
ステップ91で、差分合成部33は、新差分と旧差分とを読みこむ。差分合成部33は、新差分の方のアドレスの低い方か高い方かどちらか一方から解析を行っていく。
ステップ92で、差分合成部33は、コマンドを取り出す。最後であれば、終了する。
ステップ93で、差分合成部33は、そのコマンドがDATAコマンドかどうか判定する。DATAコマンドであれば、差分合成部33は、そのままDATAコマンドを出力し、再びステップ92で次のコマンドを抽出する。
ステップ93で、DATAコマンドでなかった場合は、COPYコマンドである。COPYコマンドの場合、差分合成部33は、ステップ94で、そのCOPYコマンドの範囲にある旧差分情報を抽出する。ステップ95で、差分合成部33は、その抽出された差分情報を順次読みこむ。
ステップ96で、差分合成部33は、抽出された差分情報がDATAコマンドかどうかを判断する。DATAコマンドであれば、その部分はVer1.0でも存在しなかった部分であるため、たとえ「Ver2.0」から「3.0」へのコマンドがCOPYであってもCOPYできないことを示している。ステップ97で、差分合成部33は、DATAコマンドを出力し、再度ステップ95へ移行する。
なお、ステップ95で次のコマンドがなかった場合、ステップ92で、次の新差分のコマンドの処理に移行する。
ステップ96で、DATAコマンドでなかった場合、ステップ99で、差分合成部33は、該当部分のCOPYコマンドとして出力し、ステップ95へ再び移行する。
図28は、この実施の形態における差分合成においてコピーする範囲を抽出するための情報の例を示す図である。
差分合成部33は、各コマンドごとに新版となるアドレス情報とサイズ情報をペアにして保持しておく。これにより、アドレス情報からその部分にどのコマンドがあるかを2分木探索で探すことができる。
こうして合成して作成した差分情報は、そのまま順にコマンドの指示どおり実行すれば、プログラム領域を書き換えることができる。
以上のようにして、差分を合成することができ、端末上に保持する差分量を一定に保ちつつ、サーバ上でも要求の少ない差分データを保持することなく、端末側からの様々な更新要求に答えることができる。
この実施の形態におけるソフトウェア配布システムは、ソフトウェア配布のためのソフトウェア配布サーバ10(配布装置100)と、配布されたソフトウェアをインストールし実行する端末装置30とからなる。ソフトウェア配布システムは、出荷時のソフトウェアのバージョンから逐次複数回バージョンアップをする際には、ネットワークを経由して配布するソフトウェア量を減らすために差分情報を送る。
ソフトウェア配布サーバ10は、サーバ上には複数のバージョン間の差分抽出部12(差分生成部113)と、差分情報管理部13(差分記憶部115、差分版記憶部125)と、端末へ差分を配布する差分情報配布部15(差分配布部134)とを有する。
端末装置30は、配布された差分を記憶する差分記憶部32と、複数の差分が送られた場合には旧差分と合成する差分合成部33と、差分を適用する差分適用部34(有版データ更新部212)とを有する。
複数のバージョン間の差分抽出部12は、ファイル単位にそのテキストの差分またはバイナリレベルの差分を抽出し、旧版に適用すれば新版を端末上で作成できる形式にする。
差分情報は、旧版からの新版と同一部分をどこからどこまでをコピーするかを示す情報とどこに保存するかを示す情報とからなるCOPYというコマンドと、新版と旧版で異なる部分をどこからどれだけをどういう情報に変更するかを示すDATAコマンドとからなる。
差分情報管理部13は、その差分を作成した2つのバージョンの番号(差分版コード)と差分(差分データ)とを1組として複数個を管理し、あるバージョンと別のバージョンの差分を欲しいという要求があればそれを供給できる。
端末へ差分を配布する差分情報配布部15は、新しいバージョンができるたびにその前のバージョンとの差分をブロードキャストや、何らかの媒体に記憶し郵送による配布などを行う。
端末上で配布された差分を記憶する差分記憶部32は、フラッシュメモリやハードディスクドライブなど電源が切れても差分を記憶しつづけることができる。
差分合成部33は、端末上に記憶している差分情報と配布された差分情報から端末上のバージョンから最新のバージョンにバージョンアップするための差分情報を合成する。
差分合成部33は、古い差分情報内のコマンド列を探索し、新しい差分情報でそのままでは使えない部分を抽出し、新たなコマンド列に置き換える。
差分合成部33は、前記コマンド列の探索のために、古い差分情報には予めアドレスを指定すればその部分の対象差分コマンドがCOPYであるのかDATAであるのかを高速に探索するために木構造のインデックスやテーブルを保持する。
差分適用部34は、差分情報のコマンドに従って、COPYすべき情報はCOPYをし、新たに付加するデータは付加し、プログラム領域を書き換える。
これにより、プログラムイメージそのものやファイルそのものの差分を抽出してその差分を送信してできるだけ転送量を少なくして更新ができるとともに、多くのバージョンアップがあり、端末側では受信した差分をいつ適用するか自由に選択できる場合であっても、いざ適用を試みる際のユーザビリティが良く、更新時間を短することができる。
10 ソフトウェア配布サーバ、11 ソフトウェア、12 差分抽出部、13 差分情報管理部、14 差分情報要求受付部、15 差分情報配布部、20 ネットワーク、30 端末装置、31 差分受信部、32 差分記憶部、33 差分合成部、34 差分適用部、100 配布装置、111 旧版データ記憶部、112 新版データ取得部、113 差分生成部、114 旧版データ更新部、115,222 差分記憶部、121 旧版コード記憶部、124 旧版コード更新部、125,223 差分版記憶部、131 要求取得部、132 配布判定部、133,224 差分合成部、134 差分配布部、200 端末装置、211 有版データ記憶部、212 有版データ更新部、213 現版コード記憶部、221 差分取得部、231 更新版取得部、240 適用判定部、241 単独適用判定部、242 合成適用判定部、243 差分要求部、511 差分コード、512 適用前コード、513 適用後コード、520 差分データ、521 コマンド、522 命令、523 サイズ、524 ソース、530 有版データ、531〜547 部分、800 配布システム、810 開発装置、901 表示装置、902 キーボード、903 マウス、904 FDD、905 CDD、906 プリンタ装置、907 スキャナ装置、910 システムユニット、911 CPU、912 バス、913 ROM、914 RAM、915 通信装置、920 HDD、921 OS、922 ウィンドウシステム、923 プログラム群、924 ファイル群、931 電話器、932 ファクシミリ機、940 インターネット、941 ゲートウェイ、942 LAN。

Claims (9)

  1. 3以上の版を有する有版データについて、上記有版データの2つの版の間の差分を表わす差分データを管理する差分管理装置において、
    データを記憶する記憶装置と、データを処理する処理装置と、差分記憶部と、差分合成部と、要求取得部とを有し、
    上記差分記憶部は、上記記憶装置を用いて、上記有版データの第一の版と第二の版との間の差分を表わす第一の差分データと、上記有版データの第二の版と第三の版との間の差分を表わす第二の差分データとを記憶し、
    上記要求取得部は、端末装置が有する上記有版データの版に関する情報を含み、上記差分データを要求するための差分要求メッセージを取得し、
    上記差分合成部は、上記差分要求メッセージを上記要求取得部が取得する前に、上記処理装置を用いて、上記差分記憶部が記憶した第一の差分データと第二の差分データとを合成して、上記有版データの第一の版と第三の版との間の差分を表わす第三の差分データを生成し、
    上記処理装置は、上記差分要求メッセージに上記端末装置の目的とする上記有版データの版に関する情報が含まれている場合には上記端末装置の目的とする上記有版データの版に更新するための上記差分データを配布するよう判断し、上記差分要求メッセージに上記端末装置の目的とする上記有版データの版に関する情報が含まれていない場合には最新版に更新するための上記差分データを配布するよう判断し、
    上記処理装置は、上記差分要求メッセージに基づき上記端末装置に対して上記第一の差分データと上記第二の差分データの両方を与えることが必要な場合に、上記第一の差分データ及び上記第二の差分データの代わりに上記第三の差分データを上記端末装置に配布するよう処理することを特徴とする差分管理装置。
  2. 上記差分データは、上記有版データの更新前の版を更新後の版に更新するための更新コマンドを表わし、
    上記更新コマンドは、複写コマンドと追加コマンドとのうち少なくともいずれかを含み、
    上記複写コマンドは、上記有版データの更新後の版のうち上記有版データの更新前の版に同一の部分が存在する含有部分について、上記有版データの更新前の版のうち上記含有部分と同一の部分の位置を示し、上記同一の部分を上記含有部分に複写することを表わし、
    上記追加コマンドは、上記有版データの更新後の版のうち上記有版データの更新前の版に同一の部分が存在しない非含有部分について、上記非含有部分と同一の追加データを有し、上記追加データを上記非含有部分に追加することを表わすことを特徴とする請求項1に記載の差分管理装置。
  3. 上記差分合成部は、上記処理装置を用いて、上記第二の差分データが上記複写コマンドを含む場合、上記複写コマンドに基づいて、上記有版データの第二の版のうち上記含有部分に複写する部分を判定して複写部分とし、上記第一の差分データに基づいて、上記複写部分のうち上記有版データの第一の版に含まれる承継部分について、上記有版データの第一の版の一部を上記含有部分のうち上記承継部分に対応する部分に複写することを表わす複写コマンドを生成し、上記複写部分のうち上記有版データの第一の版に含まれない非承継部分について、上記第一の差分データに含まれる追加コマンドが有する追加データを上記含有部分のうち上記非承継部分に対応する部分に追加することを表わす追加コマンドを生成し、上記第二の差分データが追加コマンドを含む場合、上記追加コマンドに基づいて、上記追加コマンドが有する追加データを上記非含有部分に追加することを表わす追加コマンドを生成することにより、上記第三の差分データを生成することを特徴とする請求項2に記載の差分管理装置。
  4. 上記差分管理装置は、更に、有版データ記憶部と、有版データ更新部とを有し、
    上記有版データ記憶部は、上記記憶装置を用いて、上記有版データの第一の版を記憶し、
    上記有版データ更新部は、上記処理装置を用いて、上記差分合成部が生成した第三の差分データに基づいて、上記有版データ記憶部が記憶した有版データの第一の版を更新して、上記有版データの第三の版を生成することを特徴とする請求項1乃至請求項3のいずれかに記載の差分管理装置。
  5. 上記差分管理装置は、更に、更新版取得部と、単独適用判定部と、合成適用判定部とを有し、
    上記更新版取得部は、上記処理装置を用いて、上記有版データ記憶部が記憶した有版データを更新して生成する版を表わす更新版コードを取得し、
    上記単独適用判定部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに、上記有版データ記憶部が記憶した有版データを更新して上記更新版取得部が取得した更新版コードが表わす版の有版データを生成できる単独適用差分データがあるか否かを判定し、
    上記合成適用判定部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに単独適用差分データがないと上記単独適用判定部が判定した場合に、上記差分記憶部が記憶した差分データのなかに、複数の差分データを合成することにより、上記単独適用差分データを生成することができる複数の合成適用差分データがあるか否かを判定し、
    上記差分合成部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに、上記複数の合成適用差分データがあると上記合成適用判定部が判定した場合に、上記差分記憶部が記憶した複数の合成適用差分データを合成して、上記単独適用差分データを生成し、
    上記有版データ更新部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに単独適用差分データがあると上記単独適用判定部が判定した場合に、上記差分記憶部が記憶した単独適用差分データに基づいて、上記有版データ記憶部が記憶した有版データを更新し、上記差分記憶部が記憶した差分データのなかに、上記複数の合成適用差分データがあると上記合成適用判定部が判定した場合に、上記差分合成部が生成した単独適用差分データに基づいて、上記有版データ記憶部が記憶した有版データを更新することを特徴とする請求項4に記載の差分管理装置。
  6. 上記差分管理装置は、更に、旧版データ記憶部と、新版データ取得部と、差分生成部と、旧版データ更新部とを有し、
    上記旧版データ記憶部は、上記記憶装置を用いて、上記有版データの旧版を記憶し、
    上記新版データ取得部は、上記処理装置を用いて、上記有版データの新版を取得し、
    上記差分生成部は、上記処理装置を用いて、上記旧版データ記憶部が記憶した有版データの旧版と、上記新版データ取得部が取得した有版データの新版との間の差分データを生成し、
    上記差分記憶部は、上記記憶装置を用いて、上記差分生成部が生成した差分データを記憶し、
    上記旧版データ更新部は、上記処理装置を用いて、上記旧版データ記憶部が記憶した有版データを更新して、上記新版データ取得部が取得した有版データの新版を記憶させることを特徴とする請求項1乃至請求項5のいずれかに記載の差分管理装置。
  7. 上記差分生成部は、上記処理装置を用いて、上記有版データの旧版を新版に更新するための順方向差分データと、上記有版データの新版を旧版に戻すための逆方向差分データとを生成し、
    上記差分記憶部は、上記記憶装置を用いて、上記差分生成部が生成した順方向差分データと逆方向差分データとを記憶することを特徴とする請求項6に記載の差分管理装置。
  8. 3以上の版を有する有版データについて、上記有版データの2つの版の間の差分を表わす差分データを管理する差分管理装置であって、上記有版データの第一の版と第二の版との間の差分を表わす第一の差分データと、上記有版データの第二の版と第三の版との間の差分を表わす第二の差分データとを記憶する差分記憶部を備える差分管理装置のコンピュータプログラムにおいて、
    端末装置が有する上記有版データの版に関する情報を含み、上記差分データを要求するための差分要求メッセージを取得する要求取得処理と、
    上記要求取得処理により上記差分要求メッセージを取得する前に、上記差分記憶部が記憶した第一の差分データと第二の差分データとを合成して、上記有版データの第一の版と第三の版との間の差分を表わす第三の差分データを生成する差分合成処理と、
    上記差分要求メッセージに上記端末装置の目的とする上記有版データの版に関する情報が含まれている場合には上記端末装置の目的とする上記有版データの版に更新するための上記差分データを配布するよう判断し、上記差分要求メッセージに上記端末装置の目的とする上記有版データの版に関する情報が含まれていない場合には最新版に更新するための上記差分データを配布するよう判断する処理と、
    上記差分要求メッセージに基づき上記端末装置に対して上記第一の差分データと上記第二の差分データの両方を与えることが必要な場合に、上記第一の差分データ及び上記第二の差分データの代わりに上記第三の差分データを上記端末装置に配布する処理とをコンピュータである上記差分管理装置に実行させるためのコンピュータプログラム。
  9. データを記憶する記憶装置とデータを処理する処理装置とを有する差分管理装置が、3以上の版を有する有版データについて、上記有版データの2つの版の間の差分を表わす差分データを管理する差分管理方法において、
    上記記憶装置が、上記有版データの第一の版と第二の版との間の差分を表わす第一の差分データと、上記有版データの第二の版と第三の版との間の差分を表わす第二の差分データとを記憶し、
    上記処理装置が、端末装置が有する上記有版データの版に関する情報を含み、上記差分データを要求するための差分要求メッセージを取得する前に、上記記憶装置が記憶した第一の差分データと第二の差分データとを合成して、上記有版データの第一の版と第三の版との間の差分を表わす第三の差分データを生成し、
    上記差分要求メッセージに上記端末装置の目的とする上記有版データの版に関する情報が含まれている場合には上記端末装置の目的とする上記有版データの版に更新するための上記差分データを配布するよう判断し、上記差分要求メッセージに上記端末装置の目的とする上記有版データの版に関する情報が含まれていない場合には最新版に更新するための上記差分データを配布するよう判断し、
    上記差分要求メッセージに基づき上記端末装置に対して上記第一の差分データと上記第二の差分データの両方を与えることが必要な場合に、上記第一の差分データ及び上記第二の差分データの代わりに上記第三の差分データを上記端末装置に配布するよう処理することを特徴とする差分管理方法。
JP2009266352A 2009-11-24 2009-11-24 差分管理装置及びコンピュータプログラム及び差分管理方法 Expired - Fee Related JP5729901B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009266352A JP5729901B2 (ja) 2009-11-24 2009-11-24 差分管理装置及びコンピュータプログラム及び差分管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009266352A JP5729901B2 (ja) 2009-11-24 2009-11-24 差分管理装置及びコンピュータプログラム及び差分管理方法

Publications (2)

Publication Number Publication Date
JP2011113123A JP2011113123A (ja) 2011-06-09
JP5729901B2 true JP5729901B2 (ja) 2015-06-03

Family

ID=44235438

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009266352A Expired - Fee Related JP5729901B2 (ja) 2009-11-24 2009-11-24 差分管理装置及びコンピュータプログラム及び差分管理方法

Country Status (1)

Country Link
JP (1) JP5729901B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5696018B2 (ja) * 2011-09-28 2015-04-08 クラリオン株式会社 対象データの配置方法、対象データ配置システム、および、それらのサーバ装置、クライアント装置、プログラム
JP6386302B2 (ja) * 2014-08-29 2018-09-05 株式会社スクウェア・エニックス パッチ適用システム、パッチ適用プログラム、パッチ提供装置、及びパッチ適用方法
JP2019101917A (ja) * 2017-12-06 2019-06-24 クラリオン株式会社 更新装置、更新システム
JP7112052B2 (ja) * 2018-09-10 2022-08-03 三菱電機株式会社 空気調和システムおよび空気調和システムのプログラム更新方法
CN112486561B (zh) * 2020-11-25 2024-03-22 北京电力交易中心有限公司 基于区块链的版本回溯方法、装置及相关设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06187206A (ja) * 1992-12-21 1994-07-08 Fuji Xerox Co Ltd ファイル管理装置
JP2006031455A (ja) * 2004-07-16 2006-02-02 Nec Corp 電子メールを用いた携帯端末のソフトウェア更新システムおよび方法、並びにサーバ装置
JP5040301B2 (ja) * 2006-12-27 2012-10-03 日本電気株式会社 端末管理システム、方法、及び、プログラム
JP4249793B2 (ja) * 2007-09-26 2009-04-08 三菱電機株式会社 差分データ生成装置、差分データ生成装置の差分データ生成方法および差分データ生成プログラム
JP2009086853A (ja) * 2007-09-28 2009-04-23 Fujitsu Social Science Laboratory Ltd データ合成処理装置,プログラム,および処理方法

Also Published As

Publication number Publication date
JP2011113123A (ja) 2011-06-09

Similar Documents

Publication Publication Date Title
US11409703B2 (en) File versions within content addressable storage
JP5705869B2 (ja) クラスタベースのjavaアプリケーションシステムのコードをロードおよび更新する装置および方法
US9690671B2 (en) Manifest-based snapshots in distributed computing environments
US7681076B1 (en) Method and an apparatus to perform fast log replay
JP5729901B2 (ja) 差分管理装置及びコンピュータプログラム及び差分管理方法
CN100452038C (zh) 管理文件修订的方法与系统
US6374400B1 (en) Code server
US10656845B2 (en) System and method for managing container image
US7676503B2 (en) Hybrid computer restore using network service
US20190272255A1 (en) Files having unallocated portions within content addressable storage
EP0752660A1 (en) Client-server computer system and method utilizing a local client disk drive as a data cache
US20040128269A1 (en) System and method for managing data through families of inter-related metadata tables
US20060015527A1 (en) System and method for transport of objects utilizing LDAP directory structure
US8225192B2 (en) Extensible cache-safe links to files in a web page
Mundkur et al. Disco: a computing platform for large-scale data analytics
US11537617B2 (en) Data system configured to transparently cache data of data sources and access the cached data
CN111200634B (zh) 缓存资源联动更新方法、系统及服务器
US8266189B2 (en) Adapting between coupled and decoupled provider interfaces
US20090006619A1 (en) Directory Snapshot Browser
US20100262647A1 (en) Granular data synchronization for editing multiple data objects
US10430341B2 (en) Log-structured storage method and server
US8332844B1 (en) Root image caching and indexing for block-level distributed application management
US8719812B1 (en) Methods, systems, and computer readable media for dynamically modifying and utilizing a software package description for software installation
US20160323379A1 (en) Distributed storage of software images in computing systems
US20210240583A1 (en) Method and system for seamless database backup live-mounting using self-contained database backups

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120808

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20121207

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131030

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131105

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131226

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140418

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20140428

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20140704

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150320

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150407

R150 Certificate of patent or registration of utility model

Ref document number: 5729901

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees