JP5566888B2 - データ依存チャンキングを使用する最適化されたデータストリーム圧縮 - Google Patents

データ依存チャンキングを使用する最適化されたデータストリーム圧縮 Download PDF

Info

Publication number
JP5566888B2
JP5566888B2 JP2010525041A JP2010525041A JP5566888B2 JP 5566888 B2 JP5566888 B2 JP 5566888B2 JP 2010525041 A JP2010525041 A JP 2010525041A JP 2010525041 A JP2010525041 A JP 2010525041A JP 5566888 B2 JP5566888 B2 JP 5566888B2
Authority
JP
Japan
Prior art keywords
data
signature
chunks
data stream
chunk
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
JP2010525041A
Other languages
English (en)
Other versions
JP2010539606A (ja
JP2010539606A5 (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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2010539606A publication Critical patent/JP2010539606A/ja
Publication of JP2010539606A5 publication Critical patent/JP2010539606A5/ja
Application granted granted Critical
Publication of JP5566888B2 publication Critical patent/JP5566888B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method

Description

本発明は、データ依存チャンキングを使用する最適化されたデータストリーム圧縮に関する。
一般的に、相互接続されたコンピューティングベースシステムは、大量のデータをシステム間で転送する。コンピューティングデバイス側でデータをまとめて伝達(送信および受信)するか、またはデータを管理可能な複数の部分に分割することで、効率のよい実現可能な転送を行えるようにできる。サーバーなどの一方のコンピューティングデバイスからデータを他方のデバイス(例えば、クライアントデバイス)に供給するために、データをストリームとして送信することができる。データのストリーミングでは機能性が向上し、ユーザーはデータを素早く受信することができる。ストリーミングが行われないと、クライアント側にデータ全体がレンダリングされるまでにクライアントデバイスに遅延が生じるおそれがある。
デバイス(例えば、サーバー)は、データを圧縮形式で送信することができる。圧縮を行うと、ネットワーク上で1つまたは複数のデバイスの間のデータのストリーミングが効率よく行われる。例えば、サーバーデバイスおよび1つまたは複数のクライアントデバイスを含むネットワークにおいて、その帯域幅が限られていることがある。帯域幅によって、一定時間の間にサーバーからクライアントデバイスに伝達されるデータの量が制限されうる。ストリーミングデータを圧縮することにより、どの時点においても低帯域幅ネットワーク上でより多くのデータを転送することができ、したがって、ストリーム化データの実用性が向上する。
本件特許出願人が開発したリモートデスクトッププロトコル(RDP)などのプロトコルでは、データ圧縮を実装するためにさまざまな技術を使用することができる。これらの技術は、要求条件に応じて非可逆圧縮または可逆圧縮の技術とすることができる。これらの技術では、ストリーミングデータによって帯域幅使用を低減する。
本概要は、ストリーミングリアルタイム圧縮を実装するための概念を紹介するために提供するものである。これらの概念は、さらに、以下の詳細な説明で説明される。提示される概要は、特許請求の範囲に記載されている主題事項の本質的特徴を明示することを意図しておらず、また特許請求の範囲に記載されている主題事項の範囲を決定する際に使用されることも意図していない。
一実施形態では、データストリームのバイトコードシーケンスに対する圧縮は、このバイトコードシーケンスを複数のデータチャンクに分割することにより実行される。ユニークなシグネチャが、これらのデータチャンクに関連付けられる。データチャンクのシグネチャは、すでに格納されているシグネチャと比較される。一致したデータチャンクに対しスキャンをさらに実行し、チャンクサイズよりも長くなる可能性のある一致長を判定することができる。
詳細な説明は、付属の図面を参照しつつ説明される。図中、参照番号の一番左の数字で、その参照番号が最初に出現する図面を識別する。類似の特徴およびコンポーネントを参照するため図面全体を通して同じ番号が使用される。
リアルタイム圧縮を実装するための例示的なアーキテクチャを示すブロック図である。 リアルタイム圧縮を実装する例示的なコンピューティングシステムを示すブロック図である。 ストリーミングリアルタイム圧縮を実装するための例示的な方法の流れ図である。 ストリーミングリアルタイム圧縮を実装するための例示的な方法の流れ図である。 ストリーミングリアルタイム圧縮を実装するための例示的な方法の流れ図である。 例示的な一般コンピュータ環境を示すブロック図である。
ストリーミングリアルタイム圧縮を実装するためのシステムおよび方法について説明する。すでに示されているように、1つまたは複数のコンピューティングベースデバイスの間のデータ通信は、通信デバイス間の接続媒体を介してデータをストリーミングすることによって実現できる。例えば、クライアントは、サーバーデバイスにデータへのアクセスを要求することができる。データは、ネットワーク上でストリーム化データの形式を用いてユーザーに送信できる。ストリーム化データは、データの送信前に圧縮することができる。
例えば、リモートデスクトッププロトコル(RDP)などのプロトコルを実装する場合、ネットワーク上で送信されるデータのサイズは、バルク圧縮技術を用いて最小にできる。データは、パケットとして送信できる。圧縮されたデータパケットは、目的の送信先に送信できる。この圧縮されたデータパケットは、送信先において展開され、圧縮されたパケット内のデータが復元されうる。データ圧縮が実行されない場合、データは非圧縮形式で送信先に送信され、データ圧縮は、その後のデータパケットについて実行されうる。
この目的のために、システムは、送信されるデータパケットを圧縮するための1つまたは複数のモジュールを備えることができる。これらのモジュールは、入力データストリーム、例えば、バイトコードシーケンスを1つまたは複数のデータ「チャンク」に分割することができる。一実装では、データチャンクのサイズは、調節可能である。特に、チャンクの平均サイズは調節可能であるが、チャンク長は固定でなく、平均サイズは、ストリームそれ自体の中に含まれるデータの特性に基づいてチャンクの開始位置またはチャンク終了位置をデータストリーム中のどこに置くかを判定するチャンキングアルゴリズムによって判定される。データチャンクは、一方のデータチャンクと他のデータチャンクとを区別するシグネチャなどの識別子に関連付けることができる。したがって、異なるデータチャンクは、異なるシグネチャを通じて識別可能になるであろう。シグネチャに関連付けられているデータチャンクは、代わりに「シグネチャ付きデータチャンク」とも称され、これをリポジトリまたは履歴バッファと比較することができる。履歴バッファは、各シグネチャにそれぞれ関連付けられているすでに送信されたデータチャンクの集合体を含む。この比較結果に基づき、類似のデータチャンクに対応する参照を含み、データチャンクのバイトコードそれ自体を含まないように、入力データを変更することができる。したがって、入力データストリームの一部は、対応する一致が履歴バッファ内に置かれていなかった一連のバイトコードとともに、履歴バッファから得られたデータチャンクとの比較に基づく1つまたは複数の参照を有するストリームとして送信されうる。履歴バッファのサイズが大きければ大きいほど、結果として検索能力が向上しうる。
それに加えて、履歴バッファおよび各メモリオーバーヘッドは、調節可能である。履歴バッファのサイズ制限とメモリオーバーヘッドの面から、以前の技術には制約があり、またバイト毎に検査を実行する必要があるため検索速度が遅かった。例えば、履歴バッファを占有するそれぞれのバイトは、メモリオーバーヘッドとして4バイトをさらに必要とする。本発明の場合には、履歴バッファのサイズおよびメモリオーバーヘッドは、調節可能であり、例えば、600KBの履歴バッファに対しメモリオーバーヘッドを2MBとすることができる。
一実装では、説明されているような圧縮技術は、さらに、他の二次圧縮モジュールに付加することができる。二次圧縮モジュールは、各データチャンクのシグネチャと履歴バッファ内に格納されているデータチャンクとの間のより正確な一致を集めるように構成されている。より高い品質の圧縮アルゴリズム(つまり、二次圧縮パスまたはモジュール)でデータ全体を処理できるとしても、このようなシグネチャベースのチャンキング圧縮機能を、より品質の高いLempel−Ziv法または類似の圧縮アルゴリズム用のプリプロセッサとして使用することができる。これは、RDPなどのリアルタイム性が重視されるアプリケーションに利用することができる。Lempel−Ziv法は、方法の一例にすぎないことは理解されるであろう。Burrows−Wheeler法などの他のアルゴリズムも使用可能であり、このようなアルゴリズムは、そうでない説明されているチャンクベースの方法とは反対に、その符号化方式に基づき最大の圧縮を実現する高品質アルゴリズムである。さまざまなトピックフレーズ抽出を実装することに関係する説明されているシステムおよび方法は、多くの異なるコンピューティングシステム、環境、および/または構成で実装することができるが、システム分析および管理の実施形態は、以下のシステムアーキテクチャ(複数可)に関して説明されている。
(リアルタイム圧縮のための例示的なアーキテクチャ)
図1は、ストリーミングリアルタイム圧縮を実装する例示的なコンピュータシステム100を例示している。コンピュータシステム100は、サーバーコンピューティングデバイス102、ネットワーク104、および1つまたは複数のコンピューティングベースもしくはクライアントデバイス106(1)〜(N)を備える。サーバーコンピューティングデバイス102およびクライアントデバイス106(1)〜(N)には、パーソナルコンピュータ(PC)、ウェブサーバー、電子メールサーバー、家庭用娯楽機器、ゲーム機、セットトップボックス、および当技術分野で周知の他の任意のコンピューティングベースデバイスが含まれる。クライアントデバイス106(1)〜(N)は、クライアントデバイス106と総称することができる。
さらに、コンピュータシステム100は、任意の数のクライアントデバイス106を備えることができる。例えば、コンピュータシステム100は、数千台のオフィス用PC、各種のサーバー、および複数の国々の至るところに分散する他のコンピューティングベースデバイスを含む、企業ネットワークとすることができる。あるいは、他の可能な実装では、システム100は、1つの家族の所有物である限られた台数のPCを使用する家庭用ネットワークを備えることができる。クライアントデバイス106は、LAN、WAN、または当技術分野で周知の他のネットワーキング技術を含む、有線および/または無線ネットワークを通じてさまざまな組み合わせにより互いに結合されうる。
サーバーコンピューティングデバイス102は、リモートアプリケーション用のターミナルサービスを提供することができる。サーバーコンピューティングデバイス102は、このデバイス上で実行可能な1つまたは複数のアプリケーションのホストになることができる。実行後、サーバーコンピューティングデバイス102は、関連する出力を、ネットワーク104を介して複数のクライアントデバイス106のうちの1つまたは複数に送信することができる。コンピュータ100の例としては、RDPに基づくシステムがあるが、これに限定されない。サーバーコンピューティングデバイス102は、サーバー102と称することもできる。
サーバーコンピューティングデバイス102は、メモリ108を備える。メモリ108は、さらに、圧縮モジュール110およびシグネチャモジュール112を備える。圧縮モジュール110は、サーバーコンピューティングデバイス102から複数のクライアントデバイス106のうちのいずれか1つに送信されるデータを圧縮する。生成されるデータは、サーバーコンピューティングデバイス102上に存在する1つまたは複数のアプリケーションの実行結果である。サーバーコンピューティングデバイス102上のアプリケーションは、複数のクライアントデバイス106のうちの1つまたは複数のクライアントデバイスとやり取りした後、またはコマンドを受け取った後に、実行されうる。
圧縮モジュール110は、送信されるデータを1つまたは複数のデータチャンクに分割することによって圧縮を実装することができる。一般的に、データは一連のバイトとして表すことができる。したがって、データチャンクのそれぞれは、バイトコードシーケンスの1つまたは複数の部分に対応する。一実装では、圧縮モジュール108は、入力データストリーム内に含まれるデータに基づいて分割を実行する。
説明のため、ローカルコンテンツに依存するチャンキングは、ローカル情報のみに基づきデータストリームを複数のチャンクに分割する方法を指すものとすることができる。言い換えると、所与のデータストリーム内のチャンク境界の位置は、境界位置の左および右にある一定数のバイトの値にのみ依存しうる。
ローカル(つまり、データ依存の)チャンキング方法の重要性は、第1バイトの内容についてのみ異なるデータストリームが、第1チャンクを除き、等しいチャンクを有することが保証される点である。これは、チャンキングが、データストリーム内の位置の不整合に対し弾力的に対応できると言い換えることができる。
チャンクおよびそのシグネチャを使用することの重要性は、1バイト毎に行われる探索(つまり、ハッシュテーブル探索)回数が比較的少ないという点である。チャンクは、複数のバイトで構成されるので、1チャンク毎に1回探索が行われ、平均すると、1バイト当たりハッシュテーブル探索回数が1未満となる。あるいは、チャンクサイズを固定して(例えば、16)、スライディングウィンドウ(例えば、16バイト)に対するコンピュータのシグネチャとすることができ、バイト毎にハッシュテーブル探索が行われる。これにより、一致する16バイトチャンクのすべてのペアを見つけ出すことが可能になるが、バイト毎に1回のテーブル探索が必要になる場合があり、高い計算オーバーヘッドの影響を受けやすい。データ依存チャンキングに基づく圧縮には、このような計算オーバーヘッドはない。
以下に、データ依存チャンキングに対する実装例を示す。水平軸h=16およびウィンドウサイズw=16は固定である。w(16)バイトのすべてのシーケンスは、128ビット数(16*8=128)として取り扱われる。Bをバイトのバッファ/ストリームとする。B[I:J]は、Iから始まり、Jで終わるBからのバイトのシーケンスを表す。位置B[I+h−1]は、シーケンスB[I+h−w:I+h−1]が、数値として解釈されたときに、左および右の2h個のすべての数B[I−w:I−1]...,B[I+2h−w:I+2h−1]より大きい場合に、チャンク境界である。これらの定義に基づいてチャンク境界を判定するための効率的なアルゴリズムを実装できる。
データを複数のデータチャンクに分割した後、シグネチャモジュール112は、データチャンクをシグネチャなどのインデックスに関連付ける。シグネチャモジュール112は、データストリームの属性に基づいてシグネチャを可変サイズのデータチャンクに関連付ける。したがって、異なるシグネチャを有するデータチャンクは、互いに区別される。類似のシグネチャは、中に類似のバイトデータを含むデータチャンクを示しうる。シグネチャ付きデータチャンクは、データ構造体として外部リポジトリ内に格納できる。データ構造体には、履歴バッファ内に格納されている1つまたは複数のデータチャンクへのポインタが含まれる。送信されるデータストリームは、対応するバイトコードに関連付けられている1つまたは複数のインデックスととともに間欠的に並ぶ一連のバイトコードとして表すことができる。
データバイトを1つまたは複数のデータチャンクに分割し、データストリームを圧縮するさまざまな態様が、図2を参照しつつさらに詳しく説明される。
例示的なサーバーデバイス
図2は、サーバーコンピューティングデバイス102の関連する例示的なコンポーネントを示している。サーバー102と称されるサーバーコンピューティングデバイス102は、1つまたは複数のプロセッサ202、ネットワークインターフェース204、I/Oインターフェース206、およびメモリ108を備えることができる。プロセッサ(複数可)202には、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタルシグナルプロセッサ、中央処理装置、状態機械、論理回路、および/または演算命令に基づいて信号を操作する任意のデバイスが含まれる。いくつかある機能の中で特に、プロセッサ(複数可)202は、メモリ108内に格納されているコンピュータ可読命令をフェッチし、実行するように構成されている。
ネットワークインターフェース204により、サーバー102は、ネットワーク104上で、他のコンピューティングベースデバイス(例えば、クライアントデバイス106)と通信することができる。ネットワークインターフェース204は、多数のコンピューティングデバイスを互いに接続するか、またはサーバーコンピューティングデバイスに接続するための1つまたは複数のポートを備えることができる。ネットワークインターフェース204により、有線ネットワーク(例えば、LAN、ケーブルなど)および無線ネットワーク(例えば、WLAN、携帯電話ネットワーク、衛星ネットワークなど)を含む、さまざまなネットワーク内で、さまざまな種類のプロトコルを使用して容易に通信することができる。
I/Oインターフェース206は、サーバー102用の入出力機能を備える。I/Oインターフェース206は、キーボード、マウスなどの多数の入力デバイス、およびモニタ、スピーカーなどの多数の出力デバイスを接続するための1つまたは複数のポートを備えることができる。一実装では、サーバー102は、I/Oインターフェース206を通じて接続されたキーボードまたはマウスを介して、アプリケーションコンポーネント記述などの入力データをユーザーから受け取る。
メモリ108には、例えば、揮発性メモリ(例えば、RAM)および/または不揮発性メモリ(例えば、フラッシュ)を含む、当技術分野で周知のコンピュータ可読媒体が含まれる。図2に例示されているように、メモリ108には、さらに、プログラム(複数可)208およびデータ210も含めることができる。プログラム(複数可)208には、例えば、圧縮モジュール110、シグネチャモジュール112、二次圧縮モジュール222、および他のアプリケーション(複数可)212が含まれる。他のアプリケーション(複数可)212は、アプリケーション更新などのコンピューティングベースデバイス上でアプリケーションを補完するプログラムを含む。データ210には、例えば、シグネチャデータベース214、履歴バッファ216、データチャンク218、および他のデータ220が含まれる。
圧縮モジュール110は、サーバー102から1つまたは複数のクライアントデバイス106に情報を送信するための入力データストリームの圧縮機能を実装したものである。データの送信は、RDPに基づいてアプリケーションを実装するためのものとすることができる。本明細書で説明されている実施例のいくつかは、RDPを実装するアプリケーションに基づいているが、このような技術は、他の環境にも適用可能である。この目的のために、圧縮モジュール110は、データストリームを1つまたは複数のデータチャンクに分割する。データチャンクは、可変バイト長または固定バイト長とすることができる。
例えば、サーバー102は、バイトコードシーケンス
45974563945146
を入力データストリームの一部として受け取り、一方の送信元から指定された送信先へ送信する。上記のバイトコードは、可変長とすることができる。一実装では、送信されるデータストリームは、履歴バッファ216内に格納されうる。データは、履歴バッファ216に加えられる。データが履歴バッファ216に加えられると、データは、圧縮モジュール110に送信することができる。圧縮モジュール110は、データストリームを1つまたは複数のデータチャンク218に分割する。上記の実施例に戻ると、このバイトコードシーケンスは、チャンクAと称される4597456およびチャンクBと称される3945146の2つの部分に分割できる。チャンクAおよびBは、データチャンク218内に格納することができ、この実施例では、等しい数のバイトコードを有するように例示されている。入力データストリームは、請求項に記載されている主題事項の範囲から逸脱することなく可変個数のバイトコードを含みうる任意の数のデータチャンクに分割されうる。さまざまなデータチャンク218内のバイトコードは、入力データストリーム内に含まれるバイトコードに対応する。一実装では、データチャンク218内のバイトコードの平均長は、16バイトとすることができる。
データストリームを分割する方法は、当技術分野で周知の技術を使用して実装できる。一実装では、圧縮モジュール110によって実行される分割によって、データストリームはすでに出現しているバイトコードシーケンス内に存在するすでに出現しているバイトコードパターンに基づいて分割される。一般に、圧縮は、冗長性の多い観察結果に基づく。分割は、実際に冗長性に結び付けられておらず、むしろ、類似のデータパターンに基づき同じ切断点を選択する際に「安定性」のあるアルゴリズムに結び付けられている。冗長データを送信することにより、オーバーヘッドが生じ、これによりシステム性能に影響が出る場合がある。分割を行っている間に、分割が実行されるデータストリーム上の点は、切断点と称され、データストリーム自体の内容に基づきうる。他の実装では、圧縮モジュール110は、類似のバイトコードが異なるバイトコードパターンによって囲まれている場合であっても、類似のバイトコードに対する類似のデータチャンクを生成する。一実装では、圧縮モジュール110は、さまざまな周知のチャンカー機能のうちの1つに基づいてデータストリームを分割する。この実施例で説明されているような圧縮は、すでに知られているようにバイトコード毎に実行されるのとは反対にデータチャンク毎に実行される。
圧縮モジュール110によるバイトコードシーケンスの分割から得られるデータチャンク218、つまりチャンクAおよびBは、シグネチャに関連付けられる。一実装では、シグネチャモジュール112は、データチャンク218にシグネチャを関連付ける。シグネチャモジュール112は、データチャンク218内に含まれるバイトコードに基づいてシグネチャを評価する。一実装では、シグネチャモジュール112は、データチャンク218に対しハッシュアルゴリズムを使用することによりシグネチャを評価する。シグネチャ付きデータチャンクは、シグネチャデータベース214に格納されうる。一実装では、シグネチャデータベース214は、データチャンク218のオフセットとともにシグネチャ付きデータチャンクを保持するメモリ内に置かれたハッシュテーブルである。シグネチャ付きデータチャンクは、シグネチャデータベース214内に格納され、これもまた、サーバー102によってすでに圧縮され、送信されているデータチャンクに対応しうる。
シグネチャ付きチャンクAおよびBは、格納されているシグネチャ付きデータチャンクと比較される。上述のように、格納されているシグネチャデータチャンクは、すでに送信されている可能性のあるデータに対応する。シグネチャモジュール112は、チャンクAおよびBのシグネチャを以前の送信に対応する格納されているデータチャンクのシグネチャと比較するように構成されうる。すでに送信されているデータチャンクに関連付けられているシグネチャは、さらに、ハッシュアルゴリズムを使用するモジュールなど、周知の技術を通じて評価できる。
シグネチャモジュール112によって実行される比較によって、チャンクAおよびBと以前の送信のデータチャンクとの間の類似度が判定される。例えば、1つまたは複数のデータチャンクは、各シグネチャが同様である場合に以前のデータチャンクと一致していると考えることができる。全く同じというわけではないが類似しているデータチャンクは、類似データチャンクと考えることができ、入力データストリームの1つまたは複数のバイトコードの間の類似度が大きいことを示すことができ、1つまたは複数のデータチャンク内の単に類似しているバイトコードではない。
シグネチャモジュール112は、チャンクAおよびBなどの入力データストリームのバイトコードに対応するチャンクのシグネチャに類似するシグネチャを有するデータチャンク218をリストする。シグネチャモジュール112で、注目しているデータチャンク(例えば、チャンクAまたはB)と類似しているシグネチャを有するデータチャンク218が見つからない場合、その対応するバイトコードが、変更なしで送信される、つまり、リテラルとして出力バッファに送信される。一実装では、リストアップされたデータチャンクは、データチャンク218内に格納されうる。
チャンクAまたはBに類似しているシグネチャを有するデータチャンク218のそれぞれについて、チャンクAまたはBのうちの1つと、それらに関連付けられている類似のシグネチャを有すると判明しているデータチャンク218との間の類似度を確認するために、一致する候補がスキャンされる。例えば、圧縮モジュール110は、一致する候補をスキャンして、データチャンク218の間の類似度を確認することができる。シグネチャの類似は、バイトコードパターン内の類似により生じることに留意されたい。例えば、データチャンクAのシグネチャは、バイトコードシーケンスのいくつかの部分が同じである場合に他のデータチャンクと類似している可能性がある。したがって、スキャン中、圧縮モジュール110は、一致する候補のバイトコードシーケンスの順方向および逆方向スキャンを実行して、より大きなパターンが複数のデータチャンク218のうちの1つのデータチャンクなどのデータチャンク内に存在するかどうかを判定する。データチャンクの結果として得られる部分は、入力ストリームに対応するデータチャンク218内のバイトコードシーケンスに一致している、一致長と称されるより大きなバイトコードシーケンスである。一致長は、他のデータ220に格納されうる。
上述の方法で、異なる一致長の集合体は、複数のチャンクに対し上述の技術を実行することによって得られる。一実装では、一致長集合体を得るためのチャンク探索回数は、閾値によって制限できる。例えば、圧縮モジュール110は、一致する候補の集合をスキャンして、閾値に等しい多数の一致長を有する一致長集合体を得ることができる。RDPベースのアプリケーションでは、データストリームは、一致するデータチャンクがかなり大きな一致セグメントの一部をなす確率が非常に高くなるようなデータストリームであることに留意されたい。したがって、一致するチャンクのみを調べることで、チャンク自体より大きな一致を含むバイトシーケンスを見つけることが可能になる。
一致長集合体内の一致長は、一致の最良の組み合わせを選択するように最適化されている。最適化が必要になるのは、一致長の一部が他の一致長と重なり合う部分を有する場合があるためである。一実装では、一致長集合体は、当技術分野で周知の「欲張り」アルゴリズムを使用して最適化できる。例えば、他の一致長内に完全に含まれる一致長は、除外される。当技術分野で周知の他のメカニズムも、一致長集合体の最適化に使用できる。
最良一致長が得られると、圧縮モジュール110は、一致長コピーオフセットタプル、およびバイトコードシーケンスを含むリストとして出力を生成する。バイトコードシーケンスは、類似のシグネチャを有する一致する候補が見つからなかったシーケンスである。一致長は、さらに、入力データストリーム中の置き換えられるバイトの位置および数を示す属性を含む。一実装では、圧縮モジュール110による出力は、その後のバイトコードシーケンスに対しバイトコードアライメントを維持するために、任意ビットのパッキングなしで生成される。圧縮モジュール110によって生成された出力は、二次圧縮モジュール222に渡される。二次圧縮モジュール222は、圧縮モジュール110が見落とした可能性のある、より近い、より短い長さの一致を判定するために使用されうる。二次圧縮モジュールの例としては、MPPC圧縮器、RDPバルク圧縮器、および同様のものなどの本件特許出願人によって開発された圧縮器があるが、これに限定されない。
例示的な方法
ストリーミングリアルタイム圧縮を実装するための例示的な方法について、図1および2を参照しつつ説明する。これらの例示的な方法は、コンピュータ実行可能命令の一般的なコンテクストに即して説明できる。一般に、コンピュータ実行可能命令は、特定の機能を実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造体、プロシージャ、モジュール、関数などを含むことができる。これらの方法は、通信ネットワークを通じてリンクされているリモート処理デバイスにより機能が実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境において、コンピュータ実行可能命令を、メモリ記憶装置を含むローカルおよびリモートのコンピュータ記憶媒体に配置することができる。
図3(A)、3(B)、および3(C)は、コンピューティングデバイス、例えば、クライアントデバイス106のうちの1つまたは複数のデバイス上に常駐する1つまたは複数のプログラムモジュールまたはエージェントによって実装されるストリーミングリアルタイム圧縮を示す例示的な流れ図300を示している。
これらの方法が説明される順序は、制限として解釈されることを意図されておらず、また説明されている任意の数の方法ブロックを組み合わせて、これらの方法、または代替の方法を実装することができる。それに加えて、本明細書で説明されている主題事項の精神および範囲から逸脱することなく、これらの方法から個別のブロックを削除することもできる。さらに、これらの方法は、好適なハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせで実装することができる。
ブロック302において、入力データストリームを、バイトコードシーケンスとして受け取ることができる。例えば、圧縮モジュール110は、サーバー102などの送信元から複数のクライアントデバイス106のうちの1つまたは複数のデバイスなどの送信先に送信することを目的とする入力データストリームの一部として、バイトコードシーケンスを受け取ることができる。一般的に、ストリーミングデータは、一連のデータパケットとして送信されうる。データパケットはそれぞれ、バイトコードシーケンスの形でデータを含む。一実装では、バイトコードシーケンスは、履歴バッファ216に加えられる。バイトコードシーケンスは、さらに、スライディングウィンドウメカニズムを使用して履歴バッファ216内に収めることができる。
ブロック304において、バイトコードシーケンスを1つまたは複数のデータチャンクに分割することができる。例えば、圧縮モジュール110は、バイトコードシーケンスをチャンクAおよびチャンクBなどの2つのデータチャンクに分割することができる。さまざまなデータチャンク218内のバイトコードは、入力データストリーム内に含まれるバイトコードに対応する。一実装では、データチャンク218内のバイトコードの平均長は、16バイトとすることができる。データストリームを分割する方法は、当技術分野で周知の技術を使用して実装できる。一実装では、圧縮モジュール110によって実行される分割によって、データはすでに出現しているデータストリーム内に存在するすでに出現しているバイトコードパターンに基づいて分割される。データチャンク(チャンクAおよびB)は、データチャンク218として格納することができる。
ブロック306において、シグネチャをデータチャンクに関連付けることができる。例えば、シグネチャモジュール112は、シグネチャをデータチャンクAおよびBに関連付けることができる。シグネチャモジュール112は、データチャンク218内に含まれるバイトコードに基づいてシグネチャを評価する。シグネチャモジュール112は、データチャンク218に対しハッシュアルゴリズムを使用することによりシグネチャを評価する。シグネチャ付きデータチャンクは、シグネチャデータベース214に格納されうる。
ブロック308において、入力データストリームに対応するデータチャンクのシグネチャを、すでに伝達されている可能性のあるデータチャンクの格納されているシグネチャと比較する。一実装では、シグネチャモジュール112は、チャンクAおよびBのシグネチャを以前の送信からの格納されているデータチャンクのシグネチャと比較する。この比較により、チャンクAおよびBと以前の送信のデータチャンクとの間の類似度が判定される。一致の確率が高いチャンクが判定されうる。全く同じというわけではないが類似しているデータチャンクは、類似データチャンクと考えることができ、入力データストリームの1つまたは複数のバイトコードの間の類似度が大きいことを示すことができ、1つまたは複数のデータチャンク内の単に類似しているバイトコードではない。シグネチャモジュール112により、チャンクAまたはBなどの注目しているデータチャンクと類似しているシグネチャを有するデータチャンク218が見つからない場合、その対応するバイトコードが、変更なしでエミットされる、つまり、リテラルとして出力バッファにエミットされる。
ブロック310において、一致長と称されるバイトコードシーケンスが判定される。入力データストリームのデータチャンクのシグネチャとすでに送信されているデータのデータチャンクのシグネチャとの一致は、入力データストリーム中のコードシーケンスに類似しているコードを有する可能性のあるより大きなバイトコードセグメントを示すことに留意されたい。一実装では、圧縮モジュール110は、一致する候補のバイトコードシーケンスの順方向および逆方向スキャンを実行して、より大きなパターンが複数のデータチャンク218のうちの1つのデータチャンクなどのデータチャンク内に存在するかどうかを判定する。データチャンクの結果として得られる部分は、入力ストリームに対応するデータチャンク218内のバイトコードシーケンスに一致している一致長と称される、より大きなバイトコードシーケンスである。一致長は、他のデータ220に格納されうる。
それに加えて、一致長集合体内の一致長は、一致の最良の組み合わせを選択し、他の一致長と重なり合う一致長の部分を回避するように最適化される。一実装では、一致長集合体は、当技術分野で周知の欲張りアルゴリズムを使用して最適化できる。
ブロック312において、圧縮モジュールの出力が生成される。例えば、圧縮モジュール110は、一致長コピーオフセットタプル、およびバイトコードシーケンスを含むリストを含む出力を生成する。一致長は、さらに、入力データストリーム中の置き換えられるバイトの位置および数を示す属性を含む。出力内のバイトコードシーケンスは、シグネチャデータベース214から判定できる一致がないデータチャンク218に対応する。
ブロック314において、生成された出力は、さらに圧縮するため二次圧縮モジュールに渡される。例えば、圧縮モジュール110は、生成された出力を二次圧縮モジュール222に渡す。二次圧縮モジュール222は、分割およびシグネチャ割当てのプロセス実行中に圧縮モジュール110が見落とした可能性のある、より近い、より短い長さの一致を判定するために使用される。二次圧縮モジュールの例としては、MPPC圧縮器、RDPバルク圧縮器、および同様のものなどのMicrosoft(登録商標)Corporation社によって開発された圧縮器があるが、これに限定されない。
例示的なコンピューティング環境
図4は、本明細書で説明されている技術を実装するために使用されうる、また本明細書で説明されている要素の全部または一部を示しうる、例示的な一般コンピュータ環境400を示している。コンピュータ環境400は、コンピューティング環境の一実施例にすぎず、コンピュータおよびネットワークアーキテクチャの使用または機能の範囲に関する制限を示唆することを意図していない。コンピュータ環境400は、例示的なコンピュータ環境400に示されている1つのコンポーネントまたはその組み合わせに関係する何らかの依存関係または要求条件がその環境にあるものと解釈すべきでない。
コンピュータ環境400は、コンピュータ402の形態の汎用コンピューティングベースのデバイスを含む。コンピュータ402は、例えば、デスクトップコンピュータ、ハンドヘルドコンピュータ、ノートブックコンピュータ、ラップトップコンピュータ、サーバーコンピュータ、ゲーム機などとすることができる。コンピュータ402のコンポーネントには、1つまたは複数のプロセッサまたは処理装置404、システムメモリ406、およびプロセッサ404を含むさまざまなシステムコンポーネントをシステムメモリ406に結合するシステムバス408が含まれるが、これに限定されない。
システムバス408は、メモリバスまたはメモリコントローラ、周辺機器バス、アクセラレイティッドグラフィックスポート、およびさまざまなバスアーキテクチャのうちのいずれかを使用するプロセッサまたはローカルバスを含む数種類のバス構造のうちの1つまたは複数を表している。例えば、このようなアーキテクチャとしては、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、およびザニンバスとしても知られるPCI(Peripheral Component Interconnect)がある。
コンピュータ402は、一般的に、さまざまなコンピュータ可読媒体を備える。このような媒体は、コンピュータ402によってアクセス可能な任意の使用可能な媒体とすることでき、揮発性および不揮発性媒体、取り外し可能および取り外し不可能媒体を含む。
システムメモリ406は、ランダムアクセスメモリ(RAM)410などの揮発性メモリ、および/または読み取り専用メモリ(ROM)412などの不揮発性メモリの形態のコンピュータ可読媒体を含む。起動時などにコンピュータ402内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム(BIOS)414は、例示されているようなROM 412に格納される。RAM 410は、一般的に、処理装置404に直接アクセス可能な、および/または処理装置404によって現在操作されているデータおよび/またはプログラムモジュールを格納する。
コンピュータ402は、さらに、他の取り外し可能/取り外し不可能な揮発性/不揮発性コンピュータ記憶媒体も備えることができる。例えば、図4は、取り外し不可能な不揮発性の磁気媒体(図に示されていない)に対する読み書きを行うためのハードディスクドライブ416を例示している。さらに、図4は、取り外し可能な不揮発性磁気ディスク420(例えば、「フロッピー(登録商標)ディスク」)に対する読み書きを行うための磁気ディスクドライブ418を例示しており、それに加えて、図4は、CD−ROM、DVD−ROM、または他の光媒体などの取り外し可能な不揮発性光ディスク424に対する読み書きを行うための光ディスクドライブ422を例示している。ハードディスクドライブ416、磁気ディスクドライブ418、および光ディスクドライブ422は、それぞれ、1つまたは複数のデータメディアインターフェース426によりシステムバス408に接続される。あるいは、ハードディスクドライブ416、磁気ディスクドライブ418、および光ディスクドライブ422は、1つまたは複数のインターフェース(図に示されていない)によってシステムバス408に接続することができる。
ディスクドライブおよび関連コンピュータ可読媒体は、コンピュータ402用のコンピュータ可読命令、データ構造体、プログラムモジュール、およびその他のデータを格納する不揮発性記憶装置を実現する。実施例は、ハードディスク416、取り外し可能磁気ディスク420、および取り外し可能光ディスク424を例示しているが、磁気カセットまたはその他の磁気記憶装置、フラッシュメモリカード、CD−ROM、デジタル多目的ディスク(DVD)または他の光記憶装置、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)などの、コンピュータによりアクセス可能なデータを格納することができる他のタイプのコンピュータ可読媒体も、このコンピューティングシステムおよび環境例を実装するために使用することができることは理解されるであろう。
例えば、オペレーティングシステム426、1つまたは複数のアプリケーションプログラム428、他のプログラムモジュール430、およびプログラムデータ432を含む、多くのプログラムモジュールは、ハードディスク416、磁気ディスク420、光ディスク424、ROM 412、および/またはRAM 410に格納されることができる。このようなオペレーティングシステム426、1つまたは複数のアプリケーションプログラム428、他のプログラムモジュール430、およびプログラムデータ432(またはそれらの何らかの組み合わせ)はそれぞれ、分散ファイルシステムをサポートする常駐コンポーネントの全部または一部を実装する。
ユーザーはキーボード434およびポインティングデバイス436(例えば、「マウス」)などの入力デバイスを介して、コンピュータ402にコマンドおよび情報を入力することができる。他の入力デバイス438(図に特には示されていない)としては、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、シリアルポート、スキャナなどがある。これらの入力デバイスおよびその他の入力デバイスは、システムバス408に結合されている入力/出力インターフェース440を介して処理装置804に接続され、またパラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの他のインターフェースおよびバス構造により接続されることも可能である。
モニタ442またはその他のタイプのディスプレイデバイスも、ビデオアダプタ444などのインターフェースを介してシステムバス408に接続できる。モニタ442に加えて、他の出力周辺デバイスは、スピーカー(図に示されていない)およびプリンタ446などのコンポーネントを含み、入力/出力インターフェース440を介してコンピュータ402に接続できる。
コンピュータ402は、(複数の)リモートコンピューティングベースデバイス448などの1つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク接続環境で動作させることができる。例えば、リモートコンピューティングベースデバイス448は、パーソナルコンピュータ、ポータブルコンピュータ、サーバー、ルーター、ネットワークコンピュータ、ピアデバイスまたは他の共通ネットワークノード、および同様のものとすることができる。リモートコンピューティングベースデバイス448は、コンピュータ402に関して本明細書で説明されている要素および特徴の多くまたは全部を含むことができるポータブルコンピュータとして例示されている。
コンピュータ402とリモートコンピュータ448との間の論理接続は、ローカルエリアネットワーク(LAN)450と一般的なワイドエリアネットワーク(WAN)452として表されている。このようなネットワーキング環境は、オフィス、企業全体にわたるコンピュータネットワーク、イントラネット、およびインターネットでは一般的である。
LANネットワーキング環境で実装された場合、コンピュータ402はネットワークインターフェースまたはアダプタ454を介して、ローカルネットワーク450に接続される。WANネットワーキング環境で実装される場合、コンピュータ402は、一般的に、広域ネットワーク452上での通信を確立するためのモデム456または他の手段を含む。モデム456は、コンピュータ402に内蔵されても、外付けでもよく、入力/出力インターフェース440または他の適切なメカニズムを介してシステムバス408に接続することができる。例示されているネットワーク接続は例示的であり、コンピュータ402と448との間の(複数の)通信リンクを確立する他の手段を採用できることは理解されるであろう。
コンピューティング環境400とともに例示されているようなネットワーク接続環境では、コンピュータ402またはその一部に関して示されているプログラムモジュールは、リモートメモリ記憶装置に格納されうる。例えば、リモートアプリケーションプログラム458は、リモートコンピュータ448のメモリデバイスに常駐する。説明のため、アプリケーションプログラムおよびオペレーティングシステムなどの他の実行可能なプログラムコンポーネントは、本明細書では、離散ブロックとして例示されているが、そのようなプログラムおよびコンポーネントは、さまざまな時点において、コンピューティングベースデバイス402の異なる記憶コンポーネント内にあり、コンピュータの(複数の)データプロセッサにより実行されることは理解される。
さまざまなモジュールおよび技術は、本明細書では、1つまたは複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテクストに即して説明することができる。一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、さまざまな実施形態で望まれているように組み合わせるか、または分散させることができる。
これらのモジュールおよび技術の実装は、ある種のコンピュータ可読媒体上に格納されるか、またはある種のコンピュータ可読媒体を介して送信されうる。コンピュータ可読媒体は、コンピュータによってアクセスできる利用可能な媒体とすることができる。例えばコンピュータ可読媒体の例としては、「コンピュータ記憶媒体」および「通信媒体」が含まれるが、これに限定されない。
「コンピュータ記憶媒体」は、コンピュータ可読命令、データ構造体、プログラムモジュール、またはその他のデータなどの情報を格納する方法または技術で実装される揮発性および不揮発性、取り外し可能および取り外し不可能媒体を含む。コンピュータ記憶媒体としては、RAM、ROM、EEPROM、フラッシュメモリまたはその他のメモリ技術、CD−ROM、デジタル多目的ディスク(DVD)またはその他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置またはその他の磁気記憶装置、または所望の情報を格納するために使用することができ、しかもコンピュータによりアクセスできるその他の媒体があるが、これに限定されない。
あるいは、フレームワークの一部をハードウェア、またはハードウェア、ソフトウェア、および/またはファームウェアの組み合わせで実装することもできる。例えば、1つまたは複数の特定用途向け集積回路(ASIC)またはプログラマブルロジックデバイス(PLD)は、フレームワークの1つまたは複数の部分を実装するように設計またはプログラムすることができる。
結論
ストリーミングリアルタイム圧縮を実装するための実施形態は、構造的特徴および/または方法に特有の言語で説明されているが、付属の請求項の主題事項は、説明されている特定の特徴または方法に必ずしも限定されないことは理解されるであろう。むしろ、特定の特徴および方法は、ストリーミングリアルタイム圧縮を実現するための例示的実装として開示されている。

Claims (13)

  1. データストリームを圧縮するための方法であって、前記データストリームは、バイトコードシーケンスとして構成され、
    前記データストリームを1つまたは複数のデータチャンクに分割するステップであって、前記分割は、前記データストリームに応じたものであって、平均チャンクサイズは選択可能であり、前記分割は、前記データストリーム内の所与の点の前後にあるデータのウィンドウを見て、前記所与の点において前記データストリームのデータをチャンクにする必要があるかどうかを判定することによって、前記データストリームに対し実行され、前記データストリーム内に存在するすでに出現しているバイトコードパターンに基づいて分割される、ステップと、
    シグネチャを前記1つまたは複数のデータチャンクのそれぞれに関連付けるステップと、
    前記1つまたは複数のデータチャンクの各シグネチャを、格納されているシグネチャと比較して、前記格納されているシグネチャの中から、前記1つまたは複数のデータチャンクの各シグネチャに対応するデータチャンクと類似のバイトデータを含むデータチャンクを示す類似のシグネチャを判定するステップと、
    前記類似のシグネチャを有する1つまたは複数の格納されているデータチャンクを、一致するデータチャンクとしてリストするステップと、
    前記一致するデータチャンクのバイトコードシーケンスの順方向および逆方向のスキャンを実行して一致長を判定するステップであって、前記一致長は、前記一致するデータチャンクのより大きなバイトコードシーケンスである、ステップと、
    前記データストリームを変更して出力を生成するステップであって、前記出力は、一致長・コピーオフセットタプルと、前記データストリームの前記1つまたは複数のデータチャンクのうち前記格納されているシグネチャとの一致がないデータチャンクのバイトコードシーケンスとを含む、ステップと、
    前記出力をさらなる圧縮のために渡すステップであって、前記さらなる圧縮により、前記分割するステップおよび前記順方向および逆方向のスキャンを実行して、一致長を判定するステップから見落とされたより短い一致長を判定する、ステップと
    含むことを特徴とする方法。
  2. 前記関連付けるステップは、前記1つまたは複数のデータチャンクに対しハッシュアルゴリズムを使用することを特徴とする請求項1に記載の方法。
  3. 前記1つまたは複数の格納されているデータチャンクは、前記データストリームに先立って伝達されていることを特徴とする請求項1に記載の方法。
  4. 前記比較により類似のシグネチャがないと判定し、前記データストリームがリテラルとして伝達されることを特徴とする請求項1に記載の方法。
  5. 前記順方向および逆方向のスキャンは、前記判定される一致長の数が一致長の閾値と等しくなるまで、前記一致するデータチャンクに対し実行されることを特徴とする請求項1に記載の方法。
  6. さらに、他の一致長と重なり合う一致長の部分を回避するように一致長集合体を最適化するステップを含むことを特徴とする請求項1に記載の方法。
  7. 前記最適化は、欲張りアルゴリズムを含むことを特徴とする請求項6に記載の方法。
  8. 前記さらなる圧縮は、Lempel−Ziv法に基づくことを特徴とする請求項1に記載の方法。
  9. メモリと、
    前記メモリに動作可能なように結合されている1つまたは複数のプロセッサと、
    前記メモリ内の、コンピューティングデバイスから伝達されたデータストリームの圧縮を実装する圧縮モジュールであって、すでに出現しているバイトコードシーケンス内に存在するすでに出現しているバイトコードパターンに少なくとも基づいて、前記データストリームのデータを1つまたは複数のデータチャンクに分割する圧縮モジュールと、
    前記メモリ内の、シグネチャと前記1つまたは複数のデータチャンクのそれぞれを関連付けるシグネチャモジュールであって、前記1つまたは複数のデータチャンクの各シグネチャを、格納されているシグネチャと比較して、前記格納されているシグネチャの中から、前記1つまたは複数のデータチャンクの各シグネチャに対応するデータチャンクと類似のバイトデータを含むデータチャンクを示す類似のシグネチャを判定し、前記類似のシグネチャを有する1つまたは複数の格納されているデータチャンクを一致するデータチャンクとしてリストすることに少なくとも部分的に基づいて一致長を判定する、シグネチャモジュールと、
    前記圧縮モジュールが見落とした、前記1つまたは複数のデータチャンクのより短い一致長をさらに圧縮する二次圧縮モジュールと
    を備え、
    前記圧縮モジュールは、前記データストリーム内の所与の点の前後にあるデータのウィンドウを見て、前記所与の点において前記データストリームのデータをチャンクにする必要があるかどうかを判定することによって、前記分割を前記データストリームに対して実行し、前記データストリーム内に存在するすでに出現しているバイトコードパターンに基づいて分割するように構成され、
    前記圧縮モジュールは、前記データストリームを変更して出力を生成するように構成され、前記出力は、一致長・コピーオフセットタプルと、前記データストリームの前記1つまたは複数のデータチャンクのうち前記格納されているシグネチャとの一致がないデータチャンクのバイトコードシーケンスとを含むことを特徴とするコンピューティングデバイス。
  10. 前記圧縮モジュールは、前記一致するデータチャンクのバイトコードシーケンスの順方向および逆方向のスキャンを実行して、前記一致するデータチャンクのより大きなバイトコードシーケンスである一致長を判定するようさらに構成されることを特徴とする請求項9に記載のコンピューティングデバイス。
  11. 前記シグネチャモジュールは、前記1つまたは複数のデータチャンクに対しハッシュアルゴリズムを使用して前記1つまたは複数のデータチャンクを評価することを特徴とする請求項9に記載のコンピューティングデバイス。
  12. サーバーと1つまたは複数のクライアントデバイスとの間でデータを伝達する方法であって、
    前記サーバー側にある、バイトコードシーケンスとして構成されるデータストリームを1つまたは複数のデータチャンクに分割するステップであって、前記分割は、前記データストリーム内の所与の点の前後にあるデータのウィンドウを見て、前記所与の点において前記データストリームのデータをチャンクにする必要があるかどうかを判定することによって、前記データストリームに対し実行され、前記データストリーム内に存在するすでに出現しているバイトコードパターンに基づいて分割される、ステップと、
    シグネチャを前記1つまたは複数のデータチャンクのそれぞれに関連付けるステップと、
    前記1つまたは複数のデータチャンクの各シグネチャを、格納されているシグネチャと比較して、前記格納されているシグネチャの中から、前記1つまたは複数のデータチャンクの各シグネチャに対応するデータチャンクと類似のバイトデータを含むデータチャンクを示す類似のシグネチャを判定するステップと、
    前記類似のシグネチャを有する1つまたは複数の格納されているデータチャンクを、一致するデータチャンクとしてリストするステップと、
    前記一致するデータチャンクのバイトコードシーケンスの順方向および逆方向のスキャンを実行して一致長を判定するステップであって、前記一致長は、前記一致するデータチャンクのより大きなバイトコードシーケンスである、ステップと、
    前記データストリームを変更して出力を生成するステップであって、前記出力は、前記一致長・コピーオフセットタプルと、前記データストリームの前記1つまたは複数のデータチャンクのうち前記格納されているシグネチャとの一致がないデータチャンクのバイトコードシーケンスとを含むステップと、 前記出力をさらなる圧縮のために渡すステップであって、前記さらなる圧縮により、前記分割するステップおよび前記順方向および逆方向のスキャンを実行して、一致長を判定するステップから見落とされたより短い一致長を判定する、ステップと、
    前記出力を前記1つまたは複数のクライアントデバイスに伝達するステップと
    を含むことを特徴とする方法。
  13. 前記順方向および逆方向のスキャンは、前記判定される一致長の数が一致長の閾値と等しくなるまで、前記一致するデータチャンクに対し実行されることを特徴とする請求項12に記載の方法。
JP2010525041A 2007-09-14 2008-09-12 データ依存チャンキングを使用する最適化されたデータストリーム圧縮 Expired - Fee Related JP5566888B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/855,986 US8819288B2 (en) 2007-09-14 2007-09-14 Optimized data stream compression using data-dependent chunking
US11/855,986 2007-09-14
PCT/US2008/076267 WO2009036350A2 (en) 2007-09-14 2008-09-12 Optimized data stream compression using data-dependent chunking

Publications (3)

Publication Number Publication Date
JP2010539606A JP2010539606A (ja) 2010-12-16
JP2010539606A5 JP2010539606A5 (ja) 2011-10-20
JP5566888B2 true JP5566888B2 (ja) 2014-08-06

Family

ID=40452854

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010525041A Expired - Fee Related JP5566888B2 (ja) 2007-09-14 2008-09-12 データ依存チャンキングを使用する最適化されたデータストリーム圧縮

Country Status (5)

Country Link
US (1) US8819288B2 (ja)
EP (1) EP2198522B1 (ja)
JP (1) JP5566888B2 (ja)
CN (1) CN101803203B (ja)
WO (1) WO2009036350A2 (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009054834A1 (en) 2007-10-25 2009-04-30 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8140637B2 (en) * 2007-10-25 2012-03-20 Hewlett-Packard Development Company, L.P. Communicating chunks between devices
DE112007003693B4 (de) * 2007-10-25 2014-05-15 Hewlett-Packard Development Co., L.P. Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
JP4960417B2 (ja) * 2009-09-15 2012-06-27 株式会社東芝 可変長のデータ断片の開始・終了オフセットを決定する方法及び装置
US8417039B2 (en) 2010-06-03 2013-04-09 Microsoft Corporation Motion detection techniques for improved image remoting
DK2490393T3 (da) * 2011-02-17 2013-10-07 DESOMA GmbH Fremgangsmåde og indretning til analysering af datapakker
US9344528B2 (en) 2011-08-31 2016-05-17 Microsoft Technology Licensing, Llc Data compressor using hints
US8874697B2 (en) * 2011-11-30 2014-10-28 Red Hat, Inc. Content download based on hashes
US8838826B2 (en) 2012-04-04 2014-09-16 Google Inc. Scalable robust live streaming system
US9178929B2 (en) * 2012-05-01 2015-11-03 Ericsson Ab Client-side class-of-service-based bandwidth management in over-the-top video delivery
US9628829B2 (en) 2012-06-26 2017-04-18 Google Technology Holdings LLC Identifying media on a mobile device
EP2888819B1 (en) * 2012-08-21 2020-09-16 EMC Corporation Format identification for fragmented image data
US8756237B2 (en) * 2012-10-12 2014-06-17 Architecture Technology Corporation Scalable distributed processing of RDF data
US20140149605A1 (en) * 2012-11-26 2014-05-29 Saravana Annamalaisami Systems and methods for dictionary based compression
US9582240B2 (en) * 2012-12-26 2017-02-28 Vmware, Inc. Using contextual and spatial awareness to improve remote desktop imaging fidelity
US9477682B1 (en) * 2013-03-13 2016-10-25 Emc Corporation Parallel compression of data chunks of a shared data object using a log-structured file system
CN104219102B (zh) * 2013-05-29 2018-10-30 华为技术有限公司 一种网络数据压缩统计的方法、装置和系统
US9917882B2 (en) 2014-11-30 2018-03-13 Sonicwall Inc. Transparent deferred spooling store and forward based on standard network system and client interface
US10313486B2 (en) * 2015-01-07 2019-06-04 Sonicwall Inc. Optimizing transfer of fragmented packetized data
US9385749B1 (en) * 2015-03-06 2016-07-05 Oracle International Corporation Dynamic data compression selection
US9813526B2 (en) 2015-05-26 2017-11-07 Sonicwall Inc. Reducing transmission pathway lengths within a distributed network
US10152389B2 (en) * 2015-06-19 2018-12-11 Western Digital Technologies, Inc. Apparatus and method for inline compression and deduplication
US9552384B2 (en) 2015-06-19 2017-01-24 HGST Netherlands B.V. Apparatus and method for single pass entropy detection on data transfer
US10158735B2 (en) 2015-08-07 2018-12-18 Sonicwall Inc. Read-ahead on signed connections with unsigning, inline, transparent proxies
US10268537B2 (en) 2016-05-26 2019-04-23 International Business Machines Corporation Initializing a pseudo-dynamic data compression system with predetermined history data typical of actual data
US10002081B2 (en) 2016-07-05 2018-06-19 Intel Corporation Apparatus for hardware implementation of heterogeneous decompression processing
US10324805B1 (en) * 2016-10-03 2019-06-18 EMC IP Holding Company LLC Targeted chunking of data
US10721300B2 (en) * 2017-06-02 2020-07-21 Arc Document Solutions, Llc System and method for optimizing transfer of data chunks using radio frequency (RF) handshaking
CN108494408B (zh) * 2018-03-14 2021-07-13 电子科技大学 基于哈希字典的随钻密度测井仪井下高速实时压缩方法
WO2020106626A1 (en) * 2018-11-19 2020-05-28 Fungible, Inc. History-based compression pipeline for data compression accelerator of a data processing unit
US10727865B2 (en) 2018-11-19 2020-07-28 Fungible, Inc. Data striping for matching techniques in data compression accelerator of a data processing unit
US10997123B2 (en) 2018-11-19 2021-05-04 Fungible, Inc. Matching techniques in data compression accelerator of a data processing unit
US10812630B2 (en) 2018-11-19 2020-10-20 Fungible, Inc. Merging techniques in data compression accelerator of a data processing unit
US11309908B2 (en) 2018-11-26 2022-04-19 Fungible, Inc. Static dictionary-based compression hardware pipeline for data compression accelerator of a data processing unit
US11119995B2 (en) 2019-12-18 2021-09-14 Ndata, Inc. Systems and methods for sketch computation
US10938961B1 (en) 2019-12-18 2021-03-02 Ndata, Inc. Systems and methods for data deduplication by generating similarity metrics using sketch computation
US11630729B2 (en) 2020-04-27 2023-04-18 Fungible, Inc. Reliability coding with reduced network traffic
CN113727117B (zh) * 2021-11-01 2022-02-15 武汉精测电子集团股份有限公司 基于dp的压缩数据流传输方法、装置、设备及存储介质
CN117828683B (zh) * 2024-03-06 2024-04-30 北京点聚信息技术有限公司 一种版式文件数字签名方法及系统

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5016009A (en) * 1989-01-13 1991-05-14 Stac, Inc. Data compression apparatus and method
US5049881A (en) * 1990-06-18 1991-09-17 Intersecting Concepts, Inc. Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique
US5406278A (en) * 1992-02-28 1995-04-11 Intersecting Concepts, Inc. Method and apparatus for data compression having an improved matching algorithm which utilizes a parallel hashing technique
US5371499A (en) * 1992-02-28 1994-12-06 Intersecting Concepts, Inc. Data compression using hashing
WO1996025801A1 (en) 1995-02-17 1996-08-22 Trustus Pty. Ltd. Method for partitioning a block of data into subblocks and for storing and communicating such subblocks
US6167156A (en) 1996-07-12 2000-12-26 The United States Of America As Represented By The Secretary Of The Navy Compression of hyperdata with ORASIS multisegment pattern sets (CHOMPS)
US5951623A (en) * 1996-08-06 1999-09-14 Reynar; Jeffrey C. Lempel- Ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases
US6091777A (en) * 1997-09-18 2000-07-18 Cubic Video Technologies, Inc. Continuously adaptive digital video compression system and method for a web streamer
US6320523B1 (en) * 1999-07-30 2001-11-20 Unisys Corporation Method and apparatus for reducing the time required for compressing data
US7127525B2 (en) * 2000-05-26 2006-10-24 Citrix Systems, Inc. Reducing the amount of graphical line data transmitted via a low bandwidth transport protocol mechanism
US7379940B1 (en) 2000-07-20 2008-05-27 Repliweb, Inc. Focal point compression method and apparatus
US6515598B2 (en) * 2000-12-22 2003-02-04 Cilys 53, Inc. System and method for compressing and decompressing data in real time
US7064688B2 (en) * 2001-07-09 2006-06-20 Good Technology, Inc. System and method for compressing data on a bandwidth-limited network
JP2003108464A (ja) 2001-09-27 2003-04-11 Toshiba Corp データ転送装置およびデータ転送方法
US7171444B2 (en) * 2001-11-14 2007-01-30 Sharp Laboratories Of America, Inc. Remote desktop protocol compression system
CA2411991A1 (en) * 2001-11-19 2003-05-19 Linear Systems Ltd. Transmitting digital video signals over an ip network
US20050281470A1 (en) * 2001-12-26 2005-12-22 Adams Michael A System and method for streaming media
JP3584032B2 (ja) * 2003-02-24 2004-11-04 沖電気工業株式会社 データ圧縮装置及びデータ展開装置
US7454431B2 (en) * 2003-07-17 2008-11-18 At&T Corp. Method and apparatus for window matching in delta compressors
US6903668B1 (en) * 2003-11-18 2005-06-07 M-Systems Flash Disk Pioneers Ltd. Decompression accelerator for flash memory
US7966424B2 (en) * 2004-03-15 2011-06-21 Microsoft Corporation Data compression
US7555531B2 (en) 2004-04-15 2009-06-30 Microsoft Corporation Efficient algorithm and protocol for remote differential compression
US7613787B2 (en) 2004-09-24 2009-11-03 Microsoft Corporation Efficient algorithm for finding candidate objects for remote differential compression
US7487169B2 (en) * 2004-11-24 2009-02-03 International Business Machines Corporation Method for finding the longest common subsequences between files with applications to differential compression
US8055783B2 (en) * 2005-08-22 2011-11-08 Utc Fire & Security Americas Corporation, Inc. Systems and methods for media stream processing
CN100349160C (zh) * 2005-09-08 2007-11-14 无敌科技(西安)有限公司 一种对数据进行有限穷举优化的压缩方法
US7676582B2 (en) * 2006-06-30 2010-03-09 Microsoft Corporation Optimized desktop sharing viewer join
US8090027B2 (en) * 2007-08-29 2012-01-03 Red Hat, Inc. Data compression using an arbitrary-sized dictionary

Also Published As

Publication number Publication date
EP2198522A4 (en) 2010-09-29
JP2010539606A (ja) 2010-12-16
EP2198522A2 (en) 2010-06-23
CN101803203A (zh) 2010-08-11
WO2009036350A2 (en) 2009-03-19
WO2009036350A3 (en) 2009-05-07
US8819288B2 (en) 2014-08-26
CN101803203B (zh) 2013-10-16
US20090077252A1 (en) 2009-03-19
EP2198522B1 (en) 2013-10-23

Similar Documents

Publication Publication Date Title
JP5566888B2 (ja) データ依存チャンキングを使用する最適化されたデータストリーム圧縮
KR102261811B1 (ko) 데이터 전송의 단일 패스 엔트로피 검출 장치 및 방법
US7814284B1 (en) Redundancy elimination by aggregation of multiple chunks
US7966424B2 (en) Data compression
US7849462B2 (en) Image server
KR101414970B1 (ko) 고속의 효율적 데이터 관리 및/또는 처리를 위한 방법 및 시스템
US7443321B1 (en) Compression of stream data using a hierarchically-indexed database
US7643505B1 (en) Method and system for real time compression and decompression
US9002806B1 (en) Compression of data transmitted over a network
US10817491B2 (en) Efficient and accurate lookups of data by a stream processor using a hash table
JP6370838B2 (ja) データ転送に関する単一パスエントロピー検出のための装置及び方法
US20160147557A1 (en) File Transfer Using Standard Blocks and Standard-Block Identifiers
US9853660B1 (en) Techniques for parallel data compression
US10224957B1 (en) Hash-based data matching enhanced with backward matching for data compression
US20070168377A1 (en) Method and apparatus for classifying Internet Protocol data packets
JP6770506B2 (ja) 適応率圧縮ハッシュ処理デバイス
US11831343B2 (en) System and method for data compression with encryption
CN113296709A (zh) 用于去重的方法和设备
US20170124107A1 (en) Data deduplication storage system and process
US20230283292A1 (en) System and method for data compaction and security with extended functionality
US20240154622A1 (en) System and method for extracting data from a compressed and encrypted data stream
US11811428B2 (en) System and method for data compression using genomic encryption techniques
US11967974B2 (en) System and method for data compression with protocol adaptation
US20240113729A1 (en) System and method for data compression with homomorphic encryption
US20240106457A1 (en) System and method for data compression and encryption using asymmetric codebooks

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110902

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110902

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120628

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120803

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121101

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130419

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130719

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130726

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130819

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130905

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130909

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131001

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131226

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140618

R150 Certificate of patent or registration of utility model

Ref document number: 5566888

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees