(57)【特許請求の範囲】
【請求項１】
データストリームを圧縮するための方法であって、前記データストリームは、バイトコードシーケンスとして構成され、
前記データストリームを１つまたは複数のデータチャンクに分割するステップであって、前記分割は、前記データストリームに応じたものであって、平均チャンクサイズは選択可能であり、前記分割は、前記データストリーム内の所与の点の前後にあるデータのウィンドウを見て、前記所与の点において前記データストリームのデータをチャンクにする必要があるかどうかを判定することによって、前記データストリームに対し実行され、前記データストリーム内に存在するすでに出現しているバイトコードパターンに基づいて分割される、ステップと、
シグネチャを前記１つまたは複数のデータチャンクのそれぞれに関連付けるステップと、
前記１つまたは複数のデータチャンクの各シグネチャを、格納されているシグネチャと比較して、前記格納されているシグネチャの中から、前記１つまたは複数のデータチャンクの各シグネチャに対応するデータチャンクと類似のバイトデータを含むデータチャンクを示す類似のシグネチャを判定するステップと、
前記類似のシグネチャを有する１つまたは複数の格納されているデータチャンクを、一致するデータチャンクとしてリストするステップと、
前記一致するデータチャンクのバイトコードシーケンスの順方向および逆方向のスキャンを実行して一致長を判定するステップであって、前記一致長は、前記一致するデータチャンクのより大きなバイトコードシーケンスである、ステップと、
前記データストリームを変更して出力を生成するステップであって、前記出力は、一致長・コピーオフセットタプルと、前記データストリームの前記１つまたは複数のデータチャンクのうち前記格納されているシグネチャとの一致がないデータチャンクのバイトコードシーケンスとを含む、ステップと、
前記出力をさらなる圧縮のために渡すステップであって、前記さらなる圧縮により、前記分割するステップおよび前記順方向および逆方向のスキャンを実行して、一致長を判定するステップから見落とされたより短い一致長を判定する、ステップと
含むことを特徴とする方法。
【請求項２】
前記関連付けるステップは、前記１つまたは複数のデータチャンクに対しハッシュアルゴリズムを使用することを特徴とする請求項１に記載の方法。
【請求項３】
前記１つまたは複数の格納されているデータチャンクは、前記データストリームに先立って伝達されていることを特徴とする請求項１に記載の方法。
【請求項４】
前記比較により類似のシグネチャがないと判定し、前記データストリームがリテラルとして伝達されることを特徴とする請求項１に記載の方法。
【請求項５】
前記順方向および逆方向のスキャンは、前記判定される一致長の数が一致長の閾値と等しくなるまで、前記一致するデータチャンクに対し実行されることを特徴とする請求項１に記載の方法。
【請求項６】
さらに、他の一致長と重なり合う一致長の部分を回避するように一致長集合体を最適化するステップを含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記最適化は、欲張りアルゴリズムを含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記さらなる圧縮は、Ｌｅｍｐｅｌ−Ｚｉｖ法に基づくことを特徴とする請求項１に記載の方法。
【請求項９】
メモリと、
前記メモリに動作可能なように結合されている１つまたは複数のプロセッサと、
前記メモリ内の、コンピューティングデバイスから伝達されたデータストリームの圧縮を実装する圧縮モジュールであって、すでに出現しているバイトコードシーケンス内に存在するすでに出現しているバイトコードパターンに少なくとも基づいて、前記データストリームのデータを１つまたは複数のデータチャンクに分割する圧縮モジュールと、
前記メモリ内の、シグネチャと前記１つまたは複数のデータチャンクのそれぞれを関連付けるシグネチャモジュールであって、前記１つまたは複数のデータチャンクの各シグネチャを、格納されているシグネチャと比較して、前記格納されているシグネチャの中から、前記１つまたは複数のデータチャンクの各シグネチャに対応するデータチャンクと類似のバイトデータを含むデータチャンクを示す類似のシグネチャを判定し、前記類似のシグネチャを有する１つまたは複数の格納されているデータチャンクを一致するデータチャンクとしてリストすることに少なくとも部分的に基づいて一致長を判定する、シグネチャモジュールと、
前記圧縮モジュールが見落とした、前記１つまたは複数のデータチャンクのより短い一致長をさらに圧縮する二次圧縮モジュールと
を備え、
前記圧縮モジュールは、前記データストリーム内の所与の点の前後にあるデータのウィンドウを見て、前記所与の点において前記データストリームのデータをチャンクにする必要があるかどうかを判定することによって、前記分割を前記データストリームに対して実行し、前記データストリーム内に存在するすでに出現しているバイトコードパターンに基づいて分割するように構成され、
前記圧縮モジュールは、前記データストリームを変更して出力を生成するように構成され、前記出力は、一致長・コピーオフセットタプルと、前記データストリームの前記１つまたは複数のデータチャンクのうち前記格納されているシグネチャとの一致がないデータチャンクのバイトコードシーケンスとを含むことを特徴とするコンピューティングデバイス。
【請求項１０】
前記圧縮モジュールは、前記一致するデータチャンクのバイトコードシーケンスの順方向および逆方向のスキャンを実行して、前記一致するデータチャンクのより大きなバイトコードシーケンスである一致長を判定するようさらに構成されることを特徴とする請求項９に記載のコンピューティングデバイス。
【請求項１１】
前記シグネチャモジュールは、前記１つまたは複数のデータチャンクに対しハッシュアルゴリズムを使用して前記１つまたは複数のデータチャンクを評価することを特徴とする請求項９に記載のコンピューティングデバイス。
【請求項１２】
サーバーと１つまたは複数のクライアントデバイスとの間でデータを伝達する方法であって、
前記サーバー側にある、バイトコードシーケンスとして構成されるデータストリームを１つまたは複数のデータチャンクに分割するステップであって、前記分割は、前記データストリーム内の所与の点の前後にあるデータのウィンドウを見て、前記所与の点において前記データストリームのデータをチャンクにする必要があるかどうかを判定することによって、前記データストリームに対し実行され、前記データストリーム内に存在するすでに出現しているバイトコードパターンに基づいて分割される、ステップと、
シグネチャを前記１つまたは複数のデータチャンクのそれぞれに関連付けるステップと、
前記１つまたは複数のデータチャンクの各シグネチャを、格納されているシグネチャと比較して、前記格納されているシグネチャの中から、前記１つまたは複数のデータチャンクの各シグネチャに対応するデータチャンクと類似のバイトデータを含むデータチャンクを示す類似のシグネチャを判定するステップと、
前記類似のシグネチャを有する１つまたは複数の格納されているデータチャンクを、一致するデータチャンクとしてリストするステップと、
前記一致するデータチャンクのバイトコードシーケンスの順方向および逆方向のスキャンを実行して一致長を判定するステップであって、前記一致長は、前記一致するデータチャンクのより大きなバイトコードシーケンスである、ステップと、
前記データストリームを変更して出力を生成するステップであって、前記出力は、前記一致長・コピーオフセットタプルと、前記データストリームの前記１つまたは複数のデータチャンクのうち前記格納されているシグネチャとの一致がないデータチャンクのバイトコードシーケンスとを含むステップと、  前記出力をさらなる圧縮のために渡すステップであって、前記さらなる圧縮により、前記分割するステップおよび前記順方向および逆方向のスキャンを実行して、一致長を判定するステップから見落とされたより短い一致長を判定する、ステップと、
前記出力を前記１つまたは複数のクライアントデバイスに伝達するステップと
を含むことを特徴とする方法。
【請求項１３】
前記順方向および逆方向のスキャンは、前記判定される一致長の数が一致長の閾値と等しくなるまで、前記一致するデータチャンクに対し実行されることを特徴とする請求項１２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ依存チャンキングを使用する最適化されたデータストリーム圧縮に関する。
【背景技術】
【０００２】
一般的に、相互接続されたコンピューティングベースシステムは、大量のデータをシステム間で転送する。コンピューティングデバイス側でデータをまとめて伝達（送信および受信）するか、またはデータを管理可能な複数の部分に分割することで、効率のよい実現可能な転送を行えるようにできる。サーバーなどの一方のコンピューティングデバイスからデータを他方のデバイス（例えば、クライアントデバイス）に供給するために、データをストリームとして送信することができる。データのストリーミングでは機能性が向上し、ユーザーはデータを素早く受信することができる。ストリーミングが行われないと、クライアント側にデータ全体がレンダリングされるまでにクライアントデバイスに遅延が生じるおそれがある。
【０００３】
デバイス（例えば、サーバー）は、データを圧縮形式で送信することができる。圧縮を行うと、ネットワーク上で１つまたは複数のデバイスの間のデータのストリーミングが効率よく行われる。例えば、サーバーデバイスおよび１つまたは複数のクライアントデバイスを含むネットワークにおいて、その帯域幅が限られていることがある。帯域幅によって、一定時間の間にサーバーからクライアントデバイスに伝達されるデータの量が制限されうる。ストリーミングデータを圧縮することにより、どの時点においても低帯域幅ネットワーク上でより多くのデータを転送することができ、したがって、ストリーム化データの実用性が向上する。
【０００４】
本件特許出願人が開発したリモートデスクトッププロトコル（ＲＤＰ）などのプロトコルでは、データ圧縮を実装するためにさまざまな技術を使用することができる。これらの技術は、要求条件に応じて非可逆圧縮または可逆圧縮の技術とすることができる。これらの技術では、ストリーミングデータによって帯域幅使用を低減する。
【発明の概要】
【０００５】
本概要は、ストリーミングリアルタイム圧縮を実装するための概念を紹介するために提供するものである。これらの概念は、さらに、以下の詳細な説明で説明される。提示される概要は、特許請求の範囲に記載されている主題事項の本質的特徴を明示することを意図しておらず、また特許請求の範囲に記載されている主題事項の範囲を決定する際に使用されることも意図していない。
【０００６】
一実施形態では、データストリームのバイトコードシーケンスに対する圧縮は、このバイトコードシーケンスを複数のデータチャンクに分割することにより実行される。ユニークなシグネチャが、これらのデータチャンクに関連付けられる。データチャンクのシグネチャは、すでに格納されているシグネチャと比較される。一致したデータチャンクに対しスキャンをさらに実行し、チャンクサイズよりも長くなる可能性のある一致長を判定することができる。
【図面の簡単な説明】
【０００７】
詳細な説明は、付属の図面を参照しつつ説明される。図中、参照番号の一番左の数字で、その参照番号が最初に出現する図面を識別する。類似の特徴およびコンポーネントを参照するため図面全体を通して同じ番号が使用される。
【図１】リアルタイム圧縮を実装するための例示的なアーキテクチャを示すブロック図である。
【図２】リアルタイム圧縮を実装する例示的なコンピューティングシステムを示すブロック図である。
【図３Ａ】ストリーミングリアルタイム圧縮を実装するための例示的な方法の流れ図である。
【図３Ｂ】ストリーミングリアルタイム圧縮を実装するための例示的な方法の流れ図である。
【図３Ｃ】ストリーミングリアルタイム圧縮を実装するための例示的な方法の流れ図である。
【図４】例示的な一般コンピュータ環境を示すブロック図である。
【発明を実施するための形態】
【０００８】
ストリーミングリアルタイム圧縮を実装するためのシステムおよび方法について説明する。すでに示されているように、１つまたは複数のコンピューティングベースデバイスの間のデータ通信は、通信デバイス間の接続媒体を介してデータをストリーミングすることによって実現できる。例えば、クライアントは、サーバーデバイスにデータへのアクセスを要求することができる。データは、ネットワーク上でストリーム化データの形式を用いてユーザーに送信できる。ストリーム化データは、データの送信前に圧縮することができる。
【０００９】
例えば、リモートデスクトッププロトコル（ＲＤＰ）などのプロトコルを実装する場合、ネットワーク上で送信されるデータのサイズは、バルク圧縮技術を用いて最小にできる。データは、パケットとして送信できる。圧縮されたデータパケットは、目的の送信先に送信できる。この圧縮されたデータパケットは、送信先において展開され、圧縮されたパケット内のデータが復元されうる。データ圧縮が実行されない場合、データは非圧縮形式で送信先に送信され、データ圧縮は、その後のデータパケットについて実行されうる。
【００１０】
この目的のために、システムは、送信されるデータパケットを圧縮するための１つまたは複数のモジュールを備えることができる。これらのモジュールは、入力データストリーム、例えば、バイトコードシーケンスを１つまたは複数のデータ「チャンク」に分割することができる。一実装では、データチャンクのサイズは、調節可能である。特に、チャンクの平均サイズは調節可能であるが、チャンク長は固定でなく、平均サイズは、ストリームそれ自体の中に含まれるデータの特性に基づいてチャンクの開始位置またはチャンク終了位置をデータストリーム中のどこに置くかを判定するチャンキングアルゴリズムによって判定される。データチャンクは、一方のデータチャンクと他のデータチャンクとを区別するシグネチャなどの識別子に関連付けることができる。したがって、異なるデータチャンクは、異なるシグネチャを通じて識別可能になるであろう。シグネチャに関連付けられているデータチャンクは、代わりに「シグネチャ付きデータチャンク」とも称され、これをリポジトリまたは履歴バッファと比較することができる。履歴バッファは、各シグネチャにそれぞれ関連付けられているすでに送信されたデータチャンクの集合体を含む。この比較結果に基づき、類似のデータチャンクに対応する参照を含み、データチャンクのバイトコードそれ自体を含まないように、入力データを変更することができる。したがって、入力データストリームの一部は、対応する一致が履歴バッファ内に置かれていなかった一連のバイトコードとともに、履歴バッファから得られたデータチャンクとの比較に基づく１つまたは複数の参照を有するストリームとして送信されうる。履歴バッファのサイズが大きければ大きいほど、結果として検索能力が向上しうる。
【００１１】
それに加えて、履歴バッファおよび各メモリオーバーヘッドは、調節可能である。履歴バッファのサイズ制限とメモリオーバーヘッドの面から、以前の技術には制約があり、またバイト毎に検査を実行する必要があるため検索速度が遅かった。例えば、履歴バッファを占有するそれぞれのバイトは、メモリオーバーヘッドとして４バイトをさらに必要とする。本発明の場合には、履歴バッファのサイズおよびメモリオーバーヘッドは、調節可能であり、例えば、６００ＫＢの履歴バッファに対しメモリオーバーヘッドを２ＭＢとすることができる。
【００１２】
一実装では、説明されているような圧縮技術は、さらに、他の二次圧縮モジュールに付加することができる。二次圧縮モジュールは、各データチャンクのシグネチャと履歴バッファ内に格納されているデータチャンクとの間のより正確な一致を集めるように構成されている。より高い品質の圧縮アルゴリズム（つまり、二次圧縮パスまたはモジュール）でデータ全体を処理できるとしても、このようなシグネチャベースのチャンキング圧縮機能を、より品質の高いＬｅｍｐｅｌ−Ｚｉｖ法または類似の圧縮アルゴリズム用のプリプロセッサとして使用することができる。これは、ＲＤＰなどのリアルタイム性が重視されるアプリケーションに利用することができる。Ｌｅｍｐｅｌ−Ｚｉｖ法は、方法の一例にすぎないことは理解されるであろう。Ｂｕｒｒｏｗｓ−Ｗｈｅｅｌｅｒ法などの他のアルゴリズムも使用可能であり、このようなアルゴリズムは、そうでない説明されているチャンクベースの方法とは反対に、その符号化方式に基づき最大の圧縮を実現する高品質アルゴリズムである。さまざまなトピックフレーズ抽出を実装することに関係する説明されているシステムおよび方法は、多くの異なるコンピューティングシステム、環境、および／または構成で実装することができるが、システム分析および管理の実施形態は、以下のシステムアーキテクチャ（複数可）に関して説明されている。
【００１３】
（リアルタイム圧縮のための例示的なアーキテクチャ）
図１は、ストリーミングリアルタイム圧縮を実装する例示的なコンピュータシステム１００を例示している。コンピュータシステム１００は、サーバーコンピューティングデバイス１０２、ネットワーク１０４、および１つまたは複数のコンピューティングベースもしくはクライアントデバイス１０６（１）〜（Ｎ）を備える。サーバーコンピューティングデバイス１０２およびクライアントデバイス１０６（１）〜（Ｎ）には、パーソナルコンピュータ（ＰＣ）、ウェブサーバー、電子メールサーバー、家庭用娯楽機器、ゲーム機、セットトップボックス、および当技術分野で周知の他の任意のコンピューティングベースデバイスが含まれる。クライアントデバイス１０６（１）〜（Ｎ）は、クライアントデバイス１０６と総称することができる。
【００１４】
さらに、コンピュータシステム１００は、任意の数のクライアントデバイス１０６を備えることができる。例えば、コンピュータシステム１００は、数千台のオフィス用ＰＣ、各種のサーバー、および複数の国々の至るところに分散する他のコンピューティングベースデバイスを含む、企業ネットワークとすることができる。あるいは、他の可能な実装では、システム１００は、１つの家族の所有物である限られた台数のＰＣを使用する家庭用ネットワークを備えることができる。クライアントデバイス１０６は、ＬＡＮ、ＷＡＮ、または当技術分野で周知の他のネットワーキング技術を含む、有線および／または無線ネットワークを通じてさまざまな組み合わせにより互いに結合されうる。
【００１５】
サーバーコンピューティングデバイス１０２は、リモートアプリケーション用のターミナルサービスを提供することができる。サーバーコンピューティングデバイス１０２は、このデバイス上で実行可能な１つまたは複数のアプリケーションのホストになることができる。実行後、サーバーコンピューティングデバイス１０２は、関連する出力を、ネットワーク１０４を介して複数のクライアントデバイス１０６のうちの１つまたは複数に送信することができる。コンピュータ１００の例としては、ＲＤＰに基づくシステムがあるが、これに限定されない。サーバーコンピューティングデバイス１０２は、サーバー１０２と称することもできる。
【００１６】
サーバーコンピューティングデバイス１０２は、メモリ１０８を備える。メモリ１０８は、さらに、圧縮モジュール１１０およびシグネチャモジュール１１２を備える。圧縮モジュール１１０は、サーバーコンピューティングデバイス１０２から複数のクライアントデバイス１０６のうちのいずれか１つに送信されるデータを圧縮する。生成されるデータは、サーバーコンピューティングデバイス１０２上に存在する１つまたは複数のアプリケーションの実行結果である。サーバーコンピューティングデバイス１０２上のアプリケーションは、複数のクライアントデバイス１０６のうちの１つまたは複数のクライアントデバイスとやり取りした後、またはコマンドを受け取った後に、実行されうる。
【００１７】
圧縮モジュール１１０は、送信されるデータを１つまたは複数のデータチャンクに分割することによって圧縮を実装することができる。一般的に、データは一連のバイトとして表すことができる。したがって、データチャンクのそれぞれは、バイトコードシーケンスの１つまたは複数の部分に対応する。一実装では、圧縮モジュール１０８は、入力データストリーム内に含まれるデータに基づいて分割を実行する。
【００１８】
説明のため、ローカルコンテンツに依存するチャンキングは、ローカル情報のみに基づきデータストリームを複数のチャンクに分割する方法を指すものとすることができる。言い換えると、所与のデータストリーム内のチャンク境界の位置は、境界位置の左および右にある一定数のバイトの値にのみ依存しうる。
【００１９】
ローカル（つまり、データ依存の）チャンキング方法の重要性は、第１バイトの内容についてのみ異なるデータストリームが、第１チャンクを除き、等しいチャンクを有することが保証される点である。これは、チャンキングが、データストリーム内の位置の不整合に対し弾力的に対応できると言い換えることができる。
【００２０】
チャンクおよびそのシグネチャを使用することの重要性は、１バイト毎に行われる探索（つまり、ハッシュテーブル探索）回数が比較的少ないという点である。チャンクは、複数のバイトで構成されるので、１チャンク毎に１回探索が行われ、平均すると、１バイト当たりハッシュテーブル探索回数が１未満となる。あるいは、チャンクサイズを固定して（例えば、１６）、スライディングウィンドウ（例えば、１６バイト）に対するコンピュータのシグネチャとすることができ、バイト毎にハッシュテーブル探索が行われる。これにより、一致する１６バイトチャンクのすべてのペアを見つけ出すことが可能になるが、バイト毎に１回のテーブル探索が必要になる場合があり、高い計算オーバーヘッドの影響を受けやすい。データ依存チャンキングに基づく圧縮には、このような計算オーバーヘッドはない。
【００２１】
以下に、データ依存チャンキングに対する実装例を示す。水平軸ｈ＝１６およびウィンドウサイズｗ＝１６は固定である。ｗ（１６）バイトのすべてのシーケンスは、１２８ビット数（１６＊８＝１２８）として取り扱われる。Ｂをバイトのバッファ／ストリームとする。Ｂ［Ｉ：Ｊ］は、Ｉから始まり、Ｊで終わるＢからのバイトのシーケンスを表す。位置Ｂ［Ｉ＋ｈ−１］は、シーケンスＢ［Ｉ＋ｈ−ｗ：Ｉ＋ｈ−１］が、数値として解釈されたときに、左および右の２ｈ個のすべての数Ｂ［Ｉ−ｗ：Ｉ−１］．．．，Ｂ［Ｉ＋２ｈ−ｗ：Ｉ＋２ｈ−１］より大きい場合に、チャンク境界である。これらの定義に基づいてチャンク境界を判定するための効率的なアルゴリズムを実装できる。
【００２２】
データを複数のデータチャンクに分割した後、シグネチャモジュール１１２は、データチャンクをシグネチャなどのインデックスに関連付ける。シグネチャモジュール１１２は、データストリームの属性に基づいてシグネチャを可変サイズのデータチャンクに関連付ける。したがって、異なるシグネチャを有するデータチャンクは、互いに区別される。類似のシグネチャは、中に類似のバイトデータを含むデータチャンクを示しうる。シグネチャ付きデータチャンクは、データ構造体として外部リポジトリ内に格納できる。データ構造体には、履歴バッファ内に格納されている１つまたは複数のデータチャンクへのポインタが含まれる。送信されるデータストリームは、対応するバイトコードに関連付けられている１つまたは複数のインデックスととともに間欠的に並ぶ一連のバイトコードとして表すことができる。
【００２３】
データバイトを１つまたは複数のデータチャンクに分割し、データストリームを圧縮するさまざまな態様が、図２を参照しつつさらに詳しく説明される。
【００２４】
（例示的なサーバーデバイス）
図２は、サーバーコンピューティングデバイス１０２の関連する例示的なコンポーネントを示している。サーバー１０２と称されるサーバーコンピューティングデバイス１０２は、１つまたは複数のプロセッサ２０２、ネットワークインターフェース２０４、Ｉ／Ｏインターフェース２０６、およびメモリ１０８を備えることができる。プロセッサ（複数可）２０２には、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタルシグナルプロセッサ、中央処理装置、状態機械、論理回路、および／または演算命令に基づいて信号を操作する任意のデバイスが含まれる。いくつかある機能の中で特に、プロセッサ（複数可）２０２は、メモリ１０８内に格納されているコンピュータ可読命令をフェッチし、実行するように構成されている。
【００２５】
ネットワークインターフェース２０４により、サーバー１０２は、ネットワーク１０４上で、他のコンピューティングベースデバイス（例えば、クライアントデバイス１０６）と通信することができる。ネットワークインターフェース２０４は、多数のコンピューティングデバイスを互いに接続するか、またはサーバーコンピューティングデバイスに接続するための１つまたは複数のポートを備えることができる。ネットワークインターフェース２０４により、有線ネットワーク（例えば、ＬＡＮ、ケーブルなど）および無線ネットワーク（例えば、ＷＬＡＮ、携帯電話ネットワーク、衛星ネットワークなど）を含む、さまざまなネットワーク内で、さまざまな種類のプロトコルを使用して容易に通信することができる。
【００２６】
Ｉ／Ｏインターフェース２０６は、サーバー１０２用の入出力機能を備える。Ｉ／Ｏインターフェース２０６は、キーボード、マウスなどの多数の入力デバイス、およびモニタ、スピーカーなどの多数の出力デバイスを接続するための１つまたは複数のポートを備えることができる。一実装では、サーバー１０２は、Ｉ／Ｏインターフェース２０６を通じて接続されたキーボードまたはマウスを介して、アプリケーションコンポーネント記述などの入力データをユーザーから受け取る。
【００２７】
メモリ１０８には、例えば、揮発性メモリ（例えば、ＲＡＭ）および／または不揮発性メモリ（例えば、フラッシュ）を含む、当技術分野で周知のコンピュータ可読媒体が含まれる。図２に例示されているように、メモリ１０８には、さらに、プログラム（複数可）２０８およびデータ２１０も含めることができる。プログラム（複数可）２０８には、例えば、圧縮モジュール１１０、シグネチャモジュール１１２、二次圧縮モジュール２２２、および他のアプリケーション（複数可）２１２が含まれる。他のアプリケーション（複数可）２１２は、アプリケーション更新などのコンピューティングベースデバイス上でアプリケーションを補完するプログラムを含む。データ２１０には、例えば、シグネチャデータベース２１４、履歴バッファ２１６、データチャンク２１８、および他のデータ２２０が含まれる。
【００２８】
圧縮モジュール１１０は、サーバー１０２から１つまたは複数のクライアントデバイス１０６に情報を送信するための入力データストリームの圧縮機能を実装したものである。データの送信は、ＲＤＰに基づいてアプリケーションを実装するためのものとすることができる。本明細書で説明されている実施例のいくつかは、ＲＤＰを実装するアプリケーションに基づいているが、このような技術は、他の環境にも適用可能である。この目的のために、圧縮モジュール１１０は、データストリームを１つまたは複数のデータチャンクに分割する。データチャンクは、可変バイト長または固定バイト長とすることができる。
【００２９】
例えば、サーバー１０２は、バイトコードシーケンス
４５９７４５６３９４５１４６
を入力データストリームの一部として受け取り、一方の送信元から指定された送信先へ送信する。上記のバイトコードは、可変長とすることができる。一実装では、送信されるデータストリームは、履歴バッファ２１６内に格納されうる。データは、履歴バッファ２１６に加えられる。データが履歴バッファ２１６に加えられると、データは、圧縮モジュール１１０に送信することができる。圧縮モジュール１１０は、データストリームを１つまたは複数のデータチャンク２１８に分割する。上記の実施例に戻ると、このバイトコードシーケンスは、チャンクＡと称される４５９７４５６およびチャンクＢと称される３９４５１４６の２つの部分に分割できる。チャンクＡおよびＢは、データチャンク２１８内に格納することができ、この実施例では、等しい数のバイトコードを有するように例示されている。入力データストリームは、請求項に記載されている主題事項の範囲から逸脱することなく可変個数のバイトコードを含みうる任意の数のデータチャンクに分割されうる。さまざまなデータチャンク２１８内のバイトコードは、入力データストリーム内に含まれるバイトコードに対応する。一実装では、データチャンク２１８内のバイトコードの平均長は、１６バイトとすることができる。
【００３０】
データストリームを分割する方法は、当技術分野で周知の技術を使用して実装できる。一実装では、圧縮モジュール１１０によって実行される分割によって、データストリームはすでに出現しているバイトコードシーケンス内に存在するすでに出現しているバイトコードパターンに基づいて分割される。一般に、圧縮は、冗長性の多い観察結果に基づく。分割は、実際に冗長性に結び付けられておらず、むしろ、類似のデータパターンに基づき同じ切断点を選択する際に「安定性」のあるアルゴリズムに結び付けられている。冗長データを送信することにより、オーバーヘッドが生じ、これによりシステム性能に影響が出る場合がある。分割を行っている間に、分割が実行されるデータストリーム上の点は、切断点と称され、データストリーム自体の内容に基づきうる。他の実装では、圧縮モジュール１１０は、類似のバイトコードが異なるバイトコードパターンによって囲まれている場合であっても、類似のバイトコードに対する類似のデータチャンクを生成する。一実装では、圧縮モジュール１１０は、さまざまな周知のチャンカー機能のうちの１つに基づいてデータストリームを分割する。この実施例で説明されているような圧縮は、すでに知られているようにバイトコード毎に実行されるのとは反対にデータチャンク毎に実行される。
【００３１】
圧縮モジュール１１０によるバイトコードシーケンスの分割から得られるデータチャンク２１８、つまりチャンクＡおよびＢは、シグネチャに関連付けられる。一実装では、シグネチャモジュール１１２は、データチャンク２１８にシグネチャを関連付ける。シグネチャモジュール１１２は、データチャンク２１８内に含まれるバイトコードに基づいてシグネチャを評価する。一実装では、シグネチャモジュール１１２は、データチャンク２１８に対しハッシュアルゴリズムを使用することによりシグネチャを評価する。シグネチャ付きデータチャンクは、シグネチャデータベース２１４に格納されうる。一実装では、シグネチャデータベース２１４は、データチャンク２１８のオフセットとともにシグネチャ付きデータチャンクを保持するメモリ内に置かれたハッシュテーブルである。シグネチャ付きデータチャンクは、シグネチャデータベース２１４内に格納され、これもまた、サーバー１０２によってすでに圧縮され、送信されているデータチャンクに対応しうる。
【００３２】
シグネチャ付きチャンクＡおよびＢは、格納されているシグネチャ付きデータチャンクと比較される。上述のように、格納されているシグネチャデータチャンクは、すでに送信されている可能性のあるデータに対応する。シグネチャモジュール１１２は、チャンクＡおよびＢのシグネチャを以前の送信に対応する格納されているデータチャンクのシグネチャと比較するように構成されうる。すでに送信されているデータチャンクに関連付けられているシグネチャは、さらに、ハッシュアルゴリズムを使用するモジュールなど、周知の技術を通じて評価できる。
【００３３】
シグネチャモジュール１１２によって実行される比較によって、チャンクＡおよびＢと以前の送信のデータチャンクとの間の類似度が判定される。例えば、１つまたは複数のデータチャンクは、各シグネチャが同様である場合に以前のデータチャンクと一致していると考えることができる。全く同じというわけではないが類似しているデータチャンクは、類似データチャンクと考えることができ、入力データストリームの１つまたは複数のバイトコードの間の類似度が大きいことを示すことができ、１つまたは複数のデータチャンク内の単に類似しているバイトコードではない。
【００３４】
シグネチャモジュール１１２は、チャンクＡおよびＢなどの入力データストリームのバイトコードに対応するチャンクのシグネチャに類似するシグネチャを有するデータチャンク２１８をリストする。シグネチャモジュール１１２で、注目しているデータチャンク（例えば、チャンクＡまたはＢ）と類似しているシグネチャを有するデータチャンク２１８が見つからない場合、その対応するバイトコードが、変更なしで送信される、つまり、リテラルとして出力バッファに送信される。一実装では、リストアップされたデータチャンクは、データチャンク２１８内に格納されうる。
【００３５】
チャンクＡまたはＢに類似しているシグネチャを有するデータチャンク２１８のそれぞれについて、チャンクＡまたはＢのうちの１つと、それらに関連付けられている類似のシグネチャを有すると判明しているデータチャンク２１８との間の類似度を確認するために、一致する候補がスキャンされる。例えば、圧縮モジュール１１０は、一致する候補をスキャンして、データチャンク２１８の間の類似度を確認することができる。シグネチャの類似は、バイトコードパターン内の類似により生じることに留意されたい。例えば、データチャンクＡのシグネチャは、バイトコードシーケンスのいくつかの部分が同じである場合に他のデータチャンクと類似している可能性がある。したがって、スキャン中、圧縮モジュール１１０は、一致する候補のバイトコードシーケンスの順方向および逆方向スキャンを実行して、より大きなパターンが複数のデータチャンク２１８のうちの１つのデータチャンクなどのデータチャンク内に存在するかどうかを判定する。データチャンクの結果として得られる部分は、入力ストリームに対応するデータチャンク２１８内のバイトコードシーケンスに一致している、一致長と称されるより大きなバイトコードシーケンスである。一致長は、他のデータ２２０に格納されうる。
【００３６】
上述の方法で、異なる一致長の集合体は、複数のチャンクに対し上述の技術を実行することによって得られる。一実装では、一致長集合体を得るためのチャンク探索回数は、閾値によって制限できる。例えば、圧縮モジュール１１０は、一致する候補の集合をスキャンして、閾値に等しい多数の一致長を有する一致長集合体を得ることができる。ＲＤＰベースのアプリケーションでは、データストリームは、一致するデータチャンクがかなり大きな一致セグメントの一部をなす確率が非常に高くなるようなデータストリームであることに留意されたい。したがって、一致するチャンクのみを調べることで、チャンク自体より大きな一致を含むバイトシーケンスを見つけることが可能になる。
【００３７】
一致長集合体内の一致長は、一致の最良の組み合わせを選択するように最適化されている。最適化が必要になるのは、一致長の一部が他の一致長と重なり合う部分を有する場合があるためである。一実装では、一致長集合体は、当技術分野で周知の「欲張り」アルゴリズムを使用して最適化できる。例えば、他の一致長内に完全に含まれる一致長は、除外される。当技術分野で周知の他のメカニズムも、一致長集合体の最適化に使用できる。
【００３８】
最良一致長が得られると、圧縮モジュール１１０は、一致長・コピーオフセットタプル、およびバイトコードシーケンスを含むリストとして出力を生成する。バイトコードシーケンスは、類似のシグネチャを有する一致する候補が見つからなかったシーケンスである。一致長は、さらに、入力データストリーム中の置き換えられるバイトの位置および数を示す属性を含む。一実装では、圧縮モジュール１１０による出力は、その後のバイトコードシーケンスに対しバイトコードアライメントを維持するために、任意ビットのパッキングなしで生成される。圧縮モジュール１１０によって生成された出力は、二次圧縮モジュール２２２に渡される。二次圧縮モジュール２２２は、圧縮モジュール１１０が見落とした可能性のある、より近い、より短い長さの一致を判定するために使用されうる。二次圧縮モジュールの例としては、ＭＰＰＣ圧縮器、ＲＤＰバルク圧縮器、および同様のものなどの本件特許出願人によって開発された圧縮器があるが、これに限定されない。
【００３９】
（例示的な方法）
ストリーミングリアルタイム圧縮を実装するための例示的な方法について、図１および２を参照しつつ説明する。これらの例示的な方法は、コンピュータ実行可能命令の一般的なコンテクストに即して説明できる。一般に、コンピュータ実行可能命令は、特定の機能を実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造体、プロシージャ、モジュール、関数などを含むことができる。これらの方法は、通信ネットワークを通じてリンクされているリモート処理デバイスにより機能が実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境において、コンピュータ実行可能命令を、メモリ記憶装置を含むローカルおよびリモートのコンピュータ記憶媒体に配置することができる。
【００４０】
図３（Ａ）、３（Ｂ）、および３（Ｃ）は、コンピューティングデバイス、例えば、クライアントデバイス１０６のうちの１つまたは複数のデバイス上に常駐する１つまたは複数のプログラムモジュールまたはエージェントによって実装されるストリーミングリアルタイム圧縮を示す例示的な流れ図３００を示している。
【００４１】
これらの方法が説明される順序は、制限として解釈されることを意図されておらず、また説明されている任意の数の方法ブロックを組み合わせて、これらの方法、または代替の方法を実装することができる。それに加えて、本明細書で説明されている主題事項の精神および範囲から逸脱することなく、これらの方法から個別のブロックを削除することもできる。さらに、これらの方法は、好適なハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせで実装することができる。
【００４２】
ブロック３０２において、入力データストリームを、バイトコードシーケンスとして受け取ることができる。例えば、圧縮モジュール１１０は、サーバー１０２などの送信元から複数のクライアントデバイス１０６のうちの１つまたは複数のデバイスなどの送信先に送信することを目的とする入力データストリームの一部として、バイトコードシーケンスを受け取ることができる。一般的に、ストリーミングデータは、一連のデータパケットとして送信されうる。データパケットはそれぞれ、バイトコードシーケンスの形でデータを含む。一実装では、バイトコードシーケンスは、履歴バッファ２１６に加えられる。バイトコードシーケンスは、さらに、スライディングウィンドウメカニズムを使用して履歴バッファ２１６内に収めることができる。
【００４３】
ブロック３０４において、バイトコードシーケンスを１つまたは複数のデータチャンクに分割することができる。例えば、圧縮モジュール１１０は、バイトコードシーケンスをチャンクＡおよびチャンクＢなどの２つのデータチャンクに分割することができる。さまざまなデータチャンク２１８内のバイトコードは、入力データストリーム内に含まれるバイトコードに対応する。一実装では、データチャンク２１８内のバイトコードの平均長は、１６バイトとすることができる。データストリームを分割する方法は、当技術分野で周知の技術を使用して実装できる。一実装では、圧縮モジュール１１０によって実行される分割によって、データはすでに出現しているデータストリーム内に存在するすでに出現しているバイトコードパターンに基づいて分割される。データチャンク（チャンクＡおよびＢ）は、データチャンク２１８として格納することができる。
【００４４】
ブロック３０６において、シグネチャをデータチャンクに関連付けることができる。例えば、シグネチャモジュール１１２は、シグネチャをデータチャンクＡおよびＢに関連付けることができる。シグネチャモジュール１１２は、データチャンク２１８内に含まれるバイトコードに基づいてシグネチャを評価する。シグネチャモジュール１１２は、データチャンク２１８に対しハッシュアルゴリズムを使用することによりシグネチャを評価する。シグネチャ付きデータチャンクは、シグネチャデータベース２１４に格納されうる。
【００４５】
ブロック３０８において、入力データストリームに対応するデータチャンクのシグネチャを、すでに伝達されている可能性のあるデータチャンクの格納されているシグネチャと比較する。一実装では、シグネチャモジュール１１２は、チャンクＡおよびＢのシグネチャを以前の送信からの格納されているデータチャンクのシグネチャと比較する。この比較により、チャンクＡおよびＢと以前の送信のデータチャンクとの間の類似度が判定される。一致の確率が高いチャンクが判定されうる。全く同じというわけではないが類似しているデータチャンクは、類似データチャンクと考えることができ、入力データストリームの１つまたは複数のバイトコードの間の類似度が大きいことを示すことができ、１つまたは複数のデータチャンク内の単に類似しているバイトコードではない。シグネチャモジュール１１２により、チャンクＡまたはＢなどの注目しているデータチャンクと類似しているシグネチャを有するデータチャンク２１８が見つからない場合、その対応するバイトコードが、変更なしでエミットされる、つまり、リテラルとして出力バッファにエミットされる。
【００４６】
ブロック３１０において、一致長と称されるバイトコードシーケンスが判定される。入力データストリームのデータチャンクのシグネチャとすでに送信されているデータのデータチャンクのシグネチャとの一致は、入力データストリーム中のコードシーケンスに類似しているコードを有する可能性のあるより大きなバイトコードセグメントを示すことに留意されたい。一実装では、圧縮モジュール１１０は、一致する候補のバイトコードシーケンスの順方向および逆方向スキャンを実行して、より大きなパターンが複数のデータチャンク２１８のうちの１つのデータチャンクなどのデータチャンク内に存在するかどうかを判定する。データチャンクの結果として得られる部分は、入力ストリームに対応するデータチャンク２１８内のバイトコードシーケンスに一致している一致長と称される、より大きなバイトコードシーケンスである。一致長は、他のデータ２２０に格納されうる。
【００４７】
それに加えて、一致長集合体内の一致長は、一致の最良の組み合わせを選択し、他の一致長と重なり合う一致長の部分を回避するように最適化される。一実装では、一致長集合体は、当技術分野で周知の欲張りアルゴリズムを使用して最適化できる。
【００４８】
ブロック３１２において、圧縮モジュールの出力が生成される。例えば、圧縮モジュール１１０は、一致長・コピーオフセットタプル、およびバイトコードシーケンスを含むリストを含む出力を生成する。一致長は、さらに、入力データストリーム中の置き換えられるバイトの位置および数を示す属性を含む。出力内のバイトコードシーケンスは、シグネチャデータベース２１４から判定できる一致がないデータチャンク２１８に対応する。
【００４９】
ブロック３１４において、生成された出力は、さらに圧縮するため二次圧縮モジュールに渡される。例えば、圧縮モジュール１１０は、生成された出力を二次圧縮モジュール２２２に渡す。二次圧縮モジュール２２２は、分割およびシグネチャ割当てのプロセス実行中に圧縮モジュール１１０が見落とした可能性のある、より近い、より短い長さの一致を判定するために使用される。二次圧縮モジュールの例としては、ＭＰＰＣ圧縮器、ＲＤＰバルク圧縮器、および同様のものなどのＭｉｃｒｏｓｏｆｔ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎ社によって開発された圧縮器があるが、これに限定されない。
【００５０】
（例示的なコンピューティング環境）
図４は、本明細書で説明されている技術を実装するために使用されうる、また本明細書で説明されている要素の全部または一部を示しうる、例示的な一般コンピュータ環境４００を示している。コンピュータ環境４００は、コンピューティング環境の一実施例にすぎず、コンピュータおよびネットワークアーキテクチャの使用または機能の範囲に関する制限を示唆することを意図していない。コンピュータ環境４００は、例示的なコンピュータ環境４００に示されている１つのコンポーネントまたはその組み合わせに関係する何らかの依存関係または要求条件がその環境にあるものと解釈すべきでない。
【００５１】
コンピュータ環境４００は、コンピュータ４０２の形態の汎用コンピューティングベースのデバイスを含む。コンピュータ４０２は、例えば、デスクトップコンピュータ、ハンドヘルドコンピュータ、ノートブックコンピュータ、ラップトップコンピュータ、サーバーコンピュータ、ゲーム機などとすることができる。コンピュータ４０２のコンポーネントには、１つまたは複数のプロセッサまたは処理装置４０４、システムメモリ４０６、およびプロセッサ４０４を含むさまざまなシステムコンポーネントをシステムメモリ４０６に結合するシステムバス４０８が含まれるが、これに限定されない。
【００５２】
システムバス４０８は、メモリバスまたはメモリコントローラ、周辺機器バス、アクセラレイティッドグラフィックスポート、およびさまざまなバスアーキテクチャのうちのいずれかを使用するプロセッサまたはローカルバスを含む数種類のバス構造のうちの１つまたは複数を表している。例えば、このようなアーキテクチャとしては、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカルバス、およびザニンバスとしても知られるＰＣＩ（Peripheral Component Interconnect）がある。
【００５３】
コンピュータ４０２は、一般的に、さまざまなコンピュータ可読媒体を備える。このような媒体は、コンピュータ４０２によってアクセス可能な任意の使用可能な媒体とすることでき、揮発性および不揮発性媒体、取り外し可能および取り外し不可能媒体を含む。
【００５４】
システムメモリ４０６は、ランダムアクセスメモリ（ＲＡＭ）４１０などの揮発性メモリ、および／または読み取り専用メモリ（ＲＯＭ）４１２などの不揮発性メモリの形態のコンピュータ可読媒体を含む。起動時などにコンピュータ４０２内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）４１４は、例示されているようなＲＯＭ  ４１２に格納される。ＲＡＭ  ４１０は、一般的に、処理装置４０４に直接アクセス可能な、および／または処理装置４０４によって現在操作されているデータおよび／またはプログラムモジュールを格納する。
【００５５】
コンピュータ４０２は、さらに、他の取り外し可能／取り外し不可能な揮発性／不揮発性コンピュータ記憶媒体も備えることができる。例えば、図４は、取り外し不可能な不揮発性の磁気媒体（図に示されていない）に対する読み書きを行うためのハードディスクドライブ４１６を例示している。さらに、図４は、取り外し可能な不揮発性磁気ディスク４２０（例えば、「フロッピー（登録商標）ディスク」）に対する読み書きを行うための磁気ディスクドライブ４１８を例示しており、それに加えて、図４は、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光媒体などの取り外し可能な不揮発性光ディスク４２４に対する読み書きを行うための光ディスクドライブ４２２を例示している。ハードディスクドライブ４１６、磁気ディスクドライブ４１８、および光ディスクドライブ４２２は、それぞれ、１つまたは複数のデータメディアインターフェース４２６によりシステムバス４０８に接続される。あるいは、ハードディスクドライブ４１６、磁気ディスクドライブ４１８、および光ディスクドライブ４２２は、１つまたは複数のインターフェース（図に示されていない）によってシステムバス４０８に接続することができる。
【００５６】
ディスクドライブおよび関連コンピュータ可読媒体は、コンピュータ４０２用のコンピュータ可読命令、データ構造体、プログラムモジュール、およびその他のデータを格納する不揮発性記憶装置を実現する。実施例は、ハードディスク４１６、取り外し可能磁気ディスク４２０、および取り外し可能光ディスク４２４を例示しているが、磁気カセットまたはその他の磁気記憶装置、フラッシュメモリカード、ＣＤ−ＲＯＭ、デジタル多目的ディスク（ＤＶＤ）または他の光記憶装置、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的消去可能プログラム可能読み取り専用メモリ（ＥＥＰＲＯＭ）などの、コンピュータによりアクセス可能なデータを格納することができる他のタイプのコンピュータ可読媒体も、このコンピューティングシステムおよび環境例を実装するために使用することができることは理解されるであろう。
【００５７】
例えば、オペレーティングシステム４２６、１つまたは複数のアプリケーションプログラム４２８、他のプログラムモジュール４３０、およびプログラムデータ４３２を含む、多くのプログラムモジュールは、ハードディスク４１６、磁気ディスク４２０、光ディスク４２４、ＲＯＭ  ４１２、および／またはＲＡＭ  ４１０に格納されることができる。このようなオペレーティングシステム４２６、１つまたは複数のアプリケーションプログラム４２８、他のプログラムモジュール４３０、およびプログラムデータ４３２（またはそれらの何らかの組み合わせ）はそれぞれ、分散ファイルシステムをサポートする常駐コンポーネントの全部または一部を実装する。
【００５８】
ユーザーはキーボード４３４およびポインティングデバイス４３６（例えば、「マウス」）などの入力デバイスを介して、コンピュータ４０２にコマンドおよび情報を入力することができる。他の入力デバイス４３８（図に特には示されていない）としては、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、シリアルポート、スキャナなどがある。これらの入力デバイスおよびその他の入力デバイスは、システムバス４０８に結合されている入力／出力インターフェース４４０を介して処理装置８０４に接続され、またパラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースおよびバス構造により接続されることも可能である。
【００５９】
モニタ４４２またはその他のタイプのディスプレイデバイスも、ビデオアダプタ４４４などのインターフェースを介してシステムバス４０８に接続できる。モニタ４４２に加えて、他の出力周辺デバイスは、スピーカー（図に示されていない）およびプリンタ４４６などのコンポーネントを含み、入力／出力インターフェース４４０を介してコンピュータ４０２に接続できる。
【００６０】
コンピュータ４０２は、（複数の）リモートコンピューティングベースデバイス４４８などの１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク接続環境で動作させることができる。例えば、リモートコンピューティングベースデバイス４４８は、パーソナルコンピュータ、ポータブルコンピュータ、サーバー、ルーター、ネットワークコンピュータ、ピアデバイスまたは他の共通ネットワークノード、および同様のものとすることができる。リモートコンピューティングベースデバイス４４８は、コンピュータ４０２に関して本明細書で説明されている要素および特徴の多くまたは全部を含むことができるポータブルコンピュータとして例示されている。
【００６１】
コンピュータ４０２とリモートコンピュータ４４８との間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）４５０と一般的なワイドエリアネットワーク（ＷＡＮ）４５２として表されている。このようなネットワーキング環境は、オフィス、企業全体にわたるコンピュータネットワーク、イントラネット、およびインターネットでは一般的である。
【００６２】
ＬＡＮネットワーキング環境で実装された場合、コンピュータ４０２はネットワークインターフェースまたはアダプタ４５４を介して、ローカルネットワーク４５０に接続される。ＷＡＮネットワーキング環境で実装される場合、コンピュータ４０２は、一般的に、広域ネットワーク４５２上での通信を確立するためのモデム４５６または他の手段を含む。モデム４５６は、コンピュータ４０２に内蔵されても、外付けでもよく、入力／出力インターフェース４４０または他の適切なメカニズムを介してシステムバス４０８に接続することができる。例示されているネットワーク接続は例示的であり、コンピュータ４０２と４４８との間の（複数の）通信リンクを確立する他の手段を採用できることは理解されるであろう。
【００６３】
コンピューティング環境４００とともに例示されているようなネットワーク接続環境では、コンピュータ４０２またはその一部に関して示されているプログラムモジュールは、リモートメモリ記憶装置に格納されうる。例えば、リモートアプリケーションプログラム４５８は、リモートコンピュータ４４８のメモリデバイスに常駐する。説明のため、アプリケーションプログラムおよびオペレーティングシステムなどの他の実行可能なプログラムコンポーネントは、本明細書では、離散ブロックとして例示されているが、そのようなプログラムおよびコンポーネントは、さまざまな時点において、コンピューティングベースデバイス４０２の異なる記憶コンポーネント内にあり、コンピュータの（複数の）データプロセッサにより実行されることは理解される。
【００６４】
さまざまなモジュールおよび技術は、本明細書では、１つまたは複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテクストに即して説明することができる。一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、さまざまな実施形態で望まれているように組み合わせるか、または分散させることができる。
【００６５】
これらのモジュールおよび技術の実装は、ある種のコンピュータ可読媒体上に格納されるか、またはある種のコンピュータ可読媒体を介して送信されうる。コンピュータ可読媒体は、コンピュータによってアクセスできる利用可能な媒体とすることができる。例えばコンピュータ可読媒体の例としては、「コンピュータ記憶媒体」および「通信媒体」が含まれるが、これに限定されない。
【００６６】
「コンピュータ記憶媒体」は、コンピュータ可読命令、データ構造体、プログラムモジュール、またはその他のデータなどの情報を格納する方法または技術で実装される揮発性および不揮発性、取り外し可能および取り外し不可能媒体を含む。コンピュータ記憶媒体としては、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたはその他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多目的ディスク（ＤＶＤ）またはその他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置またはその他の磁気記憶装置、または所望の情報を格納するために使用することができ、しかもコンピュータによりアクセスできるその他の媒体があるが、これに限定されない。
【００６７】
あるいは、フレームワークの一部をハードウェア、またはハードウェア、ソフトウェア、および／またはファームウェアの組み合わせで実装することもできる。例えば、１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）またはプログラマブルロジックデバイス（ＰＬＤ）は、フレームワークの１つまたは複数の部分を実装するように設計またはプログラムすることができる。
【００６８】
（結論）
ストリーミングリアルタイム圧縮を実装するための実施形態は、構造的特徴および／または方法に特有の言語で説明されているが、付属の請求項の主題事項は、説明されている特定の特徴または方法に必ずしも限定されないことは理解されるであろう。むしろ、特定の特徴および方法は、ストリーミングリアルタイム圧縮を実現するための例示的実装として開示されている。
【図１】
0005566888.tif 000002
【図２】
0005566888.tif 000003
【図３Ａ】
0005566888.tif 000004
【図３Ｂ】
0005566888.tif 000005
【図３Ｃ】
0005566888.tif 000006
【図４】
0005566888.tif 000007