JP5149063B2 - データ比較装置およびプログラム - Google Patents

データ比較装置およびプログラム Download PDF

Info

Publication number
JP5149063B2
JP5149063B2 JP2008117808A JP2008117808A JP5149063B2 JP 5149063 B2 JP5149063 B2 JP 5149063B2 JP 2008117808 A JP2008117808 A JP 2008117808A JP 2008117808 A JP2008117808 A JP 2008117808A JP 5149063 B2 JP5149063 B2 JP 5149063B2
Authority
JP
Japan
Prior art keywords
data
data string
word
matching
comparison
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
JP2008117808A
Other languages
English (en)
Other versions
JP2009266128A (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.)
Japan Broadcasting Corp
Original Assignee
Japan Broadcasting 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 Japan Broadcasting Corp filed Critical Japan Broadcasting Corp
Priority to JP2008117808A priority Critical patent/JP5149063B2/ja
Publication of JP2009266128A publication Critical patent/JP2009266128A/ja
Application granted granted Critical
Publication of JP5149063B2 publication Critical patent/JP5149063B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Description

本発明は、データ同士を比較し差分情報を出力するデータ比較装置およびそのプログラムに関する。
ソフトウェア開発段階では、機能向上やバグ修正などのファイル編集が頻繁に発生する。このとき、あるファイルを編集して新しいファイルができたとき、編集箇所を知るために、UNIX(登録商標)のdiffに代表される、新旧2つのファイルを比較して差分を出力するツールが用いられる。このようなファイル編集による変更の場合は、一般的には変更箇所が少ないため、差分のデータサイズは小さい。これら新旧両方のファイルの情報を残す必要がある場合は、それらのファイルを物理的に両方とも残すよりも、変更前のファイルとそれらの差分を表わす差分ファイルを残す方が保存領域の節約になるなどのメリットがあるため、差分ファイルの生成にもこのような差分出力ツールがよく用いられる。
差分ファイルを生成するアルゴリズムとしては、差分データのサイズをできるだけ短くすることが求められていた。そのための代表的なアルゴリズムとして、LCS(Longest Common Subsequence:最長共通サブシーケンス)またはSED(Shortest Edit Distance:最小編集距離)がある。
また、この考え方をベースにして、高速化を図ったアルゴリズムが非特許文献1に記載されている。また、差分検索アルゴリズムとしてLCSやSEDの代わりに、サフィックス・ツリー(suffix tree)を用い、同時にデータ圧縮を行うことで差分データサイズを小さくするbdiffが非特許文献2に記載されている。
特許文献1に記載されている発明は、rsyncアルゴリズム(非特許文献3)とほぼ同様に、片方のファイルをあるブロックサイズに分割し、それぞれのブロックのチェックサムを求める。もう片方のファイルの先頭から同じブロックサイズのブロックのチェックサムを求め、相方のファイルの中でチェックサムが同じになるブロックがあるかどうか検索する。同じブロックが見つからない場合は、ブロックを後方に1バイトずらしてチェックサムを求め、同様の検索を行う。以降、これを繰り返す。検索の過程で同じブロックが見つかった場合、両方のファイルともブロックサイズ分だけ後方にずらしたブロック同士でチェックサムを比較し、同一か否かを判定する。このように、文字単位の比較とブロック単位の比較を組み合わせて、高速化を図っている。
特許文献2に記載されている発明は、2つのファイルのLCSを検索し、そのLCSを境に2つのファイルを論理的に前後に分断する。その分断したファイル同士で、同様に、LCSの検索および分断の作業を行い、LCSが予め与えられた長さよりも短くなるまで、この作業を階層的に繰り返す。この発明は、LCSの部分で前後に分断して検索範囲を限定することにより、高速化を図っている。
EUGENE W. MYERS,"An O(ND) difference algorithm and its variations",Algorithmica,1986年,Vol.1,No.2,pp.251-266. Walter F. Tichy,"The string-to-string correction problem with block moves",ACM Transactions on Computer Systems,1984年,volume 2,issue4,pp.309-321. Andrew Tridgell,Paul Mackerras,"The rsync algorithm",[平成20年4月5日検索],インターネット<URL: http://rsync.samba.org/tech_report/> 特開2005−173726 特表2005−525641
しかしながら、背景技術に属する上記のどの方法も、比較する2つのファイルの差分が少ないことを前提としたアルゴリズムであった。従って、差分が非常に少ない場合は短時間で結果を出力できるが、差分が大きくなると比較的時間がかかるという問題があった。特に、サイズの大きいファイル同士の比較の場合はこの時間の問題が顕著であった。
また、背景技術に属する方法では、ファイルを比較して差分を得るための処理時間がファイルのサイズや差分のサイズに依存しており、所望の時間内に処理を終えるようにすることはできなかった。
本発明は、上記の課題認識に基づいて行なわれたものであり、比較的短時間でファイルを比較して差分情報を出力するためのデータ比較装置およびプログラムを提供することを目的とする。また、それらのデータ比較装置およびプログラムが、ファイルのサイズに関わらず、所望時間内で処理を終えるようにすることを目的とする。
[1]上記の課題を解決するための本発明の一態様は、それぞれ複数のワードからなる第1データ列および第2データ列を比較するデータ比較装置であって、前記第1データ列に含まれる前記ワードを所定の第1選択間隔(第1選択間隔は1以上の整数)の分ずつ飛ばして得られる第1一致箇所検索対象ワードと、前記第2データ列に含まれる前記ワードを所定の第2選択間隔(第2選択間隔は1以上の整数)の分ずつ飛ばして得られる第2一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す一致箇所検索部と、前記一致箇所検索部が検出した一致箇所のワードを基に前記第1データ列および前記第2データ列のそれぞれ前および後に連なるワードについて、前記第1データ列と前記第2データ列との間で比較を行ない、両者が一致する範囲を共通部分の範囲として検出する共通部分検索部と、前記共通部分検索部によって検出された共通部分の範囲の情報に基づき、前記第1データ列と前記第2データ列との間の差分情報を出力する差分情報出力部とを具備することを特徴とする。
この構成によれば、一致箇所検索部は、第1データ列中のワードのうち所定の第1選択間隔の分ずつ飛ばして得られる第1一致箇所検索対象ワードのみを比較対象とする。また同様に、第2データ列中のワードのうち所定の第2選択間隔の分ずつ飛ばして得られる第2一致箇所検索対象ワードのみを比較対象とする。従って、全ワードを比較対象とする場合に比べて、比較回数が少なくて済む。つまり、処理時間が短くて済む。また、共通部分検索部は、一致箇所検索部によって検出された一致箇所を基に、その前後に連なるワードについて第1データ列と第2データ列との間の値の比較を行うため、一致箇所を含む共通部分の範囲を求められる。共通部分検索部が求めた共通部分の範囲の情報に従い、差分情報出力部は、第1データ列と第2データ列の差分情報を出力できる。なお、共通部分の範囲の情報と差分情報とは、情報として互いに等価である。
また、この構成によれば、第1選択間隔と第2選択間隔を、適宜設定することが出来る。一致箇所検索対象ワードの数は、各々のデータ列の長さ(ワード数)をこの選択間隔で除した数にほぼ等しいため、第1選択間隔と第2選択間隔の設定により、ワードの値の比較回数を変化させることができる。つまり、たとえ第1データ列や第2データ列のサイズが膨大なものであっても、所望の比較回数(ひいては、所望の処理時間)となるように、第1選択間隔と第2選択間隔を設定でき、その代償は、一致箇所の検出機会の部分的損失に過ぎない。
なお、第1選択間隔および第2選択間隔は1以上の任意の整数として良いが、これらの数値を比較的大きくするほうが、処理時間を短くするという本発明の効果がより大きい。例えば、第1選択間隔および第2選択間隔の少なくともいずれか一方を2以上とすると処理時間の短縮が図れる。第1選択間隔および第2選択間隔をそれぞれ10以上とするとさらに処理時間の短縮が図れる。第1選択間隔および第2選択間隔をそれぞれ100以上とするとより一層処理時間の短縮が図れる。これらの値が大きな値であればあるほど処理時間の短縮が図れるが、検出が保証される共通部分の長さが長くなる。(それより短い共通部分は検出できなくなる可能性がある)。これらの間隔の設定の仕方については、後で述べる。
[2]また、本発明の一態様は、上記のデータ比較装置において、前記第1選択間隔と前記第2選択間隔との最大公約数は1であることを特徴とするものである。
この構成により、第1一致箇所検索対象ワードと第2一致箇所検索対象ワードが徐々にずれていく。従って、共通部分の位置(各々のデータ列の先頭位置からのワード数)が第1データ列内と第2データ列内でずれていても、共通部分が大きければ、一致箇所検索対象ワードが重なる箇所が存在する可能性が高くなる。つまり、一致箇所検出の可能性が高くなる。また、共通部分のワード数が前記第1選択間隔と前記第2選択間隔の最小公倍数以上の場合は、一致箇所が必ず検出できる。
[3]また、本発明の一態様は、上記のデータ比較装置において、前記第1一致箇所検索対象ワードの値をソートし、その結果得られる順序情報を順序情報記憶部に書き込む順序付処理部をさらに具備し、前記一致箇所検索部は、前記順序情報記憶部から前記順序情報を読み出すことにより、ある前記第2一致箇所検索対象ワードを、比較する必要のある前記第1一致箇所検索対象ワードのみと比較し、両者が一致する箇所を探すことを特徴とするものである。
この構成により、一致箇所検索部が順序情報を利用できることによって、ある第2一致箇所検索対象ワードについて、すべての第1一致箇所検索対象ワードとの比較を行なう必要がなく、例えば二分木的に大小比較をすることにより、限定された数の第1一致箇所検索対象ワードとの比較をすれば充分である。つまり、第1一致箇所検索対象ワードとの比較を効率的に行える。よって、トータルでの比較回数が少なくて済み、従って全体の処理時間が短くて済む。
また、原理的に、第1一致箇所検索対象ワードの数について対数オーダーの比較回数で済む。つまり、第1一致箇所検索対象ワードの数が多いほど(第1データ列のワード数が多いほど)、この構成による時間短縮の効果が大きく得られる。
[4]また、本発明の一態様は、上記のデータ比較装置において、前記第1データ列および前記第2データ列に含まれる前記ワードは、これらデータ列の元となる比較対象データを所定サイズに分割したブロックのデータにハッシュ関数を適用して得られたハッシュ値を有するものであることを特徴とする。
この構成により、元データにおけるブロックのデータが一致してない限り、第1データ列と第2データ列に含まれるワードの値が偶然に一致する可能性は非常に小さくなる。つまり、本来共通部分ではないのに偶々第1および第2の一致箇所検索対象ワードの値が同じになってしまう可能性は非常に小さくなる。つまり、元データそのものを比較することなく、データ比較における高い精度が得られることとなる。
[5]また、本発明の一態様は、それぞれ複数のワードからなる第1データ列および第2データ列を比較する処理をコンピュータに実行させるプログラムであって、前記第1データ列に含まれる前記ワードを所定の第1選択間隔(第1選択間隔は1以上の整数)の分ずつ飛ばして得られる第1一致箇所検索対象ワードと、前記第2データ列に含まれる前記ワードを所定の第2選択間隔(第2選択間隔は1以上の整数)の分ずつ飛ばして得られる第2一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す一致箇所検索過程と、前記一致箇所検索過程で検出した一致箇所のワードを基に前記第1データ列および前記第2データ列のそれぞれ前および後に連なるワードについて、前記第1データ列と前記第2データ列との間で比較を行ない、両者が一致する範囲を共通部分の範囲として検出する共通部分検索過程と、前記共通部分検索過程において検出された共通部分の範囲の情報に基づき、前記第1データ列と前記第2データ列との間の差分情報を出力する差分情報出力過程との処理をコンピュータに実行させることを特徴とするものである。
本発明によれば、2つのデータ列の共通部分を高速に検出することができる。つまり、2つのデータ列の差分を出力する処理を高速化できる。また、パラメータ(第1選択間隔および第2選択間隔)を適宜設定することにより、ワード間の比較処理の回数を制御することができる。つまり、データ列のサイズがたとえ大きい場合にも、処理時間を所望の程度に抑えることが可能となる。つまり、全く異なる2つのデータ列について、予め設定された時間内に、それらが互いに全く異なるものであることを判定できる。
以下、本発明の実施形態について図面を参照しながら説明する。
差分データを得るための処理としては、背景技術で述べた手法と同様に、データ比較装置が、与えられた2つのデータ列の間の共通部分(共通部分が複数箇所ある場合は、複数箇所の共通部分)を見つけ、共通部分を除外した部分を差分データとする。したがって、以下で説明する実施形態では、2つのデータ列の共通部分を探す処理を高速に行なえるようにする。
従来の手法では、できるだけ多くの共通部分を見つけることによって差分データ量を小さくすることに主眼を置いていた。これに対し、本発明の実施形態では、ワード数の非常に多い2つのデータ列に対し、これらを比較しその差分を高速に出力することを目的とする。また、まったく異なるデータ列同士の比較を行った場合、共通部分がないと判断するのも高速に行えるようにする。代わりに、差分のデータ量は必ずしも最小である必要はなく、短い共通部分は見逃しても良いという戦略を基本とする。ここで、ワードとはデータ1個分である。ワードの長さは1バイト(=8ビット)程度であっても良いが、本実施形態では、典型的には4バイトから64バイト程度の長さを有するワードを想定する。また、64バイトを超える長さのワードであっても良い。
また、データ列を構成する各ワードは、一例としてはハッシュ関数が返す値である。良好なハッシュ関数を使えば、ハッシュ関数が適用される元のデータが全く同一でない限り、返されるハッシュ値が偶然に一致する可能性は非常に小さい。
[第1の実施の形態]
図1は、本発明の第1の実施形態によるデータ比較装置の機能構成を示すブロック図である。図示するように、データ比較装置1は、共通部分検索部3と、一致箇所検索部4と、差分情報出力部5と、制御部6と、データファイル10Aと10Bと20Aと20Bと、ハッシュデータ生成部15とを含んで構成される。
一致箇所検索部4は、制御部6の指示で、制御部6から受け取ったデータ列AとBの比較用ポインタが指す位置以降のデータ列を対象とし、後述するデータ列Aに含まれるワードを所定の第1選択間隔(n)の分ずつ飛ばして得られる一致箇所検索対象ワードと、データ列Bに含まれるワードを所定の第2選択間隔(n)の分ずつ飛ばして得られる一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す機能を有する。得られた一致箇所のデータ列AとBの比較用ポインタを制御部6に返す。一致箇所がない場合は、データ列Bの比較用ポインタをデータ列Bの末尾に設定して、データ列AとBの比較用ポインタを制御部6に返す。
共通部分検索部3は、制御部6の指示で、制御部6から受け取ったデータ列AとBの比較用ポインタを起点とし、一致箇所検索部4が検出した一致箇所のワードを基にデータ列Aおよびデータ列Bのそれぞれ前および後に連なるワードについて、データ列Aとデータ列Bとの間の比較を行ない、両者が一致する範囲を共通部分の範囲として検出する機能を有する。共通部分のデータ列AとBの比較用ポインタの範囲を差分情報出力部5に出力し、共通部分の範囲の直後のデータ列AとBの比較用ポインタを制御部6に返す。
差分情報出力部5は、共通部分検索部3によって検出された共通部分の範囲の情報に基づき、制御部6の指示で、データ列Aとデータ列Bとの間の差分情報を出力する機能を有する。
また、制御部6は、一致箇所検索部4、共通部分検索部3、差分情報出力部5の実行を制御する。具体的には、データ列Aおよびデータ列Bそれぞれの比較用ポインタを初期化し、現在の比較用ポインタの位置を用いて共通部分検索部3に処理を実行させ、共通部分の直後のデータ列AとBの比較用ポインタを受け取り、比較用ポインタがデータ列の末尾を指しているかどうかを判断し、ポインタが末尾まで行っていなければ現在の比較用ポインタの位置を用いて一致箇所検索部4に処理を実行させ、一致箇所のデータ列AとBの比較用ポインタを受け取り、また比較用ポインタがデータ列の末尾を指しているかどうかを判断することにより、順次、共通部分3と一致箇所検索部4が処理を行なえるように制御する。また、ポインタが末尾を指すと(つまり、一致箇所検索および共通部分検索がすべて終了すると)、差分情報出力部5に処理を実行させる。
データファイル20Aおよび20Bは、このデータ比較装置1が比較処理を行なう対象である2つのデータファイルである。また、データファイル10Aおよび10B(比較対象データ)は、別の、2つのデータファイルである。
ハッシュデータ生成部15は、所定のハッシュ関数の計算を行なう機能を有しており、データファイル10Aを基にそのハッシュ関数を適用してデータファイル20Aを生成するとともに、データファイル10Bを基に同じハッシュ関数を適用してデータファイル20Bを生成する。使用するハッシュ関数は、適宜選択すれば良いが、例えば、MD5やSHAやHAVALやチェックサムやCRC(巡回冗長符号)などを用いることができる。
なお、データファイル10Aと10Bと20Aと20Bは、半導体メモリやハードディスク装置(HDD)などの記録媒体に格納されている。
図2は、データファイル10Aと20Aとの関係を示す概略図である。図示するように、データファイル10Aと20Aは、いずれもシーケンシャルファイルである。
データファイル10Aは、所定の長さを有するブロックをM個含んでいる。一例としては、ブロックサイズは4kバイト(1kバイトは、1024バイト)とする。この例の場合、データファイル10A全体の長さは、4k×M(バイト)である。この図では、各ブロックのデータの値を、先頭ブロックから順に、B(0),B(1),B(2),・・・・・・,B(M−1)と表わしている。Mの値はいかなる値であっても良いが、例えば、M=1048576(=2^20)とすると、データファイル10A全体の長さは4GB(ギガバイト)である。なお、ブロック長は、4kバイトに限らず、任意のサイズであって良い。
データファイル20Aは、ハッシュデータ生成部15によってデータファイル10Aを基に生成されるデータである。データファイル20Aは、ワード(ここでは、1ワードは16バイトとする)をM個含んでいる。つまり、データファイル20A全体の長さは、16×M(バイト)である。各々のワードは、上記のデータファイル10Aのブロックに対応しており、その順序も保存されている。例えば、データファイル10Aの先頭のブロックB(0)を基に、ハッシュデータ生成部15がハッシュ関数を適用し、その結果得られる値h(B(0))がデータファイル20Aの先頭のワードに格納されている。データファイル10Aの次のブロックB(1)には、データファイル20Aの次のワードの値h(B(1))が対応している。以下同様に続き、データファイル10Aの最後のブロックB(M−1)には、データファイル20Aの最後のワードの値h(B(M−1))が対応している。なお、ワード長は、16バイトに限らず任意のサイズであって良いが、現在一般によく使われるハッシュ関数が返す値は、16バイト(=128ビット)、20バイト(=160ビット)、28バイト(=224ビット)、32バイト(=256ビット)、48バイト(=384ビット)、64バイト(=512ビット)などである。データファイル20Aのワード長などを基に、適宜使用するハッシュ関数を選択して用いるようにする。
以上、図を参照しながらデータファイル10Aと20Aの関係について説明したが、データファイル10Bと20Bの関係についても同様である。但し、データファイル10Aの長さとデータファイル10Bの長さとが異なっていても良い。
次に、データ比較装置1がデータファイル20Aと20Bとを比較する処理の方法および手順について説明する。
図3は、データ比較装置1において、主として共通部分検索部3および一致箇所検索部4の機能によりデータファイル20Aと20Bとの間の共通部分を発見するための、処理の概要を示す概略図である。この図において、データ列A(第1データ列)は、データファイル20Aのデータを表わしており、データ列Aが含むワード数はNワード(Nは1以上の整数)である。データ列Aのうち、先頭からnワード(nは1以上の整数,第1選択間隔)毎に、一致箇所検索部4によって検索される一致箇所検索対象ワード51Aまたは52A(第1一致箇所検索対象ワード)が存在している。これらの一致箇所検索対象ワード51Aまたは52Aは、図中において、それぞれ固有のハッチングパターンで示している。つまり、データ列Aには、N/n個(但し、この場合の除算の剰余は切り上げ)の一致箇所検索対象ワードが含まれている。また同様に、データ列B(第2データ列)は、データファイル20Bのデータを表わしており、データ列Bが含むワード数はNワード(Nは1以上の整数)である。データ列Bのうち、先頭からnワード(nは1以上の整数,第2選択間隔)毎に、一致箇所検索部4によって検索される一致箇所検索対象ワード51Bまたは52B(第2一致箇所検索対象ワード)が存在している。これらの一致箇所検索対象ワード51Bまたは52Bは、図中において、それぞれ固有のハッチングパターンで示している。つまり、データ列Bには、N/n個(但し、この場合の除算の剰余は切り上げ)の一致箇所検索対象ワードが含まれている。
なお、nとn個の少なくともいずれか一方を、2以上とすることにより、処理の高速化が図れる。
図示するデータ列の例において、データ列AとBの共通部分として示している範囲は、その範囲に含まれるすべてのワードの値が、データ列AとBとの間で完全に一致する範囲である。つまり、この共通部分が、共通部分検索部3によって検出されるべき範囲である。従って、上述した一致箇所検索対象ワードのうち、この共通部分に含まれる一致箇所検索対象ワード52Aと52Bとは、互いに値が一致する。なお、データ列Aにおける当該共通部分のワード位置(データ列Aの先頭から当該共通部分の直前までのワード数)と、データ列Bにおける当該共通部分のワード位置(同様)とは、必ずしも一致する必要はない。
共通部分検索部3と一致箇所検索部4とは協調しながら、制御部6の制御に従い、後述する手順によって、データ列AとBとの共通部分を検出する。そのとき、一致箇所検索部4は、データ列Aに含まれる一致箇所検索対象ワード(51A,52A)と、データ列Bに含まれる一致箇所検索対象ワード(51B,52B)のみを互いに比較する対象とする。また、一致箇所検索部4は、一致箇所検索対象ワード以外のワード(この図において、ハッチングがない部分のワード)は、比較対象とせずに読み飛ばす。
なお、このとき、nとnの最大公約数が1になるように設定し、それに従って一致箇所検索ワードを決定することが好適である。nとnの最大公約数が1になるようにすることにより、下で説明する処理においてデータ列Aとデータ列Bの一致箇所検索対象ワードが少しずつずれていくため、一致箇所を検出できる可能性が高まる。また、共通部分のワード数がnとnの最小公倍数以上の場合は、一致箇所が必ず検出できる。
なお、nとnとの最大公約数が1になるように設定することは必須ではないが、そうしない場合には一致箇所を検出できなくなる可能性もある。例えば、最も簡単な例で、n=n=2とした場合、仮にデータ列Aの0ワード目から9ワード目までとデータ列Bの1ワード目から10ワード目までが共通部分であったとしても(つまり両者が1ワード分ずれている状態)、データ列Aもデータ列Bとも、一致箇所検索対象ワードは偶数ワード目(0ワード目、2ワード目、4ワード目、・・・)のみとなってしまい、この共通部分に含まれる一致箇所を検出できない。
一致箇所検索部4は、データ列Bに含まれる一致箇所検索対象ワードの各々について、データ列Aに含まれる一致箇所検索対象ワードの各々との比較を行う。この比較の結果、一致箇所検索部4が一致するワードを見つけた場合には、共通部分検索部3が、その場所から前方向(データ列全体の先頭に向かう方向)と後方向(データ列全体の末尾に向かう方向)に、1ワードずつスキャンし、両データ列の値が同じである範囲(共通部分)の先頭と末尾を探す。このようにして、一致箇所検索部4によって見つけられた一致ワードを含む共通部分の範囲が決定される。
共通部分検索部3によって共通部分の範囲が決定されたあとは、その共通部分の次のワードから、上記の作業をデータ列の最後まで繰り返す。nとnの最大公約数が1のときは、(n×n)ワード以上のサイズを有する共通部分の中のどこかには必ず、データ列AおよびデータBの両方の一致箇所検索対象ワードであるワードが含まれるため、上記のような処理手順により、(n×n)ワード以上のサイズの共通部分を必ず見つけることができる。
また、上記のような処理手順をとる場合、データ列Aとデータ列Bとが全く異なる場合など、双方の一致箇所検索対象ワードが一つも一致しない場合であっても、一致箇所検索部4は、最大でも、(N/n)×(N/n)回の比較処理を行えば良い。つまり、サイズの大きなデータ列同士を比較する場合であっても、nおよびnの値を適宜設定することにより、一致個所の検出の機会を犠牲にすることになるものの、比較処理の回数を抑えることができ、つまりデータ列同士の比較処理にかかる処理時間を所定範囲内に抑えるようにすることができる。
この場合、言い換えれば、データ列のサイズNおよびNが与えられたとき、見つけるべき共通部分の長さの最小値((n×n)ワード)と検索回数(つまり、一致箇所検索部4による比較処理の回数(N/n)×(N/n)、即ち、(N×N)/(n×n))は反比例の関係になっている。つまり、検出すべき共通部分の長さの最小値が一定値である場合は、nとnの個別の値に関係なく、最大検索回数はほぼ同じである。nとnを比較的大きな値にすれば(n×nを比較的大きな値にすれば)、比較回数を少なくすることができるが、共通部分を見逃す確率(検出できない可能性)が増える。逆に、nとnとを比較的小さな値にすれば(n×nを比較的小さな値にすれば)、共通部分を見逃す確率は減るが、比較回数が増える。従って、本実施形態の方法によれば、最大検索時間や見つけるべき共通部分の長さの最小値といった要求条件に従って、nとnを適切に設定することができる。
図4は、データ比較装置1による差分出力のための処理手順を示すフローチャートである。以下、このフローチャートに沿って、データ比較装置1の詳細な処理手順について説明する。
まずステップS61において、データ比較装置1は、初期化処理を行う。この初期化処理では、データファイル20Aおよび20Bをオープンするとともに、比較するワードのポインタ(比較用ポインタ)をデータ列AおよびBのそれぞれの先頭にセットする。
また、この初期化処理は、パラメータnとnを適切な値に設定する処理を含む。このパラメータは、実施条件により設定の手順が異なる。
見つけるべき共通部分の最小値Lを基準に設定する場合は、nは、Lを超えない任意の正整数値と設定する。nは、nと互いに素であり且つL/nを超えない最大の正整数と設定する。このように設定した場合、n×n≦Lとなるので、Lワード以上のサイズを有する共通部分を必ず検出することができる。
一方、比較回数の上限Cを基準にnとnの値を設定する場合は、(N/n)×(N/n)≦Cを満たすようにnとnの値を選択する。これは、データ列AとBとが全く異なるものである場合であっても、両者の一致箇所検索対象ワードを総当り的に比較する回数がせいぜい(N/n)×(N/n)であるためである。
具体的な一例として、nは、(N/C)を下回らない正整数値とする。また、nは、nと互いに素であり、且つ、(N×N)/(n×C)を下回らない最小の正整数値とする。このとき、(N/n)×(N/n)≦Cとなる。つまり総比較回数はC以下となる。
次にステップS62において、共通部分検索部3が、共通部分の範囲を検索する。具体的には、まず、それぞれのデータ列上にある比較用ポインタが示すワードの値を比較し、一致するかどうか判定する。このとき、比較用ポインタは、それぞれのデータ列の現在の一致箇所検索対象ワードを指している。上記判定の結果、一致しない場合には、このステップの処理を終了して次のステップへ進む。上記判定の結果、一致する場合には、両方の比較用ポインタをそれぞれデータ列の前方向に1つずつずらしながら、順次、両方の比較用ポインタが指すワードの値を比較していく。そして、どちらかの比較用ポインタがデータ列の先頭に到達するか、ワードの値が一致しなくなるまで比較用ポインタを前方向に進める。このようにして、共通部分の先頭位置を検索する。次に、比較用ポインタを最初の位置(現在の一致箇所検索対象ワードの位置)に戻し、同様にして、比較用ポインタを後ろ方向に1つずつずらしながら両方のデータ列のワードの値を比較していくことにより、共通部分の末尾の位置を検索する。現在の一致箇所検索対象ワードの位置が共通部分の一部であった場合には、このようにして、その共通部分の先頭位置と末尾位置が求まる。つまり、その共通部分の範囲が決まる。共通部分検索部3は、その共通部分の先頭位置と末尾位置の情報を、制御部6に渡す。
次にステップS63において、制御部6は、AおよびBの両方のデータ列の比較用ポインタがファイルの末尾(ここで、ファイルの末尾とは、データ列が有する最後のワードのさらに後ろである)にあるかどうかを判定する。少なくとも片方の比較用ポインタがファイルの末尾にある場合は(比較すべき一致箇所検索対象ワードの比較をすべて終えた場合)(ステップS63:YES)、ステップS62からS65までのループを抜け出し、ステップS66に進む。判定の結果、比較用ポインタが末尾にない場合(まだ、比較すべき一致箇所検索対象ワードの組み合わせが残っている場合)(ステップS63:NO)、次のステップS64に進む。
次のステップS64に進んだ時点では、AおよびBの両方のデータ列の比較用ポインタは、直前に検索し範囲を確定した共通部分の次のワードを指している。つまり、比較用ポインタは、直前に検索した共通部分の外の位置を指している。このステップでは、必要に応じて比較用ポインタを各データ列の次の一致箇所検索対象ワードの位置に進めた上で、一致箇所検索部4が、そこから、データ列AおよびBの一致箇所検索対象ワードを検索し、一致する箇所を探す。本実施形態では、一致箇所検索部4は、データ列Bの比較用ポインタを固定して、データ列AおよびBの比較用ポインタが指す一致箇所検索対象ワードを比較しながら、一致するワードの組が見つかるまで、データ列Aの比較用ポインタが指す位置をnワードずつ順次進めていく。データ列Aの比較用ポインタが末尾まで行くと、データ列Aの比較用ポインタを一旦は元に戻し(戻す先は、直前に検索された共通部分がある場合はその共通部分より後ろであって且つその中で最初の一致箇所検索対象ワードの位置、あるいは、直前に検索された共通部分がない場合はデータ列Aの最初の一致箇所検索対象ワードの位置)、そしてデータ列B用の比較用ポインタを指す位置をnワード分進め(つまり、データ列Bの次の一致箇所検索対象ワードを指すようにする)、そのデータ列Bの一致箇所検索ワードについて、上と同様に、データ列Aの比較用ポインタを順次進めながら、比較を繰り返していく。このステップの処理が終了するのは、残っていた一致箇所検索対象ワードの比較を全ての組について終えた場合か、或いは、順次比較する途中で一致するワードが検出された場合である。
次にステップS65において、制御部6は、データ列Bのポインタが末尾を指しているか否かを判定する。
データ列Bのポインタが末尾を指している場合とは、ステップS64での一致箇所検索処理において、ワードが一致する箇所が発見されなかった場合である。この場合(ステップS65:YES)には、ステップS62からS65までのループを抜け出して、ステップS66に進む。
一方で、データ列Bのポインタが末尾を指していない場合とは、ステップS64での一致箇所検索処理において、ワードが一致する箇所が発見された場合であり、この場合にはデータ列AおよびBそれぞれの比較用ポインタは、値の一致した一致箇所検索対象ワードをそれぞれ指している。この場合(ステップS65:NO)には、ステップS62の処理へ進む。
なお、ステップS65での判断結果が「NO」であり、ステップS62に進んだ場合には、現在の比較用ポインタが差す位置をもとに、ステップS62の処理として、前述の通りの共通部分の範囲の検索を行なう。
ステップS66に制御が移るのは、前述の通り、ステップS63あるいはS65のいずれかで「YES」と判定された場合、即ち、データ列AおよびBに含まれる一致箇所検索対象ワード同士の比較がすべて完了した場合である。そしてステップS66において、差分情報出力部5は、差分情報出力処理を行なう。このとき出力される差分情報とは、例えば、データ列Aに含まれていてデータ列Bに含まれていないデータ(ワードの並び)の情報およびデータ列Bに含まれていてデータ列Aに含まれていないデータの情報として表現される。このような差分情報は、ステップS62において共通部分検索部3が求めた共通部分の範囲の情報(各々の共通部分の先頭位置と末尾位置の情報)をメモリから読み出し、これに基づいて作成することができる。また、共通部分の範囲の情報そのものも、情報としては差分情報と等価である。共通部分の範囲の情報そのものや、共通部分の範囲の情報とデータ列Aとデータ列Bから作成できる情報は、表現としては様々なパターンがあり得るが、いずれも本質的にはここで言う差分情報である。
図5は、簡単なデータ列の例を用いて、上述した一連の処理の概略を示している概略図である。図示する例は説明のためのものであるので、N=N=16と、それぞれのデータ列の長さを短くしている。また、データ列Aについてはn=2としているため、一致箇所検索対象ワード(51Aまたは52A)は2ワードおきに存在している。また、データ列Bについてはn=3としているため、一致箇所検索対象ワード(51Bまたは52B)は3ワードおきに存在している。また、この例では、データ列Aの6ワード目〜11ワード目までとデータ列Bの8ワード目〜13ワード目までを共通部分とが共通部分であり、この共通部分のサイズは6ワードである。従って、図示する一致箇所検索対象ワードのうち、データ列Aの10ワード目の一致箇所検索対象ワード52Aとデータ列Bの12ワード目の一致箇所検索対象ワード52Bは、互いに値が一致する。
以下、図4のフローチャートと図5の概略図を参照しながら説明する。
まずステップS61の初期化処理において、データ列AおよびBの比較用ポインタを、各々のデータ列の0ワード目に設定する。また、n=2、n=3と、パラメータを設定する。
次にステップS62の共通部分の範囲を検索する処理において、それぞれの比較用ポインタが指す一致箇所検索対象ワードの値同士を比較する。この場合、現在の比較用ポインタが指しているデータ列Aの0ワード目とデータ列Bの0ワード目の値は同一でないため、比較しても一致せず、このステップの処理はここで終了する。
そしてステップS63の判定において、比較用ポインタはデータ列AとBのいずれも、データ列の末尾にはないので(ステップS63:NO)、ステップS64に移る。
次の、ステップS64においては、データ列Bの比較用ポインタの現在位置(0ワード目を指す)から、3ワード(nワード)ごとに、一致箇所検索対象ワードを選び、それらそれぞれの一致箇所検索対象ワードを順次、データ列A内の一致箇所検索対象ワード(0ワード目から、2ワード(nワード)ごと)と比較する。データ列Bの0ワード目、3ワード目、6ワード目、9ワード目について順次比較するところまでは、データ列Aの一致箇所検索対象ワードとの一致はない。さらに比較を続けると、データ列Bの12ワード目(一致箇所検索対象ワード52B)の値がデータ列Aの10ワード目(一致箇所検索対象ワード52A)の値と一致する。一致箇所が検出されたため、これでステップS64の処理を終える。
ステップS65において、この時点で、データ列Aの比較用ポインタは10ワード目の位置を指し、データ列Bの比較用ポインタは12ワード目の位置を指している。つまり、データ列Bの比較用ポインタはデータ列の末尾ではないため(ステップS65:NO)、ステップS62に戻る。
次のステップS62の処理において、データ列Aの10ワード目とデータ列Bの12ワード目とを基点として、前方向および後方向にそれぞれ1ワードずつポインタをずらしながら、両者が一致するワードを検索する。その結果、当該共通部分の先頭位置はデータ列Aの6ワード目、即ちデータ列Bの8ワード目であり、当該共通部分の末尾位置はデータ列Aの11ワード目、即ちデータ列Bの13ワード目であることがわかる。
次のステップS63の判定では、この時点では、データ列Aの比較用ポインタは12ワード目の位置を指し、データ列Bの比較用ポインタは14ワード目の位置を指しているため、即ちデータ列Bの比較用ポインタはデータ列の末尾ではないため(ステップS63:NO)、次のステップS64に進む。
再び、ステップS64では、ワードが一致する箇所の検索を行なう。このとき、データ列Bの比較用ポインタは14ワード目の位置を指しているが、この比較用ポインタの現在の位置(14ワード目)から3ワードごとに一致箇所検索対象ワードを選んでいく。なお、比較用ポインタの位置を、直前の共通部分(データ列Bの8ワード目から13ワード目まで)より後の、当初予定していた一致箇所検索対象ワードのうちの最初のワード(15ワード目)の位置に移してから、3ワードごとに一致箇所検索対象ワードを選んでいくようにしても良い。いずれにしても図示する例では、データ列AとBとの間での一致箇所検索対象ワードの一致は検出されない。そして、データ列Bの比較用ポインタがデータの末尾に達すると、このステップの処理を終える。
次のステップS65の判定においては、データ列Bのポインタは末尾に達しているため(ステップS65:YES)、ループを抜けて、ステップS66に進む。
そして、ステップS66において、差分情報を出力し、このフローチャート全体の処理を終了する。
[第2の実施の形態]
図6は、本発明の第2の実施形態によるデータ比較装置2の機能構成を示すブロック図である。図示するように、データ比較装置2は、共通部分検索部3と、一致箇所検索部24と、順序付処理部31と、順序情報記憶部32と、差分情報出力部5と、制御部6と、データファイル10Aと10Bと20Aと20Bと、ハッシュデータ生成部15とを含んで構成される。
この第2の実施形態は、より一層処理を高速化することを目的としている。以下では、第1の実施形態と同様の部分については説明を省略し、本実施形態特有の構成や処理手順等を中心に説明する。
本実施形態において、処理をさらに高速化する手段は、次の通りである。即ち、本実施形態では、2つのデータ列のうちの片方のデータ列(ここでは説明の都合上、データ列Aとする)の一致箇所検索対象ワードをその値の順(昇順または降順)でソート(順序付け)し、ソート結果として得られる順序情報を利用しながら一致箇所の検索を行なうようにする。
より具体的に言うと、順序付処理部31は、データ列Aに含まれる一致箇所検索対象ワードの値によるソートを行ない、その結果得られるデータ列Aに関する一致箇所検索対象ワードの順序情報を順序情報記憶部32に書き込む機能を有する。
また、順序情報記憶部32は、データ列Aに含まれる一致箇所検索対象ワードの値に関する順序情報を保持する。これは具体的には、例えば、B−Tree(バランス木)構造によりデータ列Aに対するインデックス情報を保持する。これにより、データ列A自体の順序を変更せずにその順序情報を保持できるため、データ列Aの一致箇所検索対象ワードと一致するワードがあるかどうかを高速に判定できるようになる。
一致箇所検索部24は、順序情報記憶部32から前記の順序情報を読み出すことによりデータ列Aに含まれる一致箇所検索対象ワードの値の順序を得られるため、これを用いて、データ列Bに含まれるある一致箇所検索対象ワードを、データ列Aに含まれる一致箇所検索対象ワードのうちの比較する必要のあるワードのみと比較し、両者が一致する箇所を探す機能を有する。つまり、本実施形態の一致箇所検索部24は、データ列AとBの一致箇所検索対象ワードを総当り的に比較する必要がなく、データ列Bに含まれるある一致箇所検索対象ワードについて、例えば二分木的にデータ列Aに含まれる一致箇所検索対象ワードとの比較を行なっていけば良い。
データ列Aを1度だけソートするために、最大で(N/n)log(N/n)回のワードの比較を行うことが必要である。また、一旦ソートされた後は、データ列Bの1つあたりの一致箇所検索対象ワードにつき、およそlog(N/n)回の比較により、データ列Aの一致箇所検索対象ワードとの一致を検出できるか、あるいはデータ列Aのいずれの一致箇所検索対象ワードとも一致しないことを確認できる。つまり、データ列Bには(N/n)個の一致箇所検索対象ワードがあるため、比較回数の合計は(N/n)log(N/n)である。従ってこれら両者を合わせると、本実施形態の場合には、データ列Aとデータ列Bとが全く異なるデータ列である場合にも、最大で((N/n)+(N/n))×log(N/n)回の比較処理を行えば良い。第1の実施形態の場合と異なり、本実施形態の場合、見つけるべき共通部分の長さの最小値が一定値であっても、最大比較回数はnとnの値に依存する。相加・相乗平均の定理により、計算上は、N/nとN/nの値が同じぐらいの値になるnとnを選択すれば、最大比較回数を最小とすることができる。
図7は、本実施形態のデータ比較装置2によるデータ比較処理の手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
まずステップS81の初期化処理は、第1の実施形態で説明したステップS61の処理と同様である。但し、比較回数の上限Cを基準にnとnの値を設定する場合の値の決め方は、次の通りである。つまり、((N/n)+(N/n))×log(N/n)≦Cを満たし、且つ、上述した通りN/nとN/nの値が同じぐらいの値になるようにnとnの値を選択する。
具体的な一例として、nは、2×(N/n)×log(N/n)≦Cを満たす最小の正整数値とする。また、nは、nと互いに素であり、且つ、n≧N/N×nを満たす正整数とする。なお、このような条件を満たすnのうち最小の整数数を選択することにより、所定の比較回数の制約の中で、共通部分を検出できる可能性を高めることができる。
ステップS82における共通部分の範囲を検索する処理は、第1の実施形態のステップS62の処理と同様である。
ステップS83における判定処理は、第1の実施形態のステップS63の処理と同様である。
次に、ステップS84において、一致箇所検索部24は、データ列Aがソート済であるか否か(つまり、順序情報記憶部32に既にデータ列Aの順序情報が書き込まれているか否か)を判定する。ソート済である場合は(ステップS84:YES)、ソート処理をさらに行なう必要はないので、ステップS85をスキップしてステップS86へ直接進む。ソート済でない場合は(ステップS84:NO)、ソート処理を行なうためにステップS85へ進む。
ステップS85では、順序付処理部31が、上で決定されたパラメータnに基づき、データ列Aの一致箇所検索対象ワードを、その値の昇順に(降順でも良い)ソートする(順序付けする)処理を行なう。ソート処理自体は既存技術による手順で行なう。そして、順序付け処理部31は、その結果得られた順序情報(例えば、B−Tree構造で表現された、データ列Aの一致箇所検索対象ワードへのインデックス情報(このインデックス値としては、例えば、データ列Aにおけるワード位置を用いる))を順序情報記憶部32に書き込む。
なお、このソート処理は、この部分で実行する代わりに、例えばステップS81の初期化処理で行なっておくようにしても良い。
いずれの部分でソート処理を行なうにしても、ステップS82からS87までのループ部分の処理を2回目以降には、再度ソート処理を行なう必要はなく、順序情報記憶部32から順序情報を読み出して利用すれば良い。
ステップS86では、一致箇所検索部24が、データ列AおよびBの一致箇所検索対象ワードの比較を行い、一致箇所を探す。このとき、本実施形態では、一致箇所検索部24は、順序情報記憶部32から順序情報を読み出して利用しながら、データ列Bのひとつの一致箇所検索対象ワードに対して、log(N/n)回程度の比較処理を行なう。つまり、B−Tree構造の根ノードから順次、値の大小比較をしながら枝を選択していき、データ列Aの一致箇所検索対象ワードの中で値の一致するものを探す。
つまり、一致箇所検索部24は、その時点でのデータ列Bの比較用ポインタ以降のデータ列からnワードごとに比較対象ワードを選択し、すべての比較対象ワードについて、ソートされたデータ列Aの比較対象ワードとの比較を行い、一致するワードがあるかどうかを判定する。
一致するワードが見つかるまで検索処理を行なう点などは、第1の実施形態のステップS64と同様である。
ステップS87における判定処理は、第1の実施形態のステップS65の処理と同様である。
そして、ステップS88における差分情報の出力処理は、第1の実施形態のステップS66の処理と同様である。
[第3の実施の形態]
図8は、本発明の第3の実施形態によるデータ比較装置1Aの機能構成を示すブロック図である。第1の実施形態では、データ比較装置1は、データファイル10Aおよび10Bと、ハッシュデータ生成部15を含んでいた。本実施形態によるデータ比較装置1Aはこれらを有さず、図8に示すように、共通部分検索部3と、一致箇所検索部4と、差分情報出力部5と、制御部6と、データファイル20Aと20Bとで構成される。データファイル20Aおよび20Bが所定の長さのワードからなるデータ列である点は第1の実施形態と同様である。データファイル20Aおよび20Bは、外部から与えられるデータ列を有するファイルである。共通部分検索部3と、一致箇所検索部4と、差分情報出力部5と、制御部6の動作等は、第1の実施形態と同様である。
[第4の実施の形態]
図9は、本発明の第4の実施形態によるデータ比較装置2Aの機能構成を示すブロック図である。第2の実施形態では、データ比較装置2は、データファイル10Aおよび10Bと、ハッシュデータ生成部15を含んでいた。本実施形態によるデータ比較装置2Aはこれらを有さず、図9に示すように、共通部分検索部3と、一致箇所検索部24と、順序付処理部31と、順序情報記憶部32と、差分情報出力部5と、制御部6と、データファイル20Aと20Bとで構成される。データファイル20Aおよび20Bが所定の長さのワードからなるデータ列である点は第2の実施形態と同様である。データファイル20Aおよび20Bは、外部から与えられるデータ列を有するファイルである。共通部分検索部3と、一致箇所検索部24と、順序付処理部31と、順序情報記憶部32と、差分情報出力部5と、制御部6の動作等は、第2の実施形態と同様である。
<<応用例>>
ここでは、上記各実施形態の応用例について、代表として第1実施形態の構成を示す図1を参照しながら、説明する。
本応用例において、データファイル10Aおよび10Bは、それぞれ数ギガバイトから数十ギガバイト程度のサイズを有する動画コンテンツファイルである。データファイル10Aおよび10Bは、ファイルシステムによってブロック単位で管理されており、1ブロックのサイズは、例えば、4kバイト(4096バイト)である。つまり、データファイル10Aおよび10Bは、それぞれ、数百万個から数千万個程度のブロックから成る。
データファイル10Aや10Bは、ブロック単位で編集される。つまり、データファイル10Aや10Bに対する編集操作としては、ブロックの挿入と、ブロックの削除と、ブロック内に閉じた値の変更である。本発明の発明者らが別途開発したファイルシステムは、ブロックサイズの整数倍のサイズを有するデータを挿入したり削除したりするためのアプリケーションプログラムインタフェース(API)を提供する。なお、そのようなファイルシステムを用いる場合に、例えばアプリケーションプログラム側で工夫をすることによって、ブロック境界ではない途中の位置に挿入したり削除したりする際にも、挿入/削除に伴うデータのズレがブロック境界をまたがって波及することのないようすることができる。なお、そのファイルシステム自体の詳細な説明は、ここでは省略する。
データファイル20Aは、データファイル10Aのハッシュ値を保持するファイルである。ハッシュデータ生成部15は、データファイル10Aが有する各ブロックのデータ(長さ4kバイト)の値を基に、所定のハッシュ関数を適用することにより、所定の長さ(例えば16バイト(=128ビット))のハッシュ値を得る。そのハッシュ値が、データファイル20Aの各ワードに相当する。
データファイル20Bと10Bの関係も、上述したデータファイル20Aと10Aの関係と同様である。
つまり、データファイル20Aおよび20Bのサイズは、これに限定されないが典型的には数百万ワードから数千万ワードである。つまり、1ワード=16バイトのとき、データファイル20Aおよび20Bのサイズは、それぞれ数十メガバイトから数百メガバイト程度である。このような大きなサイズのファイル同士を、従来の技術により比較して共通部分を見つけることは、非常に時間がかかり、効率が悪い。
ところで、ハッシュ関数の性質により、元データが全く一致していない限り、そのハッシュ値が偶々一致する確率は非常に小さい。例えば、ハッシュ値の長さが128ビットであり、ハッシュ関数が十分良好である場合、元データの異なる2つのハッシュ値が偶然一致する確率は2−128である。つまり、データファイル20Aおよび20Bがそれぞれ数百万ワードから数千万ワードのサイズを有するとはいえ、元データ(データファイル10Aおよび10Bに含まれるブロックのデータ)が異なっている限り、そのハッシュ値が偶然に一致する可能性は無視できるほどに、その確率は充分小さい。逆に言えば、ハッシュ値が一致するとき、元データも一致する可能性は充分大きい。
本応用例の目的は、データファイル20Aと20Bとの間の差分情報を短時間で得ることであるが、その更なる目的は、データファイル10Aと10Bとの間で、どのあたりのブロックに差があるのかを短時間の比較処理で把握することである。上述したファイルシステムによって管理されている動画コンテンツファイルを編集し、その結果として複数の版の動画コンテンツファイルを保存した際に、それら複数の版の間の違いを把握するのは大変で時間のかかる作業であるが、本応用例を用いることにより、共通部分検出の精度をやや犠牲にする代わりに、短時間で(あるいは望みの範囲の時間内に)、版間の差分を把握することができるという大きなメリットが得られる。
なお、データファイル10Aおよび10Bを元に、データファイル20Aおよび20Bをそれぞれ生成する処理は、ファイル保存時に予め行なっておく。
なお、上述した実施形態におけるデータ比較装置の機能の全部または一部をコンピュータで実現するようにしても良い。その場合、上記実施形態で説明した各機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現しても良い。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、フラッシュメモリ、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時刻の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時刻プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
例えば、第2実施形態の順序情報記憶部32は、B−Tree構造のデータを用いて順序情報を記憶するようにしたが、用いるデータ構造はB−Treeに限らず、一般の木構造を用いても良い。また、各ワードのデータの値とデータ列Aへのインデックス(データ列Aの何ワード目のワードかを示す値)の組を要素とし、各ワードの値によってソートされた配列をデータ構造として用いても良い。いずれの場合にも、順序情報を利用することにより、総当り的な比較に比べて比較回数を削減することができる。
本発明は、サイズの大きいデータファイルの管理に利用することができる。例えば、動画像コンテンツのファイルの版管理などに利用することができる。
本発明の第1の実施形態によるデータ比較装置の機能構成を示したブロック図である。 同実施形態おいて、データファイル10A(元データ)とデータファイル20A(ハッシュ値のデータ)との関係を示す概略図である。 同実施形態によるデータ比較装置における、一致箇所検索および共通部分検索の処理の概要を示す概略図である。 同実施形態による共通部分範囲の決定および差分情報出力のための処理の手順を示すフローチャートである。 同実施形態によるデータ比較の実例を説明するための概略図である。 本発明の第2の実施形態によるデータ比較装置の機能構成を示したブロック図である。 同実施形態によるデータ比較の処理手順を示したフローチャートである。 本発明の第3の実施形態によるデータ比較装置の機能構成を示したブロック図である。 本発明の第4の実施形態によるデータ比較装置の機能構成を示したブロック図である。
符号の説明
1,1A,2,2A データ比較装置
3 共通部分検索部(共通部分検索過程)
4 一致箇所検索部(一致箇所検索過程)
5 差分情報出力部(差分情報出力過程)
6 制御部
10A,10B データファイル(比較対象データ)
15 ハッシュデータ生成部
20A,20B データファイル
24 一致箇所検索部
31 順序付処理部(順序付処理過程)
32 順序情報記憶部

