(58)【調査した分野】(Int.Cl.,DB名)
第1パッチファイルを保持する第1保持部と、所定のブロックサイズをもつ複数のデータブロックにより構成される第2パッチファイルの各データブロックの第1ハッシュ値を保持する第2保持部に接続するコンピュータに、
第1パッチファイルにおける前記ブロックサイズ分のデータの第1ハッシュ値を算出する機能と、
第1段階の比較処理として、算出された第1ハッシュ値と、前記第2保持部に保持された各データブロックの第1ハッシュ値とを比較する機能と、
第1段階の比較処理において第1ハッシュ値同士の一致を判定すると、第2段階の比較処理として、第1パッチファイルにおける前記ブロックサイズ分のデータの第2ハッシュ値と、第1ハッシュ値が一致した第2パッチファイルのデータブロックの第2ハッシュ値とを比較する機能と、
第2段階の比較処理において第2ハッシュ値同士の一致を判定すると、第1パッチファイルにおける前記ブロックサイズ分のデータと、第2パッチファイルのデータブロックに含まれるデータの一致を判定する機能と、
第2段階の比較処理においてデータ同士の一致を判定すると、一致を判定した第1パッチファイルにおける前記ブロックサイズ分のデータの終了アドレスの次のアドレスから連続する前記ブロックサイズ分のデータの第1ハッシュ値を算出する機能と、
第1段階の比較処理として、一致を判定した第1パッチファイルにおける前記ブロックサイズ分のデータの終了アドレスの次のアドレスから連続する前記ブロックサイズ分のデータの第1ハッシュ値と、前記第2保持部に保持された第1ハッシュ値とを比較する機能と、
を実現させるためのプログラム。
【発明を実施するための形態】
【0011】
図1は、本発明の実施例にかかるアプリケーション配信システム1を示す。アプリケーション配信システム1は、アプリケーションソフトウェアおよびパッチファイルを配信する配信サーバ4と、配信サーバ4にアプリケーションソフトウェアおよびパッチファイルを配信可能にアップロードする情報処理装置10と、インターネットなどのネットワーク2を介して配信サーバ4からアプリケーションソフトウェアおよびパッチファイルをダウンロードする複数のユーザ端末3とを備える。実施例においてアプリケーションソフトウェアはゲームソフトウェアであり、ユーザ端末3はゲーム装置であってよい。
【0012】
ゲームメーカは、シナリオを修正または追加する際にパッチファイルを作成する。パッチファイルは、ゲームメーカから情報処理装置10に提供されて、配信サーバ4に配信可能にアップロードされる。ユーザ端末3は、配信サーバ4からパッチファイルをダウンロードして、ゲームを最新の状態で実行できるようにする。シナリオの修正や追加は頻繁に行われることが多く、パッチファイルはバージョン情報により管理される。
【0013】
複数のバージョンのパッチファイルがリリースされている場合、ユーザ端末3は、最新のバージョンのパッチファイルをダウンロードすれば、ゲームを最新の状態で起動できるようになる。ユーザ端末3が全てのバージョンのパッチファイルをダウンロードしているとは限らないため、最新のパッチファイルには、過去のバージョンのパッチファイルに含まれる修正コンテンツおよび追加コンテンツが含まれる。そのためバージョンが新しいほど、パッチファイルのデータ量は大規模化する。
【0014】
ユーザ端末3が、最新バージョンのパッチファイルをダウンロードする際、既にダウンロード済みの過去のバージョンのパッチファイルに含まれるコンテンツをダウンロードする必要はない。そのため実施例の情報処理装置10は、最新のバージョンのパッチファイルのデータブロックに含まれるデータが過去のバージョンのパッチファイルに含まれるか確認して、未ダウンロードのデータブロックのみをユーザ端末3に配信させるようにする。
【0015】
図2は、情報処理装置10の機能ブロックを示す。情報処理装置10は、処理部20および記録部40を備える。処理部20は、第1ハッシュ値算出部22、第2ハッシュ値算出部24、比較部26および差分情報生成部28を有し、記録部40は、第1パッチファイル保持部42、第2パッチファイル保持部44、ハッシュ値保持部46および差分情報記録部48を有する。
【0016】
これらの構成は、ハードウエアコンポーネントでいえば、任意のコンピュータのCPU、メモリ、メモリにロードされたプログラム、ストレージなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
【0017】
情報処理装置10は、配信サーバ4と同じ運営主体によって管理され、新しいパッチファイルと古いパッチファイルとの差分情報を生成する。なお情報処理装置10の機能はゲームメーカに提供されて、新しいパッチファイルの配信データ量をどれだけ削減できるか確認するために利用されてもよい。
【0018】
バージョンが異なるパッチファイル間では、多くのデータが共通する。バージョン1の古いパッチファイルと、バージョン2の新しいパッチファイルが存在する場合、既にユーザ端末3が、バージョン1のパッチファイルをダウンロード済みであれば、バージョン2のパッチファイルにおける同じデータを含むデータブロックをダウンロードすることは、ネットワークリソースを無駄に使用することになる。そこでユーザ端末3において既にダウンロード済みのデータについては、配信サーバ4からダウンロードしないことが好ましい。
【0019】
第1パッチファイル保持部42は、古いバージョン1の第1パッチファイルを保持し、第2パッチファイル保持部44は、新しいバージョン2の第2パッチファイルを保持する。第2パッチファイルは、最新のパッチファイルであってよい。情報処理装置10は、ゲームメーカから第2パッチファイルを受け取ると、第2パッチファイル保持部44に格納して、第2パッチファイルの複数のデータブロックの中で、第1パッチファイルとの関係で配信しなくてよいデータブロックが存在するか確認する処理を実施する。
【0020】
図3は、第1パッチファイルと第2パッチファイルの例を示す。各パッチファイルは、所定のブロックサイズをもつ複数のデータブロックにより構成される。パッチファイルは、圧縮されていても、圧縮されていなくてもよい。データブロックはファイルシステムがデータを転送する基本単位であり、たとえば64キロバイトに設定される。実際のパッチファイルは、膨大な数のデータブロックにより構成されるが、
図3では説明の便宜上、第1パッチファイルが20個のデータブロックT
0〜T
19で構成され、第2パッチファイルが20個のデータブロックL
0〜L
19で構成される例を示している。
【0021】
実施例において第1パッチファイルは既にユーザ端末3にダウンロードされている。また第2パッチファイルのデータブロックL
0〜L
19のそれぞれが配信候補である。以下、第2パッチファイルのデータブロックL
0〜L
19のデータが、第1パッチファイルに含まれているか確認する手法について説明する。
【0022】
図4は、第2パッチファイルの各データブロックの第1ハッシュ値を示す。第1ハッシュ値算出部22は、第2パッチファイルの各データブロックの第1ハッシュ値を算出する。ここで第1ハッシュ値算出部22は、線形合同法(linear congruential generator)を利用して、64ビットのローリングハッシュ値Rを算出する。具体的に第1ハッシュ値算出部22は、データブロックL
0の第1ハッシュ値をR
0、データブロックL
1の第1ハッシュ値をR
1、・・・データブロックL
19の第1ハッシュ値をR
19と算出する。第1ハッシュ値算出部22は、算出した第1ハッシュ値を、ハッシュ値保持部46に記憶させる。これによりハッシュ値保持部46は、第2パッチファイルの各データブロックの第1ハッシュ値を保持する。
【0023】
以後、第1パッチファイルのデータが、第2パッチファイルのデータブロックのデータと同じであるか確認する処理を実施する。ここで比較対象となる第1パッチファイルのデータは、アドレスが連続するブロックサイズ分のデータである。第1ハッシュ値算出部22は、第1パッチファイルにおけるブロックサイズ分のデータの第1ハッシュ値を算出する。
【0024】
最初に第1ハッシュ値算出部22は、第1パッチファイルの先頭バイトからブロックサイズ分のデータの第1ハッシュ値を算出する。
図5は、第1パッチファイルの先頭バイトからブロックサイズ分のデータの第1ハッシュ値R
b0を示す。第1パッチファイルの先頭バイトからブロックサイズ分のデータは、データブロックT
0のデータに対応する。つまり第1ハッシュ値算出部22は、データブロックT
0の64ビットローリングハッシュ値R
b0を算出する。
【0025】
実施例の比較部26は2段階の比較処理を実施する。比較部26は、第1段階の比較処理として、第1ハッシュ値同士を比較し、第1ハッシュ値の一致を判定すると、第2段階の比較処理として、第1ハッシュ値よりも衝突確率の低い第2ハッシュ値同士を比較する。
【0026】
まず比較部26は、第1段階の比較処理として、第1ハッシュ値算出部22により算出された第1ハッシュ値と、ハッシュ値保持部46に保持された第2パッチファイルの各データブロックの第1ハッシュ値とを比較する。つまり比較部26は、算出された第1ハッシュ値R
b0と、第2パッチファイルの各データブロックの第1ハッシュ値R
0〜R
19とを比較する。このとき第1ハッシュ値R
b0が、第1ハッシュ値R
0〜R
19のいずれかと一致すると、比較部26は、第2段階の比較処理を実施するが、ここでは、第1ハッシュ値R
b0が、第1ハッシュ値R
0〜R
19のいずれとも一致せず、第1パッチファイルのデータブロックT
0と同じデータを含むデータブロックが第2パッチファイルに存在しないことが確認される。
【0027】
次に、第1ハッシュ値算出部22は、前回第1ハッシュ値を求めたブロックサイズ分のデータを所定数のバイト分だけスライドして同じブロックサイズ分のデータを特定し、特定したデータの第1ハッシュ値を算出する。なおスライドするバイト数は、ブロックサイズ(64キロバイト)よりも小さいバイト数であり、1バイトであってよい。
【0028】
図6は、前回のブロックサイズ分のデータを所定数のバイト分だけスライドさせたブロックサイズ分のデータの第1ハッシュ値R
b1を示す。
図5のブロックサイズ分のデータと比較して、
図6に示すブロックサイズ分のデータは、データブロックT
0のデータを所定数のバイト分だけずらしたデータである。実施例で、所定数のバイトは「1バイト」であり、第1ハッシュ値算出部22は、前回のデータを1バイトだけスライドしたデータの64ビットローリングハッシュ値R
b1を算出する。
【0029】
比較部26は、第1段階の比較処理として、第1ハッシュ値算出部22により算出された第1ハッシュ値R
b1と、ハッシュ値保持部46に保持された第2パッチファイルの各データブロックの第1ハッシュ値R
0〜R
19とを比較する。ここでは、第1ハッシュ値R
b1が、第1ハッシュ値R
0〜R
19のいずれとも一致せず、第2パッチファイルのデータブロックが、第1パッチファイルのデータブロックT
0を1バイト分だけスライドした64キロバイトのデータに一致しないことが確認される。
以後、第1ハッシュ値算出部22は、第1ハッシュ値を求めたブロックサイズ分のデータを1バイト分ずつずらしたデータを特定し、当該データの第1ハッシュ値を算出する。
【0030】
図7は、前回第1ハッシュ値を求めたブロックサイズ分のデータを1バイト分だけスライドさせたデータの第1ハッシュ値R
b2を示す。第1ハッシュ値算出部22が、第1パッチファイルのデータブロックT
0を2バイト分だけスライドしたデータの64ビットローリングハッシュ値R
b2を算出すると、比較部26が、算出された第1ハッシュ値R
b2と、第2パッチファイルの各データブロックの第1ハッシュ値R
0〜R
19とを比較する。ここでは、第1ハッシュ値R
b2が、第1ハッシュ値R
0〜R
19のいずれとも一致せず、第2パッチファイルのデータブロックが、第1パッチファイルのデータブロックT
0を2バイト分だけスライドした64キロバイトのデータに一致しないことが確認される。
【0031】
図8は、前回第1ハッシュ値を求めたブロックサイズ分のデータを1バイト分だけスライドさせたデータの第1ハッシュ値R
b3を示す。第1ハッシュ値算出部22が、第1パッチファイルのデータブロックT
0を3バイト分だけスライドしたデータの64ビットローリングハッシュ値R
b3を算出すると、比較部26が、算出された第1ハッシュ値R
b3と、第2パッチファイルの各データブロックの第1ハッシュ値R
0〜R
19とを比較する。
【0032】
このとき比較部26が、第1ハッシュ値R
b3と、第2パッチファイルの各データブロックの第1ハッシュ値R
0〜R
19のいずれかとの一致を判定する。ここでは第1ハッシュ値R
b3に、第1ハッシュ値R
8が一致する。比較部26は、第1段階の比較処理において第1ハッシュ値同士の一致を判定すると、第1パッチファイルにおけるブロックサイズ分のデータと、第2パッチファイルのデータブロックL
8とが同一である可能性が高いことを確認する。
【0033】
続いて比較部26は、第2段階の比較処理として、第1パッチファイルにおけるブロックサイズ分のデータの第2ハッシュ値と、第1ハッシュ値が一致した第2パッチファイルのデータブロックL
8の第2ハッシュ値とを比較する。第2段階の比較処理は、第1段階の比較処理で使用した第1ハッシュ値よりも、衝突確率の低い第2ハッシュ値を利用する。第2ハッシュ値は、SHA−256アルゴリズムにより256ビットのハッシュ値として算出されてよい。
【0034】
ハッシュ値の衝突確率を低くするためには、ハッシュ値のビット数を多くすればよいことが知られている。そこで実施例においても、第2ハッシュ値のビット数を、第1ハッシュ値のビット数よりも多くすることで、第2段階の比較処理における衝突確率を低くできる。
【0035】
第2ハッシュ値算出部24はSHA−256アルゴリズムを利用して、第1パッチファイルにおけるブロックサイズ分のデータの第2ハッシュ値H
b3を算出し、また第1ハッシュ値が一致した第2パッチファイルのデータブロックL
8の第2ハッシュ値H
8を算出する。なお第2ハッシュ値算出部24は、事前に第2パッチファイルのデータブロックL
0〜L
19の第2ハッシュ値H
0〜H
19を算出して、ハッシュ値保持部46に記憶させておいてもよい。これにより第2段階の比較処理の開始前に、ハッシュ値保持部46は、第2パッチファイルの各データブロックの第2ハッシュ値を保持していてよい。
【0036】
図9は、算出された2つの第2ハッシュ値を示す。比較部26は、第1パッチファイルにおけるブロックサイズ分のデータの第2ハッシュ値H
b3と、第1ハッシュ値が一致した第2パッチファイルのデータブロックL
8の第2ハッシュ値H
8とを比較し、第2ハッシュ値同士が一致すると、第1パッチファイルにおけるブロックサイズ分のデータと、第2パッチファイルのデータブロックL
8に含まれるデータの一致を判定する。なお第2ハッシュ値同士が一致しなければ、比較部26は、第1パッチファイルにおけるブロックサイズ分のデータと、第2パッチファイルのデータブロックL
8に含まれるデータとが異なることを判定する。
【0037】
差分情報生成部28は、一致した第2パッチファイルのデータブロックL
8のデータが含まれる第1パッチファイルのアドレス情報を取得する。このアドレス情報は、第2パッチファイルと第1パッチファイルの差分情報を構成し、差分情報記録部48に記録される。差分情報は、第2パッチファイルの各データブロックに対して生成され、第1パッチファイルに同一のデータが含まれるデータブロックに対しては、同一のデータが第1パッチファイルに含まれていることを示すフラグ情報(フラグ値1)と、第1パッチファイルのアドレス情報が差分情報として記録される。
【0038】
第1ハッシュ値算出部22が、第1パッチファイルの最終バイトを含むデータの第1ハッシュ値を算出し、比較部26による比較処理が終了すると、差分情報生成部28は、第1パッチファイルに同一のデータが含まれないデータブロックに対して、同一のデータが第1パッチファイルに含まれていないことを示すフラグ情報(フラグ値0)を差分情報として記録する。
【0039】
実施例において比較部26は、第1段階の比較処理を64ビットの第1ハッシュ値を用いて実施することで、256ビットのハッシュ値を用いて第1段階の比較処理を実施する場合と比較すると、第1段階における計算量を大幅に削減できる。また実施例では第1ハッシュ値算出部22が、第1パッチファイルのブロックサイズ分のデータを1バイトずつスライドして第1ハッシュ値を算出し、比較部26が、算出された第1ハッシュ値と第2パッチファイルの各データブロックの第1ハッシュ値とを比較する第1段階の比較処理を繰り返す。これにより第2パッチファイルのデータブロックに含まれるデータと同一である可能性が高い全てのデータを、第1パッチファイルから抽出でき、第2パッチファイルの配信データ量を大幅に削減することが可能となる。
【0040】
情報処理装置10は、全ての処理を完了すると第2パッチファイルを各データブロック内で暗号化し、暗号化した第2パッチファイルと、差分情報記録部48に記録した差分情報とを、配信サーバ4に配信可能にアップロードする。
【0041】
第1パッチファイルをダウンロード済みのユーザ端末3が、配信サーバ4に第2パッチファイルの送信を要求すると、配信サーバ4は、ユーザ端末3が第1パッチファイルをダウンロード済みであることを確認する。それから配信サーバ4は、第1パッチファイルと第2パッチファイルとの差分情報を参照して、第2パッチファイルの配信処理を実行する。この配信処理では、フラグ値0が設定されたデータブロックが配信され、一方でフラグ値1が設定されたデータブロックについては配信せず、対応付けられた第1パッチファイルのアドレス情報が配信される。
【0042】
以上、本発明を実施例をもとに説明した。この実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。実施例では、アプリケーションの例としてゲームを示したが、それ以外のアプリケーションであってもよい。
【0043】
実施例では、第1ハッシュ値算出部22が、第1パッチファイルにおいてブロックサイズ分のデータを1バイトずつスライドさせて第1ハッシュ値を算出することを説明した。
図9に示すように比較部26が、第1パッチファイルにおけるブロックサイズ分のデータと第2パッチファイルのデータブロックとが一致することを判定すると、第1ハッシュ値算出部22は、前回のブロックサイズ分のデータをブロックサイズ分だけずらしたデータ、つまり前回のブロックサイズ分の終了アドレスの次のアドレスから連続するブロックサイズ分のデータの第1ハッシュ値を算出してよい。
【0044】
パッチファイルでは、データ読出の効率等のために、同じデータが記録されていることが多い。そのため比較部26が、第1パッチファイルにおけるデータに一致するデータブロックL
8を見つけた後、比較処理を繰り返していくと、第1パッチファイルにおける別のデータがデータブロックL
8に一致することもある。この場合、差分情報生成部28は、その後のデータ構成が第2パッチファイルに近い第1パッチファイルのデータのアドレス情報を、データブロックL
8に対する差分情報として記録することが好ましい。
【0045】
実施例で比較部26は、第1段階の比較処理を64ビットの第1ハッシュ値を用いて実施した。第1段階の処理効率を高めるため、比較部26は、第1段階の比較処理を分割して実施してよい。つまり比較部26は、最初に64ビットのうちの一部のビットを用いた一致判定を実施し、その後、一部一致した第1ハッシュ値の64ビットを比較する処理を実施してよい。このときハッシュ値保持部46は、第1ハッシュ値R
0〜R
19に加えて、第1ハッシュ値R
0〜R
19の上位24ビットを抽出して保持し、比較部26は、第1ハッシュ値算出部22により算出された第1ハッシュ値の上位24ビットと、ハッシュ値保持部46に保持された第1ハッシュ値R
0〜R
19の上位24ビットとを最初に比較してよい。
【0046】
変形例において、第2ハッシュ値算出部24は、第1ハッシュ値算出部22によって代用されてよい。変形例で第1ハッシュ値算出部22は、第1段階の比較処理で使用する第1ハッシュ値とともに、同一ビット長の値の異なる1以上の第1ハッシュ値を算出する。具体的に第1ハッシュ値算出部22は、線形合同法のパラメータを異ならせて、同一ビット長の値の異なる複数の第1ハッシュ値を算出する。比較部26は、同一ビット長の値の異なる1以上の第1ハッシュ値を、第2ハッシュ値の少なくとも一部として利用してよい。たとえば第1ハッシュ値算出部22が、第1段階の比較処理で使用する第1ハッシュ値とともに、別値をもつ3種類の第1ハッシュ値を算出することで、比較部26は、合計256ビットの第2ハッシュ値として利用してもよい。