Claims (5)

  1. それぞれ複数のワードからなる第1データ列および第2データ列を比較するデータ比較装置であって、
    前記第1データ列に含まれる前記ワードを所定の第1選択間隔(第1選択間隔は1以上の整数)の分ずつ飛ばして得られる第1一致箇所検索対象ワードと、前記第2データ列に含まれる前記ワードを所定の第2選択間隔(第2選択間隔は1以上の整数)の分ずつ飛ばして得られる第2一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す一致箇所検索部と、
    前記一致箇所検索部が検出した一致箇所のワードを基に前記第1データ列および前記第2データ列のそれぞれ前および後に連なるワードについて、前記第1データ列と前記第2データ列との間で比較を行ない、両者が一致する範囲を共通部分の範囲として検出する共通部分検索部と、
    前記共通部分検索部によって検出された共通部分の範囲の情報に基づき、前記第1データ列と前記第2データ列との間の差分情報を出力する差分情報出力部と、
    を具備することを特徴とするデータ比較装置。
  2. 請求項1に記載のデータ比較装置において、
    前記第1選択間隔と前記第2選択間隔との最大公約数は1である、
    ことを特徴とするデータ比較装置。
  3. 請求項1または請求項2に記載のデータ比較装置において、
    前記第1一致箇所検索対象ワードの値をソートし、その結果得られる順序情報を順序情報記憶部に書き込む順序付処理部をさらに具備し、
    前記一致箇所検索部は、前記順序情報記憶部から前記順序情報を読み出すことにより、ある前記第2一致箇所検索対象ワードを、比較する必要のある前記第1一致箇所検索対象ワードのみと比較し、両者が一致する箇所を探す、
    ことを特徴とするデータ比較装置。
  4. 請求項1から3までのいずれか一項に記載のデータ比較装置において、
    前記第1データ列および前記第2データ列に含まれる前記ワードは、これら各データ列の元となる比較対象データを所定サイズに分割したブロックのデータにハッシュ関数を適用して得られたハッシュ値を有するものである、
    ことを特徴とするデータ比較装置。
  5. それぞれ複数のワードからなる第1データ列および第2データ列を比較する処理をコンピュータに実行させるプログラムであって、
    前記第1データ列に含まれる前記ワードを所定の第1選択間隔(第1選択間隔は1以上の整数)の分ずつ飛ばして得られる第1一致箇所検索対象ワードと、前記第2データ列に含まれる前記ワードを所定の第2選択間隔(第2選択間隔は1以上の整数)の分ずつ飛ばして得られる第2一致箇所検索対象ワードとを、順次比較して両者が一致する箇所を探す一致箇所検索過程と、
    前記一致箇所検索過程で検出した一致箇所のワードを基に前記第1データ列および前記第2データ列のそれぞれ前および後に連なるワードについて、前記第1データ列と前記第2データ列との間で比較を行ない、両者が一致する範囲を共通部分の範囲として検出する共通部分検索過程と、
    前記共通部分検索過程において検出された共通部分の範囲の情報に基づき、前記第1データ列と前記第2データ列との間の差分情報を出力する差分情報出力過程と、
    の処理をコンピュータに実行させることを特徴とするプログラム。
JP2008117808A 2008-04-28 2008-04-28 データ比較装置およびプログラム Expired - Fee Related JP5149063B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008117808A JP5149063B2 (ja) 2008-04-28 2008-04-28 データ比較装置およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008117808A JP5149063B2 (ja) 2008-04-28 2008-04-28 データ比較装置およびプログラム

Publications (2)

Publication Number Publication Date
JP2009266128A JP2009266128A (ja) 2009-11-12
JP5149063B2 true JP5149063B2 (ja) 2013-02-20

Family

ID=41391856

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008117808A Expired - Fee Related JP5149063B2 (ja) 2008-04-28 2008-04-28 データ比較装置およびプログラム

Country Status (1)

Country Link
JP (1) JP5149063B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5340185B2 (ja) * 2010-01-19 2013-11-13 日本放送協会 ファイル処理装置及びプログラム
JP2018018240A (ja) * 2016-07-27 2018-02-01 富士ゼロックス株式会社 データ処理装置およびプログラム

Also Published As

Publication number Publication date
JP2009266128A (ja) 2009-11-12

Similar Documents

Publication Publication Date Title
US8838551B2 (en) Multi-level database compression
JP5372853B2 (ja) デジタルシーケンス特徴量算出方法及びデジタルシーケンス特徴量算出装置
US9798731B2 (en) Delta compression of probabilistically clustered chunks of data
CN108089893B (zh) 冗余资源的确定方法、装置、终端设备与存储介质
KR100877063B1 (ko) 데이터를 관리하는 장치 및 방법
CN106547572B (zh) 一种程序文件对比方法及装置
JP5886447B2 (ja) ロケーション非依存のファイル
WO2015139381A1 (zh) 一种终端软件升级方法及装置
EP3072076B1 (en) A method of generating a reference index data structure and method for finding a position of a data pattern in a reference data structure
CN111078672B (zh) 数据库的数据对比方法及装置
JP2009512099A (ja) トライでの再始動可能なハッシュの方法及び装置
US20150261447A1 (en) Controlling segment size distribution in hash-based deduplication
CN111444192A (zh) 块链式账本中全局状态的哈希的生成方法、装置及设备
KR20140038441A (ko) 압축 매치 열거 기법
JP5149063B2 (ja) データ比較装置およびプログラム
CN112346771B (zh) 升级文件生成方法及装置
CN116150093B (zh) 一种对象存储列举对象的实现方法及电子设备
CN109918346A (zh) 一种文件的创建方法及装置
US8423590B2 (en) File generation for testing single-instance storage algorithm
CN110941730B (zh) 基于人脸特征数据偏移的检索方法与装置
JP4467965B2 (ja) 差分ファイル作成プログラム及び方法
JP4754007B2 (ja) 情報処理装置、情報処理方法、プログラムおよび記録媒体
US10037148B2 (en) Facilitating reverse reading of sequentially stored, variable-length data
JP6273892B2 (ja) データ検索装置、プログラム、及びデータ検索システム
CN112416431B (zh) 一种基于编码序列表示的源代码片段成对比较方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101201

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121025

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: 20121030

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121129

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20151207

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees