JP2005269618A - データ圧縮 - Google Patents

データ圧縮 Download PDF

Info

Publication number
JP2005269618A
JP2005269618A JP2005028194A JP2005028194A JP2005269618A JP 2005269618 A JP2005269618 A JP 2005269618A JP 2005028194 A JP2005028194 A JP 2005028194A JP 2005028194 A JP2005028194 A JP 2005028194A JP 2005269618 A JP2005269618 A JP 2005269618A
Authority
JP
Japan
Prior art keywords
sequence
data
matching
positions
index
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.)
Pending
Application number
JP2005028194A
Other languages
English (en)
Inventor
Andrew V Kadatch
ブイ.カダッチ アンドリュー
Michael V Sliger
ブイ.スライガー マイケル
Nadim Y Abdo
ワイ.アブド ナディム
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 JP2005269618A publication Critical patent/JP2005269618A/ja
Pending legal-status Critical Current

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
    • AHUMAN NECESSITIES
    • A01AGRICULTURE; FORESTRY; ANIMAL HUSBANDRY; HUNTING; TRAPPING; FISHING
    • A01CPLANTING; SOWING; FERTILISING
    • A01C7/00Sowing
    • A01C7/08Broadcast seeders; Seeders depositing seeds in rows
    • A01C7/10Devices for adjusting the seed-box ; Regulation of machines for depositing quantities at intervals
    • A01C7/102Regulating or controlling the seed rate
    • AHUMAN NECESSITIES
    • A01AGRICULTURE; FORESTRY; ANIMAL HUSBANDRY; HUNTING; TRAPPING; FISHING
    • A01CPLANTING; SOWING; FERTILISING
    • A01C5/00Making or covering furrows or holes for sowing, planting or manuring
    • A01C5/06Machines for making or covering drills or furrows for sowing or planting
    • A01C5/062Devices for making drills or furrows
    • AHUMAN NECESSITIES
    • A01AGRICULTURE; FORESTRY; ANIMAL HUSBANDRY; HUNTING; TRAPPING; FISHING
    • A01CPLANTING; SOWING; FERTILISING
    • A01C5/00Making or covering furrows or holes for sowing, planting or manuring
    • A01C5/06Machines for making or covering drills or furrows for sowing or planting
    • A01C5/066Devices for covering drills or furrows
    • AHUMAN NECESSITIES
    • A01AGRICULTURE; FORESTRY; ANIMAL HUSBANDRY; HUNTING; TRAPPING; FISHING
    • A01CPLANTING; SOWING; FERTILISING
    • A01C5/00Making or covering furrows or holes for sowing, planting or manuring
    • A01C5/06Machines for making or covering drills or furrows for sowing or planting
    • A01C5/066Devices for covering drills or furrows
    • A01C5/068Furrow packing devices, e.g. press wheels
    • 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
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77

Landscapes

  • Life Sciences & Earth Sciences (AREA)
  • Soil Sciences (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Environmental Sciences (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Information Transfer Between Computers (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】 ターミナルサービス環境において通信を行うためのデータ圧縮を提供する。
【解決手段】 データ内の初期シーケンスと一致するLUT内のインデックスを見つけることでデータを圧縮する。LUTは複数のエントリを含み、各エントリは複数のインデックスの内の特定の1つを使用して発見できる。各エントリは対応するインデックスがヒストリバッファ内に置かれているかどうかを示す参照であり、もし置かれていれば、ヒストリバッファ内の対応するインデックスの1つまたは複数の位置を示す参照となる。マッチングインデックスの対応するエントリが複数の位置を参照している場合、各位置についてマッチングインデックスがあるシーケンスを初期シーケンスを含むデータ内のシーケンスと比較する。マッチングシーケンスは、複数の位置のそれぞれにあるシーケンスの長さ及び位置に基づく比較から導かれる。
【選択図】 図1

Description

本発明は、一般に、データ圧縮の分野に関するものであり、より具体的には、データ圧縮のためのシステム、サーバ、方法、およびコンピュータ読み取り可能な媒体に関するものである。
増大の一途を辿るデータへのアクセスに使用される方法は、ますます多様化する一方である。例えば、ユーザは、Webサイトにアクセスして、コンサートイベントの放送、つまりWeb放送を受信することができる。さらに、ゲームおよびその他のアプリケーションについても、携帯電話を利用して無線ネットワーク経由でアクセスすることができる。このようなデータをユーザに提供するために、クライアントによるレンダリングのためにネットワーク経由でサーバからクライアントへデータをストリーミング配信することができる。ユーザは、その後、映画を見る、歌を聴くなどにより、レンダリングされたデータと対話することができる。
データのストリーミング配信(Streaming data)は、ユーザがデータをすばやく受信できるような機能性の向上をユーザに提供する。ストリーミング配信でなければ、クライアントがデータを出力する前にサーバからデータの全量を受信する必要がある場合には、クライアント側でデータをレンダリングする際に、ユーザは遅れを感じるかもしれない。データをストリーミング配信することにより、ユーザが遭遇する遅延を減らすことができる。データのストリーミング配信は、データの「リアルタイム」レンダリングを提供するために使用することができる。
データをストリーミング配信するために、一般的にはパケットを使用して、データをストリーミング配信でまたは連続的にサーバから伝送し、その後、データを含むファイル全体がクライアント側で使用可能になるまでレンダリングされないデータとは対照的に、データが到着したときにクライアント側でレンダリングする。ビデオデータ、オーディオデータ、メディアデータなどのさまざまな種類のデータにストリーミング配信を使用できる。ビデオデータのストリームは、伝送され、イメージが到達したときにレンダリングされる「動画」のシーケンスを提供する。同様に、オーディオデータのストリームは、オーディオデータが到着したときに再生される音声データを提供する。メディアデータのストリームは、オーディオデータとビデオデータの両方を含む。
ストリーミングデータは、圧縮することにより、ネットワーク経由でデータをサーバからクライアントに効率よくストリーミング配信し、ストリーミング配信されたデータの有用性を高めることができる。例えば、通信によりサーバをクライアントに接続するネットワークは、帯域幅が限られていることがある。帯域幅が限られていると、サーバからクライアントに一時に通信できるデータの量が制限される場合があり、したがって、ネットワーク経由でデータをストリーミング配信したときにクライアントに提供される機能も制限される場合がある。例えば、ストリーミング配信されるビデオデータは、高帯域幅ネットワークが使用される場合の解像度に比べて、帯域幅が限られているためより低い解像度に制限されることがある。したがって、より高い解像度のストリーミングビデオデータを望むユーザは、否応なくさらに高い帯域幅の接続に投資せざるを得ない。ストリーミングデータを圧縮することにより、低い帯域幅のネットワーク経由で一度により多くのデータを転送することができ、したがって、ストリーミング配信されたデータの有用性が向上する。
しかし、ストリーミングデータを圧縮する場合、データの集合全体の圧縮、例えばブロック圧縮とは対照的に、厄介な問題が加わることがある。例えば、映画全体を一度に圧縮するには、圧縮ルーチンが、データを圧縮するために、その映画を構成する全データ量を調べる場合がある。圧縮ルーチンは、映画を構成するデータ全体を通して含まれる共通のシーケンスの表現を提供することができる。しかし、ストリーミングデータは、データの「リアルタイム」レンダリングのために供給される。したがって、クライアントによるデータのリアルタイムレンダリングを提供するために、ストリーミングデータを分析する時間は、制限される可能性がある。さらに、共通のシーケンスの表現を提供するために、常に比較に利用できるデータの量も限られることがある。
したがって、データ圧縮に対する継続的な必要性がある。
データ圧縮について説明する。
一実施例では、クライアントからのリモートアクセスの要求に応じて送信されたデータや、ターミナルサービス環境でのデータなどをクライアントにストリーミング配信するために、データを圧縮する圧縮モジュールがサーバにより実行される。圧縮モジュールは、クライアントにすでにストリーミング配信されているデータを含むヒストリバッファを使用する。圧縮モジュールは、実行されると、ストリーミング配信されるデータ内のシーケンスとヒストリバッファ内の1つまたは複数のシーケンスとを比較して、マッチングシーケンスを見つける。ヒストリバッファ内のシーケンスの位置を特定するために、複数のインデックスのうちの1つでそれぞれ発見可能な複数のエントリを有するルックアップテーブルを使用する。これらのエントリのそれぞれは、対応するインデックスがヒストリバッファ内に置かれているかどうかを示す参照であり、もし置かれていれば、さらに、ヒストリバッファ内の対応するインデックスの1つまたは複数の位置を示す参照となる。したがって、圧縮モジュールは、ストリーミング配信されるデータ内の初期シーケンスをルックアップテーブルのインデックスとして使用し、ヒストリバッファ内のマッチングインデックスを見つけることができる。その後、データ内のマッチングシーケンスは、ヒストリバッファ内のマッチングシーケンスの位置および長さを記述する表現で置き換えられ、これによりクライアントにストリーミング配信する圧縮データを形成することができる。
他の実施例では、方法は、サーバにより提供されるターミナルサービスからデータをクライアントにネットワーク経由で通信するためにリソースが使用可能かどうかを示すフィードバックを受け取ること、およびそのフィードバックに応じて、データを圧縮するために使用される圧縮ルーチンの1つまたは複数のパラメータをチューニングすることを含む。
さらに他の実施例では、方法は、サーバを通じて利用可能なアプリケーションまたはファイルへのリモートアクセスの要求をクライアントからサーバで受け取ることを含む。
ネットワーク経由で、その要求に応じてデータを伝達するためにリソースが使用可能であるかどうかが判別される。データを圧縮するために使用される圧縮ルーチンの1つまたは複数のパラメータは、上記判別されたリソースの使用可能性に基づいてチューニングされる。
なお、説明の中の例において、同じ参照番号は、類似の構造およびコンポーネントを参照するために使用する。
・概要
データ圧縮について説明する。一実施例では、圧縮モジュールは、サーバからクライアントへストリーミング発信するデータを圧縮するためサーバにより実行される。圧縮モジュールは、クライアントにすでにストリーミング配信されているデータを含むヒストリバッファを使用する。圧縮モジュールは、実行時に、ストリーミング配信されるデータ内のシーケンスとヒストリバッファ内の1つまたは複数のシーケンスとを比較して、マッチングシーケンスを見つける。ヒストリバッファ内のシーケンスの位置を特定するために、複数のエントリを有するルックアップテーブルが使用される。これらのエントリはそれぞれ、複数のインデックスのうちの特定の1つを使用して発見可能である。各エントリは、対応するインデックスがヒストリバッファ内に置かれているかどうかを示す参照であり、もし置かれていれば、さらに、ヒストリバッファ内の対応するインデックスの1つまたは複数の位置を示す参照となる。したがって、圧縮モジュールは、ストリーミング配信されるデータ内の初期シーケンスをルックアップテーブルのインデックスとして使用し、エントリを1つ見つけることができる。このようにして、圧縮モジュールは、ヒストリバッファ内の各シーケンスをストリーミング配信されるデータ内のシーケンス毎に別々に比較することなく、初期シーケンスを有するヒストリバッファ内でそれぞれの位置をすばやく特定することができる。
マッチングインデックスの対応するエントリが複数の位置を参照している場合、圧縮モジュールは、マッチングインデックスがある各位置のシーケンスを初期シーケンスを含むデータ内のシーケンスと比較することによりマッチングシーケンスを導出することができる。その後、データ内のマッチングシーケンスは、ヒストリバッファ内のマッチングシーケンスの位置および長さを記述する表現で表すことができる。その後、その表現を含む圧縮データを形成することができる。続いて、圧縮データはクライアントにストリーミング配信される。クライアントは、サーバからクライアントにすでにストリーミング配信されているデータも含んでいるヒストリバッファを使用することにより圧縮データを伸張する。クライアントは、伸張モジュールの実行を通じて、データを再構成するためにその表現により示される長さおよび位置を使用してクライアントのヒストリバッファ内のマッチングシーケンスを見つける。このようにして、データを失うことなくデータの圧縮および伸張を行うことができるような可逆データ圧縮技術が実現される。例えば、ビデオデータは、このデータ圧縮技術を使用することで、データの一部を失わずに、したがってビデオデータの解像度を維持して、圧縮および圧縮解除を行うことができる。
・例示的環境
図1は、データがネットワーク106経由でサーバ102からクライアント104へストリーミング配信される環境100を示す一実施例の図である。クライアント104は、さまざまな方法で構成することができる。例えば、クライアント104は、図示されているようなデスクトップコンピュータ、および、移動局、娯楽機器、セットトップボックス、携帯電話などのネットワーク106経由で通信することが可能な装置として構成することができる。クライアント104は、さらに、クライアント104を操作する人および/またはエンティティ(entity)に関係していてもよい。つまり、クライアント104は、ユーザおよび/またはマシンを含む論理クライアントを記述しているとすることができる。1つのクライアント104が図示されているが、複数のクライアントをネットワーク106に通信可能に接続することができる。ネットワーク106は、インターネットとして図示されているが、さらに、イントラネット、有線または無線電話網などのさまざまな他のネットワークを含むこともできる。
サーバ102は、ネットワーク106経由でデータをクライアント104にストリーミング配信するように構成されている。サーバ102は、クライアント104によるレンダリングのために、さまざまなストリーミングデータを供給する。一実施例では、サーバ102は、クライアント104にストリーミング配信されるコンサートのWeb放送を提供することができる。クライアント104によりレンダリングされると、ユーザはそのWeb放送を視聴できる。他の実施例では、クライアント104は、このクライアント104により出力するために、サーバ102からストリーミング配信される楽曲を含むデータを受信することができる。
さらなる実施例では、サーバ102は、さらに、リモートアプリケーション実行用のターミナルサービス(terminal services)を提供することもできる。例えば、サーバ102は、複数のアプリケーション108(1)、…、108(n)、…、108(N)を含むことができるが、ただし、「n」は2から「N」までの任意のアプリケーションとすることができる。アプリケーション108(1)〜108(N)はそれぞれ、サーバ102上で実行される。サーバ102は、ネットワーク106経由で、アプリケーション108(1)〜108(N)を実行することを通じて供給される画面情報をクライアント104にストリーミング配信する。例えば、画面情報は、オペレーティングシステムにより与えられるデスクトップの表示、およびワードプロセッサの実行に関係する情報を表示するウィンドウ、ならびにオペレーティングシステムおよび/またはワードプロセッサにより与えられるオーディオ情報も含むことができる。
サーバ102からストリーミング配信される画面情報は、ユーザが見られるようにクライアント104によりレンダリングされる。ユーザは、クライアント104と対話し、マウス108および/またはキーボード110などのクライアント104の入力デバイスを使用して入力することができる。入力は、キーボード110を使用することにより供給される、ワードプロセッサ用のテキスト入力などのレンダリングされた画面情報に対応することができる。それらの入力は、ネットワーク106経由でクライアント104からサーバ102へ通信される。入力は、サーバ102により受信されると、複数のアプリケーション108(1)〜108(N)を実行するときに使用することができる。例えば、ワードプロセッサは、ドキュメントに含めるためにテキスト入力を受け、画面情報をクライアント104にストリーミング配信して、このテキストを含むドキュメントを示すことができる。サーバ102上でのアプリケーション108(1)〜108(N)の実行と、画面情報のクライアント104へのストリーミング配信を通じて、クライアント104は、クライアント104自体では他の方法だと利用できない機能を利用することができる。
例えば、クライアント104は、例えば、限られた処理および/またはメモリリソースを有する「シン」クライアントとして構成することができる。しかし、サーバ102は、例えば、クライアント104よりも処理および/またはメモリリソースの量をより多くもたせることにより、機能を豊富にすることができる。したがって、サーバ102は、クライアント104では実行できない、および/またはクライアント104で実行すると低速となるアプリケーションを実行することができる。サーバ102は、画面情報をクライアント104に送信することによりアプリケーション108(1)〜108(N)の1つまたは複数の実行結果をクライアント104に送り、ネットワーク106経由でクライアントから入力を受け取る。このようにして、処理リソース、メモリリソース、および複数のアプリケーション108(1)〜108(N)など、サーバ102が備える機能を、他の方法だとこの機能を利用できないクライアント104に提供することができる。
ネットワーク経由でサーバ102とクライアント104間の通信を提供するために、サーバ102とクライアント104は、それぞれ、リモートデスクトッププロトコル(RDP)112、114を実装することができる。RDP 112、114は、すでに説明したようにアプリケーション108(1)〜108(N)に対しネットワーク接続を介したリモート表示および入力機能を提供するように設計されている。例えば、RDPを使用することにより、サーバ102からクライアント104にデバイス通信(device communication)およびプレゼンテーションデータを搬送する個別の仮想チャネルとともに、クライアント104からサーバ102に通信される暗号化された入力を可能にする。
RDP 112、114は、さらに、圧縮および伸張モジュール116、118をサーバ102およびクライアント104のそれぞれに含めることにより帯域幅を削減することもできる。圧縮モジュール116はRDP 112の実装を通じてサーバ102により実行され、ネットワーク106経由でストリーミング配信する前にデータを圧縮することができる。同様に、伸張モジュール118はRDP 114の実装を通じてクライアント104により実行されることにより、ネットワーク106経由でサーバ102からストリーミング配信された圧縮データを伸張することができる。
圧縮および伸張モジュール116、118は、実行時にそれぞれ、ネットワーク1006経由でストリーミング配信されるデータの圧縮および伸張を行う。すでに述べたように、ストリーミングデータの圧縮および伸張では、一度にデータセット全体の圧縮および伸張を行うのとは対照的に、つまりブロック圧縮とは対照的に、独自の複雑な状況をもたらす場合がある。例えば、データは「リアルタイム」でストリーミング配信することができるため、データのストリーミング配信に遅延が生じるとデータの有用性を低下させる場合がある。圧縮および伸張モジュール116、118では、ストリーミングデータの独自の複雑な状況に対処し、それにより、図3から5に関してさらに詳しく説明されているように、ネットワーク106経由で圧縮データのストリーミング配信を提供する。
ターミナルサービス(TS)を使用することにより、クライアント104は、サーバ102にインストールされているアプリケーション108(1)〜108(N)のうちの1つまたは複数にアクセスし、サーバ102上のアプリケーションを実行し、クライアント104上にそのアプリケーションのユーザインターフェイス(UI)を表示することができる。アプリケーション108(1)〜108(N)はサーバ102上で実行されるため、TSにより、クライアント104は、クライアント104がクライアント104自体でリソースをローカルで実行するのに適したハードウェアおよびソフトウェアを有しているかどうかに関係なく、企業インフラのリソースを活用することができる。
クライアント104は、複数のアプリケーション108(1)〜108(N)がサーバ102により実行されるターミナルサービス環境で説明しているが、クライアント104は、複数のアプリケーション120(1)、…、120(m)、…、120(M)のうちの1つまたは複数を実行することもできる。例えば、アプリケーション120(1)〜120(M)のうちの1つは、ユーザが見るために表示するデータをレンダリングし、マウス108および/またはキーボード110などのユーザからの入力を受け取るためにRDP 114とともに利用されるインターフェイスを備えることができる。さらに、圧縮および伸張モジュール116、118は、それぞれのRDP 112、114の一部として図示されているが、圧縮および伸張モジュール116、118は、それぞれストリーミングデータの圧縮および伸張のため実行されるスタンドアロンのソフトウェアコンポーネントとして構成することができる。
さらに、以下の説明の一部では、ターミナルサービス環境における圧縮の使用について説明しているが、本明細書で説明している圧縮および伸張技術は、他のさまざまな環境でも利用することができる。例えば、この圧縮技術を使用することにより、リモートアクセス環境で使用されるデータを圧縮することができる。リモートアクセスとは、遠く離れた場所からコンピュータまたはネットワークにアクセスできることを表す。例えば、企業の遠隔地にある事務所では、企業のネットワークにアクセスすることを所望し、リモートアクセスを利用して、電話回線網、インターネットなどを経由し、そこに収容されているファイルおよびアプリケーションにアクセスする場合がある。サーバ102は、ネットワークにリモートでアクセスすることを求めているクライアントを処理するためにセットアップされている関連ソフトウェアを有するリモートアクセスサーバとして構成することができる。一実施例では、リモートアクセスサーバは、セキュリティ用のファイヤウォールサーバおよびリモートアクセス要求をネットワークの他の部分に転送するルータを含む。リモートアクセスサーバは、さらに、仮想プライベートネットワーク(VPN)の一部として使用することもできる。
図2は、図1のサーバ102およびクライアント104をさらに詳しく示している一実施例200の図である。サーバ102は、プロセッサ202およびメモリ204を備える。RDP 112およびその個別の圧縮モジュール116は、プロセッサ202上で実行されているように例示され、メモリ204に格納可能である。同様に、クライアント104は、プロセッサ206およびメモリ208を備える。RDP 114およびその個別の伸張モジュール118は、プロセッサ206上で実行されているように例示され、メモリ208に格納可能である。
サーバ102からクライアント104にストリーミング配信されるべきデータは、ビデオカメラ、マイクなどの入力デバイス210から受け取った、アプリケーション108(1)〜108(N)のうちの1つまたは複数の実行など、さまざまなソースから供給することができる。圧縮モジュール116は、サーバ102のプロセス202上で実行され、クライアント104にストリーミング配信するデータを圧縮する。そのデータは、サーバ102からクライアント104へパケットでストリーミング配信することができる。
例えば、圧縮モジュール116は、所与の長さの未圧縮のシーケンスを有するデータを受け取り、そのシーケンスを、より小さな(現在圧縮されている)長さに圧縮すること、例えばバイト数、ビット数などを減らすことを試みることができる。圧縮モジュール116は、シーケンスを、置き換えられるシーケンスに比べて格納時に使用されるメモリリソースが少なくて済む、例えばバイト数の少ない表現で置き換えることにより、パケット毎にデータを圧縮することができる。
圧縮モジュール116がシーケンスを圧縮できる場合、圧縮データがRDP接続の終点、つまりクライアント104のRDP 114に送信される。伸張モジュール118はクライアント104により実行され、圧縮データを伸張してデータを再構成する。圧縮モジュール116がデータを圧縮できない場合、データは、非圧縮形式で、つまりリテラルシーケンスでクライアント104にストリーミング配信することができる。圧縮モジュール116は、その後、サーバ102により実行され、後続のシーケンスの圧縮を試みることができる。
データを圧縮するために使用される基本オペレーションは、以前にストリーミング配信されたシーケンスとともに圧縮されるデータ内のシーケンスのパターンマッチングを伴う。これを達成するために、圧縮モジュール116は、クライアント104にすでにストリーミング配信されているデータを収容しているヒストリバッファ212を維持する。圧縮モジュール116は、実行時に、ストリーミング配信されるデータ内のシーケンスとすでにクライアント104にストリーミング配信されているデータに含まれる1つまたは複数のシーケンスとを照合する。その後、ヒストリバッファ内のシーケンスと一致するストリーミング配信されるデータ内のシーケンスは、ヒストリバッファ212内のマッチングシーケンスを参照する1つまたは複数の表現を使用して表現することができる。これらの表現は、より小さい、つまり、圧縮する実際のシーケンス、すなわちマッチングシーケンスを格納するために使用されるメモリリソースよりも、使用するメモリリソースをより少なくすることができる。このことは、ストリーミング配信されるデータに含まれるデータの量を有効に低減する。
ヒストリバッファ212を使用したパターンマッチングの基本例を例示するために、ヒストリバッファ212は、以下のシーケンスを含むと仮定する。
1 2 7 4 5 6 3 9 4 5 1 4 9 1
圧縮モジュール116は、サーバ102のプロセッサ202上で実行され、以下のシーケンスを受け取る。
4 5 9 7 4 5 6 3 9 4 5 1 4 6
圧縮モジュール116は、実行時に、圧縮されるデータ内のシーケンスと一致するヒストリバッファ内で最長のシーケンス、つまりマッチングシーケンス(matching sequence)を見つける。この場合、ヒストリバッファ内に現れるマッチングシーケンスは、以下では太字で示されている。マッチングシーケンスは、長さ10バイトで、ヒストリバッファ212の先頭から3バイトのところで始まる(左から開始し、0からカウントする)。
Figure 2005269618
したがって、圧縮モジュール116は、実行時に、ストリーミング配信されるデータを以下のように表現することにより、圧縮データを作成することができる。
4 5 9 (バッファの先頭から3バイトのところで始まる長さ10バイトの一致) 6
サーバ102では、ヒストリバッファ内のマッチングシーケンスを参照することにより、クライアント104にすでにストリーミング配信されているシーケンスを再送する必要はない。それ故に、圧縮モジュール116は、ストリーミング配信されるデータ内の繰り返しパターンを見つけて、この繰り返しパターン、つまりマッチングシーケンスを、ネットワーク106経由で送信されたときに使用するメモリリソースおよび帯域幅がより少ない表現で置き換えることにより、ストリーミング配信されるデータを圧縮する。
圧縮データを伸張するために、クライアント104は、伸張モジュール118およびヒストリバッファ214を備える。クライアント104のヒストリバッファ214は、サーバ102のヒストリバッファ212のように、すでにストリーミング配信されているデータを格納する。したがって、伸張モジュール118は、クライアント104により実行されると、ヒストリバッファ214を使用することによりクライアント104にストリーミング配信されている圧縮データを伸張することができる。前の実施例の続きとして、クライアント104が以下のように示されている圧縮データを受け取ると仮定する。
4 5 9 (バッファの先頭から3バイトのところで始まる長さ10バイトの一致) 6
伸張モジュール118は、圧縮データに含まれる表現に基づき、実行時に、ヒストリバッファ214から圧縮されたシーケンスを取り出すことができ、これは、以下のように太字で示される。
Figure 2005269618
こうして、伸張モジュール118は、ヒストリバッファ214を使用して圧縮された文字列を伸張することができる。
サーバ102は、ヒストリバッファ212内でマッチングシーケンスを見つけるためのルックアップテーブル216を備えることもできる。例えば、ルックアップテーブル216は、複数のインデックスのうちの対応する1つによりそれぞれ発見可能な複数のエントリを含むことができる。それぞれのエントリは、対応するインデックスを有するヒストリバッファ212内の各位置を記述する。したがって、圧縮モジュール116は、サーバ102により実行されると、ルックアップテーブル216を使用することによりヒストリバッファ212内の特定のシーケンスをすばやく特定することができる。ルックアップテーブル216およびヒストリバッファ212についてのさらなる検討は、図3〜4の関連で見出すことができる。
サーバ102は、ハフマン符号化、算術符号化、プレフィクス符号化(Prefix encoding)、およびマルコフ符号化などの符号化技術を使用して、ストリーミング配信用にデータをさらに圧縮することもできる。例えば、ストリーミング配信されるデータは、ヒストリバッファ内のシーケンスと一致しないシーケンスを含むことができる。これらのシーケンスは、「リテラル」シーケンス(“literal”sequences)と呼ばれる。ハフマン符号化を使用して、データ内のリテラルシーケンスの一部または全部を圧縮すると、データをさらに圧縮することができる。例えば、ハフマン符号化は、さらに圧縮するそれぞれのリテラルシーケンスの出現度数を関連付ける出現度数テーブルから始めることができる。出現度数ケーブルは、データ自体および/または代表データから生成することができる。例えば、すでにストリーミング配信されているパケットを処理することでリテラルシーケンスの出現度数を求め、その後それを利用して、それぞれの後続のパケットを処理することができる。
例えば、可変長文字列を、一意的なプレフィクス(prefix)などのその特定のリテラルシーケンスを一意に表すそれぞれのリテラルシーケンスに割り当てることができる。その後、その可変長文字列をツリー状に配列して、各リテラルシーケンスおよび表現をそれぞれ符号化および復号化する。リテラルシーケンスを符号化するために、符号化されるリテラルシーケンスをツリー内に配置する。リテラルシーケンスを含む葉を特定するために使用されるツリーの枝を利用して、リテラルシーケンスを符号化する、つまり、リテラルシーケンスの表現を与える。例えば、ハフマン符号化に使用されるツリーの各枝には出力アルファベットの記号、例えば、ビット0と1がマークされ、符号化は、ツリーのルートから符号化されるリテラルシーケンスまでの経路上の枝マーキングの列挙となる。各表現の復号化は、リテラルシーケンスを含むツリーの葉に到達するまで、可変長文字列内のそれぞれの連続する値に基づいて、ツリーをその原点から枝を通り下ってツリーの葉へと縦走(traversing)することによって行われる。
リテラルシーケンスのハフマン符号化について説明してきたが、ハフマン符号化を使用することによりさらにさまざまなデータを圧縮することができる。例えば、ハフマンテーブル218では、リテラル222シーケンスおよびバックポインタ224の両方を符号化することができる。リテラルシーケンスは、すでに説明しているように、ヒストリバッファ212内に見つからないシーケンスを含む。したがって、ハフマンテーブル218を使用することで、リテラル222シーケンスを圧縮することができる。ハフマンテーブル218を利用してバックポインタ224も圧縮できる。バックポインタ224は、ヒストリバッファ212内の特定のシーケンスの位置を記述する。例えば、すでに説明しているように、ヒストリバッファ212内のシーケンスと一致するデータ内のシーケンス、つまりマッチングシーケンスは、「バッファの先頭からYバイトのところで始まる長さXバイトの一致」として記述することができる。バックポインタ224は、ヒストリバッファ212内のマッチングシーケンスの位置、つまりYバイトを記述する。ハフマンテーブル220を使用することにより、マッチングシーケンスの長さ分226、つまりXバイト分を圧縮することができる。
サーバ102からクライアント104にストリーミング配信された圧縮データを伸張するために、それぞれサーバ102のハフマンテーブル218、220に対応するハフマンテーブル228、230を使用して、クライアント104により、伸張モジュール116が実行される。例えば、ハフマンテーブル228は、リテラル232シーケンスおよびバックポインタ234を伸張するために使用でき、一方、ハフマンテーブル230は、マッチングシーケンスの長さ226を伸張するために使用することができる。ハフマンテーブルのさらなる検討は、図7の関連で見出すことができる。
サーバ102およびクライアント104は、さらに、それぞれLRU(last recently used:最も長い間参照されていない)テーブル236、238を含むこともできる。LRUテーブル236、238はそれぞれ、バックポインタが「最も長い間参照されていない」バックポインタのうちの1つであったかどうかに基づきバックポインタをさらに符号化するために使用することができる。例えば、LRUテーブル236は、それぞれ、最後の4つのバックポインタ毎に、LRU表現を与えるために使用することができる。LRU表現は、LRUテーブル236内で特定のバックポインタを特定するためのインデックスとして使用される。この方法で、繰り返されるバックポインタは、さらに圧縮することができる。LRUテーブルのさらなる検討は、図7の関連で見出すことができる。
サーバ102からクライアント104にストリーミング配信されるデータの圧縮について説明しているが、クライアント104は、データを圧縮してサーバ102にストリーミング配信で送り返すこともできる。さらに、以下では、サーバ102からクライアント104にストリーミング配信されるパケットに関してデータの圧縮について説明しているが、データのさまざまな集合を使用して、サブパケットバイトシーケンス(sub‐packet byte sequences)、複数パケットなどのデータを圧縮することができる。さらに、以下では、バイトシーケンスについて説明しているが、ビットなど、データ内の他のシーケンスについても考慮されている。
・手順の実施例
図3は、ストリーミング配信するデータを圧縮用に構成する例示的手順300を示す流れ図である。ブロック302で、データがヒストリバッファ212に追加される。例えば、ヒストリバッファ212は、ネットワーク106経由で図2のサーバ102からクライアント104にストリーミング配信された、かつ/またはストリーミング配信する準備ができている複数のパケット304(1)、304(2)を含むことができる。他の実施例では、パケット304(1)、304(2)は、圧縮モジュール116の実行によりすでに処理されているデータに対応することができる。
サーバ102は、ストリーミング配信されるパケット304(3)を受信する。圧縮モジュール116は、サーバ102により実行されると、パケット304(3)をヒストリバッファ212に追加し、これによりヒストリバッファは、ストリーミング配信されたパケット304(1)、304(2)およびストリーミング配信されるパケット304(3)を含む。
ブロック306で、圧縮モジュール116は、サーバ102により実行されると、ルックアップテーブル216を更新して、追加データ、つまりパケット304(3)を参照する。ルックアップテーブル216は、「k」を「1」から「K」までの任意のインデックスとし、複数のインデックス308(k)を含むように構成される。インデックス308(k)はそれぞれ、ルックアップテーブル216内の複数のエントリのうちのそれぞれ1つを発見するために使用される。各エントリは、複数のインデックス308(k)のうちの対応する1つがヒストリバッファ212内に置かれているかどうかを示す参照であり、もし置かれていれば、ヒストリバッファ212内の対応するインデックス308(k)の1つまたは複数の位置を示す参照となる。例えば、複数のエントリのうちの1つで、インデックス308(k)のうちの対応する1つを持つヒストリバッファ212内の複数の位置を参照することができる。複数の位置はそれぞれ、複数のハッシュチェーン310(k)のうちの対応する1つの使用を通じて説明されているように、図示されている。
例えば、インデックス308(k)は、シーケンス「4 5」を持つものとして図示されている。ルックアップテーブル216内のインデックス308(k)の対応するエントリ、つまり、ハッシュチェーン310(k)は、ヒストリバッファ212内のインデックス308(k)「4 5」の各位置を記述する。例えば、パケット304(1)は、図3では、以下のシーケンスを持つものとして図示されている。
0 1 2 3 4 5 6 7
パケット304(2)は、図3では、以下のシーケンスを持つものとして図示されている。
8 9 4 5 3 1 3 0
図2のクライアント104にストリーミング配信されるパケット304(3)は、図3では、以下のシーケンスを持つものとして図示されている。
4 5 6 7 0 8 2 4
パケット304(1)〜304(3)は、以下のシーケンスが観察されるようにヒストリバッファ内に順次配列される。
0 1 2 3 4 5 6 7 8 9 4 5 3 1 3 0 4 5 6 7 0 8 2 4
ハッシュチェーン310(k)は、ヒストリバッファ212内のインデックス308(k)「4 5」のそれぞれの位置を記述する。各位置は、さまざまな方法で記述することができる。例えば、これらの位置は、ヒストリバッファ212の先頭から数え、番号0から始めたときのシーケンスの第1のバイトの位置として記述することができる。ハッシュチェーン310(k)は、ハッシュチェーン310(k)内の「1 6」からパケット304(3)の先頭まで図3において点線で示すように、ヒストリバッファ212内のシーケンスの先頭から16バイトのところにあるインデックス308(k)「4 5」の第1の位置を記述する。同様に、ハッシュチェーン310(k)は、ハッシュチェーン310(k)内の「1 0」からパケット304(2)の第3バイトまで図3において点線で図示されている、ヒストリバッファ212内のシーケンスの先頭から10バイトのところにあるインデックス308(k)「4 5」の第2の位置を記述する。さらに、ハッシュチェーン310(k)は、ヒストリバッファ212内の4バイトのところにあるインデックス308(k)「4 5」の第3および最終の位置を含む。したがって、ルックアップテーブル216は、ヒストリバッファ212内のインデックス308(k)の各位置、例えば、4、10、16を記述するハッシュチェーン310(k)を参照する対応するエントリを持つインデックス308(k)、例えば「4 5」を含む。ルックアップテーブル216を更新することにより、圧縮モジュール116は、実行時に、図4に関して後でさらに詳しく説明するように、より効率的な方法でストリーミング配信されるデータを圧縮することができる。
各インデックス308(k)は、図3では、複数のハッシュチェーン310(k)のうちの対応する1つを持つものとして図示されているが、インデックス308(k)が対応するハッシュチェーンを持たない場合もある。例えば、場合によっては、ヒストリバッファ212がインデックスを含まないこともある。したがって、そのインデックスに対応するルックアップテーブル216内のエントリは、ハッシュチェーンを含み得ない。言い換えると、そのインデックスに対するハッシュチェーンは値0を持つ、つまり対応するインデックスを含む場所はヒストリバッファ212内にはないということである。さらに、複数のハッシュチェーン310(k)はそれぞれルックアップテーブル216内に含まれるように図示されているが、ハッシュチェーン310(k)の1つまたは複数をさまざまな方法で提供することができる。例えば、ルックアップテーブル216内の各エントリは、ルックアップテーブル216とは別の配列として構成される対応するハッシュチェーンへのポインタを含むことができる。
図4は、ストリーミング配信されるパケット304(3)への参照を含むように構成されている図3のルックアップテーブル216を使用してパケット304(3)を圧縮する例示的手順400を示す流れ図である。ブロック402で、圧縮モジュール116は、実行時に、カレントポインタ404を、図3のブロック302のヒストリバッファ212に追加されたデータ、つまりパケット304(3)のところで開始する。
ブロック406で、圧縮モジュール116は、サーバ102により実行され、カレントポインタ404が指す初期シーケンスと一致するルックアップテーブル216内のインデックスを見つける。例えば、圧縮モジュール116は、カレントポインタ404のところの2バイト、例えば「4 5」からなる初期シーケンスを使用して、その初期シーケンスと一致する複数のインデックス308(k)のうちの1つを見つけることができる。この例では、ルックアップテーブル216のインデックス308(k)「4 5」は、ヒストリバッファ212内のカレントポインタ404が指す初期シーケンス「4 5」と一致する。インデックス308(k)は、ヒストリバッファ212内のインデックス「4 5」308(k)の各位置を記述するハッシュチェーン310(k)を参照する対応するエントリをルックアップテーブル216内に持つ。したがって、その対応するエントリは、ヒストリバッファ212内の初期シーケンスの各位置を記述する。
マッチングインデックス308(k)の対応するエントリが複数の位置を参照する場合、マッチングインデックス308(k)「4 5」を有するヒストリバッファ212内の各位置のシーケンスが、カレントポインタ404が指す初期シーケンスを有するデータ内のシーケンスと比較される。例えば、カレントポインタ404、つまりヒストリバッファ212内の位置「16」のところの初期シーケンス「4 5」、およびヒストリバッファ212内の位置「10」にあるシーケンスは、長さ「2」である、つまり、各位置のバイトシーケンス内の先頭2バイトのみで一方を他方と照合する。すでに述べたように、この実施例のハッシュチェーン310(k)内の位置は、ヒストリバッファ212の先頭から番号0を先頭番号として数えることで記述される。カレントポインタ404が指す初期シーケンスおよびヒストリバッファ212内の位置「4」のシーケンスは長さ「4」である。つまり、位置「4」にあるバイトシーケンス内の4バイトは、位置「4」のところのシーケンス内の4バイトに一致する。このようにして、マッチングシーケンス「4 5 6 7」は、計算で求められた長さから導かれる。最適なマッチングシーケンスを見つけるために、図7に関してさらに詳しく説明されているように、最大長が計算で求められ、かつ/またはしきい値に達するまで、ハッシュチェーン310(k)内の各位置を、圧縮されるデータのシーケンス、つまり、パケット304(3)と比較することができる。比較を最適化するため、次のバイトはシーケンス、例えば、初期シーケンスまたはヒストリバッファ212内のインデックスの後に続く1バイトを最初に比較することができるが、それは、最初の2バイトが一致すること照合から知られているからである。シーケンス内の「次の」バイトに基づく比較のさらなる検討が、図8の関連で見出すことができる。
ブロック408で、マッチングシーケンスは、圧縮データを形成するために使用される表現で表される。例えば、パケット304(3)内のマッチングシーケンス「4 5 6 7」は、ヒストリバッファ212内のマッチングシーケンスの長さおよびマッチングシーケンスの位置を記述する表現で表すことができる。この表現は、タプル(tuple)、つまり指定された順序を持つ集まりとして形式化でき、{バックポインタ,長さ}という形式となる。バックポインタは、マッチングシーケンスの相対的位置をヒストリバッファ212内のオフセットとして記述することができる。例えば、バックポインタは、ヒストリバッファ212内におけるマッチングシーケンスの絶対的位置とカレントポインタ404の絶対的位置との間のオフセットとして相対的位置を記述することができる。この例では、マッチングシーケンスの絶対的位置は、ヒストリバッファ212内の位置4であり、カレントポインタ404の絶対的位置は、「16」である。したがって、マッチングシーケンスの相対的位置は、カレントポインタ404から12バイトのところである。長さは、マッチングシーケンスの長さを記述し、例えば「4」である。したがって、パケット304(3)を、マッチングシーケンス「4 5 6 7」を表現「{12,4}」で表すことにより圧縮し、圧縮データ、例えば、パケット410を形成することができる。他の実施例では、マッチングシーケンスの位置は、ヒストリバッファのマッチングシーケンスの絶対的位置、例えば、位置4から得られる。
こうして、ルックアップテーブル216からは、ヒストリバッファ212内の各インデックス308(k)の各位置が得られる。したがって、圧縮モジュール116が実行されると、初期シーケンスのそれぞれの位置を、マッチングシーケンスを見つけるためにヒストリバッファ212内で個々のビットまたはバイトを「尋ね歩く」ことをせずに、ヒストリバッファ212内で見つけることができる。そのため、圧縮モジュール116は、ストリーミング配信されるデータを効率よく圧縮することができる。
図5は、伸張モジュール128の実行を通じてクライアント104により図4の圧縮されたパケットを伸張する例示的な手順500を示す流れ図である。ブロック502で、クライアント104は、図4のサーバからクライアント104にストリーミング配信された、圧縮されたデータ、例えばパケット410を受け取る。
ブロック504で、伸張モジュール128は、実行時に、クライアント104のヒストリバッファ214内のマッチングシーケンスを検出する。クライアント104のヒストリバッファ214は、サーバ102のヒストリバッファ212のように、サーバ102からクライアント104へストリーミング配信されているデータを含めることができる。そのため、圧縮データ、例えばパケット410が形成される前に、クライアント104のヒストリバッファ214は、サーバ102のヒストリバッファ212と一致する。したがって、伸張モジュール118は、実行時に、サーバのヒストリバッファ212内のマッチングシーケンスの長さおよび位置を記述する表現からクライアント104のヒストリバッファ214内のマッチングシーケンスを見つけることができる。前の実施例の続きとして、マッチングシーケンス「4 5 6 7」が、位置「12」で見つかるが、それは、すでに説明したように相対的位置である。
ブロック506で、伸張モジュール118は、実行時に、この表現をマッチングシーケンスで置き換えて、データを再構成する。例えば、表現「{12,4}」は、マッチングバイトシーケンス「4 5 6 7」で置き換えられ、図4のブロック408で圧縮されたパケット304(3)のシーケンスと一致するシーケンス「4 5 6 7 0 8 2 4」を含むパケット508を形成する。例えば、圧縮データは、マッチングシーケンスの代わりに表現を含む新しいデータセットを形成することによりストリーミング配信されるデータから形成することができる。そのため、この実施例で示されるように、クライアント104は、ルックアップテーブル216を使用せずに圧縮データを伸張することができる。したがって、ストリーミング配信される圧縮データは、クライアント104がサーバ102に比べて削減されたハードウェアおよび/またはソフトウェアリソースを有する場合でも、クライアント104により伸張することができる。
図3〜4に関連してそれぞれ説明した例示的な手順300、400では、ルックアップテーブル216は、複数のインデックス308(k)のそれぞれが2バイトを含むように構成されている。したがって、ルックアップテーブル216に、ホストバッファ212内のすべての2バイトシーケンスを記述している65,536個の対応するエントリを入れることができる。これにより、ルックアップテーブル216で直接、初期シーケンスを使用することができる。つまり、初期シーケンスは、対応するエントリを発見するためにルックアップテーブル216とともに使用するように変換されないということである。2バイトを持つインデックス308(k)について説明しているが、3バイトシーケンス、4バイトシーケンスなどのさまざまな長さのインデックスを使用することができる。
図6は、ストリーミング配信されるデータを含めるためヒストリバッファ212でスライディングウィンドウが使用される一実施例600の図である。図3に関連して説明している実施例では、パケット304(3)がヒストリバッファ212に追加されている。その後、パケット304(3)を参照するために、ルックアップテーブル216が更新される。しかし、ヒストリバッファ212は、記憶容量が限れている場合がある。したがって、スライディングウィンドウを使用して、ヒストリバッファ212に新規追加データを含める。
例えば、ヒストリバッファ212は、図3のブロック302でパケット304(3)を追加した結果としてシーケンス602を含めることができる。この実施例のヒストリバッファ212は、最大で24バイト格納することができる。したがって、8バイトあるシーケンス604を追加するために、圧縮モジュール116を実行してヒストリバッファ212の先頭から8バイトあるシーケンス606を取り除き、残りのシーケンスをヒストリバッファ212の先頭に移動させる。その後、新しいシーケンス604がヒストリバッファ212の末尾に追加される。シーケンスの移動と追加により、ヒストリバッファ212には、新規追加シーケンス604を含む24バイトあるシーケンス608を有することとなる。
ルックアップテーブル216を更新してシーケンス608を反映させるために、ルックアップテーブル216内のハッシュチェーン310(k)内の各位置において、ヒストリバッファ212内でバイトのそれぞれがシフトされたバイト数に対応する数を減じることができる。例えば、この実施例では、バイトのそれぞれが8バイト分シフトされ、新しいシーケンス604用に空きが作られている。したがって、複数のハッシュチェーン310(1)〜310(K)によって記述されるそれぞれの位置は、その位置から「8」が減じられ、ヒストリバッファ212内の対応するインデックス308(k)の新しい位置を反映する。ヒストリバッファ212内にもはや含まれていないハッシュチェーン310(k)のそれぞれから位置を削除するために、0未満の値を持つ任意の位置をハッシュチェーン310(k)から削除する。
図7は、ストリーミングデータの圧縮をさらに最適化する一実施例における手順700を示す流れ図である。図3〜4に関して説明した前の手順300、400では、ルックアップテーブル216は、ヒストリバッファ212内の初期シーケンスを効率よく特定するため対応するインデックス308(k)のヒストリバッファ212内の各位置を記述するように構成されている。ヒストリバッファ212内でマッチングシーケンスを見つけることをさらに最適化して、データ圧縮の効率をさらに高めることができる。
例えば、ブロック702では、マッチングシーケンスは、ルックアップテーブルを使用し、またしきい値を使用して見つけられる。さまざまなしきい値が使用できる。例えば、マッチングシーケンスを見つけるための比較は、実行される比較の回数を制限するためヒストリバッファ内の所定の数の位置で実行するようにできる。ストリーミング配信されるデータと比較されるヒストリバッファ内の位置の数を制限することにより、位置のサイズ(例えば、バイト数)を制限することができる。例えば、すでに説明したように、ヒストリバッファ212内のマッチングシーケンスの位置は、マッチングシーケンスの先頭または末尾とカレントポインタの先頭または末尾との間の相対的位置として記述することができ、これはバックポインタにより記述することができる。したがって、実行される比較の回数を制限することにより、マッチングシーケンスは、カレントポインタの「より近く」に配置される可能性が高くなる。したがって、この「近さ」ゆえに、位置はより小さな値をもつことができ、例えば、使用するバイトをより少なくできる。他の実施例では、所定のしきい値を超える値を持つ位置を考慮しないような、またこの位置に対する値のサイズを制限する役目をすることができるようなしきい値を採用することができる。そのため、探索する位置の数、それぞれの位置を記述する値のサイズ、それぞれの配置されているシーケンスの長さを記述する値のサイズなど、さまざまなしきい値を使用することができる。
決定ブロック704で、マッチングシーケンスの位置を記述するバックポインタが最も長い間参照されていない(LRU)テーブルに含まれているかどうかに関して判別する。LRUテーブルを使用して、最も長い間参照されていないバックポインタを格納することができる。マッチングシーケンスのバックポインタがLRUテーブルに含まれている場合、LRUテーブル内のバックポインタに対応するLRU表現は、マッチングシーケンスのバックポインタを符号化するために使用される。例えば、LRUテーブルは、4つの最も長い間参照されていないバックポインタがLRUテーブルに格納されるように深さ4(depth of four)を持つことができる。LRU内のバックポインタはそれぞれ、LRUテーブルへマッピングする対応するLRU表現を有する。したがって、バックポインタがLRUテーブルに含まれている場合、その後ブロック706で、バックポインタをLRUテーブルからのLRU表現を用いて符号化することができる。このようにして、圧縮モジュールは、ストリーミングデータ内に見つけられる追加パターンを処理して、さらにデータを圧縮することができる。例えば、サーバからクライアントにストリーミング配信されるグラフィックデータは、ヒストリバッファ内の類似のオフセットで繰り返されるマッチングシーケンスを含むことができる。したがって、マッチングシーケンスは、マッチングシーケンスの長さおよび位置を含み、その位置はさらにLRU表現を使用することにより圧縮される、表現を使用して圧縮することができる。
バックポインタがLRUテーブルに含まれていない場合、次いでブロック708で、バックポインタを図2のハフマンテーブル228を使用して符号化することができる。ハフマン符号化は、さらに圧縮するそれぞれのバックポインタの出現度数を関連付ける出現度数テーブルから始めることができる。それぞれのバックポインタに、そのバックポインタを一意に表す可変長文字列が割り当てられる。例えば、それぞれの可変長文字列に一意的なプレフィクス(prefix)をもつことができる。その後、それらの文字列をツリー状に配列して、各バックポインタおよび表現をそれぞれ符号化および復号化することができる。バックポインタを符号化するために、バックポインタはツリー内に配置される。バックポインタを含む葉を特定するために使用されるツリーの枝を利用して、バイトシーケンスを符号化する、つまり、バックポインタの表現を与える。例えば、ハフマン符号化に使用されるツリーの各枝には出力アルファベットの記号、例えば、ビット0と1がマークされ、符号化は、ツリーのルートから符号化されるバックポインタまでの経路上の枝マーキングの列挙となる。各表現の復号化は、バックポインタを含むツリーの葉に到達するまで、文字列内のそれぞれの連続する値に基づき、ツリーをその原点から下へ枝を通りツリーの葉へとたどることによって実行される。
ブロック710で、マッチングシーケンスの長さも、ハフマンテーブルを使用して符号化される。例えば、図2のハフマンテーブル230を使用して、ヒストリバッファ内のマッチングシーケンスの長さを符号化し、さらにデータを圧縮することができる。長さは、バックポインタについて説明されているとおりに符号化することができる。
ブロック712で、マッチングシーケンスは、ヒストリバッファ内のマッチングシーケンスの位置およびマッチングシーケンスの長さを記述するバックポインタを含むタプルとして構成された表現により表される。ブロック714で、コスト関数を使用することにより、マッチングシーケンスに比べて、その表現がより効率的かどうか、例えば、使用されるメモリリソースが格納時により少なく、かつ/または使用される帯域幅がストリーミング配信時により小さいかを判別する。例えば、場合によっては、マッチングシーケンスに使用されるバイト数は、ヒストリバッファ内のマッチングシーケンスの位置および長さを記述する表現よりも少ない。したがって、コスト関数を使用して、表現またはマッチングシーケンス、つまり、データ内のリテラルシーケンスがより効率的かどうかを判別することができる。さまざまなコスト関数が使用できる。例えば、コスト関数は、バックポインタのサイズとマッチングシーケンスの長さのとの積を使用することができる。
決定ブロック716で、その表現がより効率的である場合、次いでブロック718で、マッチングシーケンスをその表現で表すことにより圧縮データが形成される。ブロック720で、カレントポインタが更新され、次の初期シーケンスが処理される。例えば、カレントポインタは、マッチングシーケンスの長さずつ増分され、データ内の次のシーケンスについてこの手順を繰り返すことができる。ストリーミング配信するデータを通じてカレントポインタが増分されると、圧縮データは、クライアントにストリーミング配信される。
決定ブロック716で、表現があまり効率的でない場合、ブロック722で、マッチングシーケンスはすでに説明したようにハフマンテーブルを使用して表される。ブロック720で、カレントポインタは、マッチングシーケンス内のバイト数ずつ増分され、次のシーケンスについてこの手順が続いて行われる。
すでに説明しているように、ハフマンテーブルにより、ストリーミング配信されるデータをさらに圧縮することができる。バックポインタ、長さ、およびリテラルシーケンスをそれぞれ符号化するための3つのハフマンテーブルを説明してきた。他の実施例では、ハフマンテーブルを組み合わせることができる。例えば、図2に示されるように、ハフマンテーブル228を使用して、リテラル232バイトシーケンスおよびバックポインタ234を符号化することができる。圧縮ストリーム内のバックポインタとリテラルシーケンスとを区別するために、バックポインタおよびリテラルシーケンスに、それぞれの一意的なプレフィクスを与えることができ、例えば、それぞれのバックポインタがビット「0」から始まり、それぞれのリテラルシーケンスがビット「1」から始まるようにすることができる。他の実施例では、統一インデックスコード(unified index code)を使用して、バックポインタおよびリテラルシーケンスがそれぞれ異なる文字を有するように、リテラルシーケンスとバックポインタの両方を単一のアルファベットに組み合わせることにより、リテラルシーケンスとバックポインタの両方を符号化することができる。
すでに説明してあるハフマンテーブルなどの符号化テーブルは、さまざまな方法で提供することができる。例えば、一実施例では、ストリーミング配信されるデータのパケット毎に符号化テーブルを計算する必要がないように、符号化テーブルを圧縮モジュールおよび伸張モジュールが使用するためにあらかじめ構成しておく。これを使用することにより、暗号化プロセスの速度を高めることができる。他の実施例では、符号化テーブルは、所定の間隔で動的に計算される。例えば、符号化テーブルは、所定の数のパケットを受信し符号化テーブルを更新する毎に再計算されるようにしてもよい。
図8は、データ圧縮をさらに最適化するためにシーケンスの比較が最適化される一実施例800の図である。前述同様に、サーバ102は、ヒストリバッファ212およびルックアップテーブル216を備える。サーバ102は、圧縮モジュール116を実行して、パケット304(3)を圧縮する。ヒストリバッファ212の先頭から最初の2バイトが同じである最も右側のシーケンスの先頭までのオフセットを、i1=HASH[HASH_SUM(s)]と表すことができる。示されている実施例では、「s」は「4 5」に等しく、ヒストリバッファ212の先頭から数えゼロから始める場合、i1=10である。ヒストリバッファ212の先頭から次に最も右側のシーケンスまでの次のオフセットは、i2=NEXT[i1]と表すことができる。図8に示されている実施例では、ハッシュチェーン802(k)内でi2=NEXT[10]=4である。同様に、ヒストリバッファ212の先頭からの続く各オフセットは、i3=NEXT[i2]などハッシュチェーン802(k)内で表すことができる。示されている実施例では、「4 5」を含むヒストリバッファ212内にはほかにシーケンスがないためi3=0である。
圧縮モジュール116は、実行時に、ヒストリバッファ212内の位置16にある「4 5」から始まるパケット304(3)を圧縮する手順を開始することができる。圧縮モジュール116は、まず、ハッシュチェーン802(k)の位置i1=HASH[HASH_SUM (’4’,’5’)]=10から初期シーケンス「4 5」を含むシーケンスをヒストリバッファ212内で特定することができる。この位置は記憶され、NEXT[16]は10に設定され、HASH[HASH_SUM(’4’,’5’)]は16に設定される。シーケンスは、最初にそれぞれのシーケンス内で次に続くバイトを比較することによって、現在位置(16)および位置i1(10)で、一方を他方と比較される。この場合、パケット304(3)内の第3バイトとパケット304(2)内の第5バイトとを比較して、一致を見つける。示されている実施例では、HISTORY[10+3]=’3’およびHISTORY[16+3]=’6’であるため、次に続くバイト(つまり、それぞれのシーケンス内の3番目のバイト)は異なる。したがって、期待されるマッチングシーケンスの長さは2のままであり、期待されるマッチングシーケンスの位置は10のままである。
その後、圧縮モジュール116は、ルックアップテーブル216から位置i2=NEXT[i1]=4にある、ヒストリバッファ212内の次のシーケンスを特定することができる。i2はゼロに等しくないため、少なくとも2つのバイトの一致がある。それぞれのバイト「4 5」に続く次のバイトが前のように比較され、結果的に4バイトの一致が得られる。したがって、期待されるマッチングシーケンスの長さは4に設定され、期待されるマッチングシーケンスの位置は4に設定される。その後、圧縮モジュール116は、ハッシュチェーン802(k)から位置i3=NEXT[i2]=0にある、ヒストリバッファ212内の他のシーケンスを特定することができる。i3はゼロに等しいため、それはハッシュチェーン802(k)の末尾であり、他の位置は比較されない。一実施例では、圧縮モジュール116は、ハッシュチェーン802(k)の末尾を特にはチェックしないことに留意されたい。その代わりに、位置「i0」(図8に示す例では16)、NEXT[0]にあるシーケンスはi0に等しく設定される。したがって、ハッシュチェーン802(k)の末尾(iN=NEXT[i{N−1}]=0)に到達したときに、チェックされ、圧縮モジュール116はi{N+1}=NEXT[iN]=i0に進む。
期待されるマッチングシーケンスの長さの後の続く「次の」バイトを比較することにより、比較速度を改善することができる。例えば、前の実施例では、HISTORY[i0+MatchLength]はHISTORY[i0+MatchLength]と比較された。ヒストリバッファ212内に比較すべき他のシーケンスがない場合、それぞれの位置にあるシーケンス全体の比較が実行される。つまり、ヒストリバッファ212内のそれぞれの位置にあるそれぞれのシーケンス内で、各バイトについて一方が他方と比較される。シーケンス全体の比較が成功すると、マッチングシーケンスが導かれる。このようにして、ヒストリバッファ212内のシーケンスの比較において、かなりのスピードアップを得ることができる。
図9は、システムから受け取ったフィードバックに応じて圧縮が動的にチューニングされる一実施例におけるシステム900の図である。ネットワーク上のサーバ102とクライアント104間の通信は、さまざまなファクタにより変化する場合がある。例えば、クライアント104では、ソフトウェアおよび/またはハードウェアリソースの制限があり、クライアント104でのデータの伸張は、サーバ102での圧縮よりも時間が長くかかる場合がある。他の実施例では、サーバ102は、データを複数のクライアントに供給するので、クライアントは、サーバ102がそれらのクライアントのそれぞれのためにデータを圧縮できる速度よりも、高速にデータを伸張することができる。すでに説明した圧縮パラメータの1つまたは複数をチューニングすることにより、サーバ102とクライアント104のハードウェアおよび/またはソフトウェアリソースならびにそれらを通信可能に接続するネットワーク106のリソースを考慮に入れ、サーバ102とクライアント104間の通信を最適化することができる。例えば、サーバ102がクライアント104に圧縮データを送信するのを「待機している」場合、サーバ102は、追加圧縮計算を実行して、さらにデータを圧縮することができる。
RDP 112の圧縮モジュール116のパラメータをチューニングするために、フィードバックを求める。さまざまなファクタをフィードバックとして使用し、一般的なネットワーク特性などの圧縮パラメータをチューニングすることができる。例えば、圧縮モジュール116が、低速なリンクであるためネットワークの逆圧(backpressure)が生じていることを示すネットワークレイヤからの情報を使用して、さらにデータを圧縮するにはさらに時間がかかることを示すことができる。したがって、逆圧がある場合、最終的な出力サイズの削減のためデータの圧縮にさらに時間をかけるように、圧縮モジュール116を動的にチューニングすることができる。
他の実施例では、RDP 112は、ヒストリバッファ904(1)、…、904(h)、…、904(H)の固定プール902を利用することができる。データを送信しなければならない上位レイヤは、プール902にバッファ(例えば、バッファ904(h))を要求すること(割り当てること)、バッファ904(h)にデータを埋め込むこと(データを圧縮することを含む)、その後圧縮されたデータをクライアント104に送信することで動作する。バッファ904(h)は、バッファのコンテンツが送信されている場合のみ、プール902に戻される、つまり「解放される」。この技術により、RDP 112、より具体的には圧縮モジュール116は、バッファを「解放して」バッファプールに戻すのに要する時間の長さに基づいて、ネットワーク接続が低速であるか、または高速であるか(例えば、帯域幅の大きさ)、クライアントが低速であるか、または高速であるか(例えば、クライアントがデータを伸張するのに要する時間)などに関するフィードバック、つまり逆圧情報(backpressure information)を取得することができる。
さらに他の実施例では、プール902のバッファ904(1)〜904(H)のどれもが使用できない場合、圧縮にさらに時間をかけるようにさまざまな圧縮しきい値をチューニングすることにより、圧縮モジュール116を「いっそう働く」ように適合させることができる。いったんネットワーク状態が改善されたら、圧縮モジュール116をチューニングして、データの送出がさらに速くなるように圧縮動作回数を減らすこともできる。例えば、ネットワーク106に使用可能な帯域幅がかなりある場合、データ通信にかかる時間を短縮する必要がないため、実行される圧縮動作の回数を減らすことができる。このように、変動するネットワーク状態に基づき実行時に圧縮パラメータが変更されるように動的な技術を採用することができる。他の実施例では、ネットワーク速度の初期測定を利用してパラメータをチューニングし、その後、これらのパラメータをセッション全体で使用する。
すでに述べたように、圧縮モジュール116のチューニングに使用されるファクタについては、サーバ102のハードウェアおよび/またはソフトウェアリソースも考慮に入れることできる。例えば、サーバ102上の負荷を考慮に入れることができ(例えば、どれくらいのアクティブセッションがサーバ102により提供されているか、図2のプロセッサ202上の負荷など)、圧縮の強さを動的にチューニングし、圧縮でCPUをあまり使わないことにより補償することができる。チューニングできる圧縮パラメータの一例として、検索ウィンドウのサイズがある。例えば、検索ウィンドウのサイズを64Kから512Kまででチューニングすることができる。ウィンドウのサイズを大きくすると、相対的圧縮度が高くなるが、実行が遅くなることがある。したがって、ネットワークが低速であるとみなされる場合には、大きなウィンドウに「切り換える」と都合がよい。
圧縮モジュール116をチューニングするために使用されるファクタの他の例では、一致を探すためにトラバースされるハッシュチェーン内のリンクの数をチューニングすることができる。例えば、長いチェーンリンクを辿ると、より長い一致が見つかる確率が高まるが、照合を実行するのに追加のハードウェアおよび/またはソフトウェアリソースのコストがかかる場合がある。
圧縮モジュール116をチューニングするために使用されるファクタのさらなる例は、検索を終了するために見つかった最長一致を指定するしきい値である。すでに説明しているように、しきい値を使用することにより、一致を見つけるために実行される検索の回数を制限することができる。このしきい値が大きいほど、より長い一致が見つかる確率が高まり、したがってデータの圧縮がさらに行われる。しかし、この検索を実行する場合、さらに多くの処理リソースが使用される場合もある。さまざまなファクタおよびパラメータについて説明してきたが、他のさまざまなファクタおよびパラメータも、本明細書で説明したように使用することができる。
本発明を、構造的特徴および/または方法論的動作に固有の専門用語で説明してきたが、添付の特許請求の範囲で規定する本発明は、説明した特定の機能または動作に必ずしも限定されるものではないことを理解されたい。むしろ、特定の機能および動作は、請求する本発明の例示的な実施形態として開示している。
データがネットワーク経由でサーバからクライアントへストリーミング配信される環境を示す一実施例の図である。 図1のサーバおよびクライアントをさらに詳細に示している一実施例の図である。 ストリーミング配信するデータを圧縮用に構成する例示的な手順を示す流れ図である。 ストリーミング配信されるパケットへの参照を含むように構成されている図3のルックアップテーブルを使用してパケットを圧縮する例示的な手順を示す流れ図である。 伸張モジュールを実行することを通じてクライアントにより図4の圧縮されたパケットを伸張する一実施例の手順を示す流れ図である。 ストリーミング配信されるデータを含めるためヒストリバッファにおいてスライディングウィンドウが使用される一実施例の図である。 ストリーミングデータの圧縮をさらに最適化する一実施例の手順を示す流れ図である。 データ圧縮をさらに最適化するためにシーケンスの比較が最適化される一実施例の図である。 システムから受け取ったフィードバックに応じて圧縮が動的にチューニングされる一実施例のシステムの図である。
符号の説明
102 サーバ
104 クライアント
106 ネットワーク
108(1),108(n),108(N) アプリケーション
116 圧縮モジュール
118 伸張モジュール
120(1),120(m),120(M) アプリケーション
202 プロセッサ
204,208 メモリ
206 プロセッサ
210 入力デバイス
212,214 ヒストリバッファ
216 ルックアップテーブル
218 ハフマンテーブル
220,228,230 ハフマンテーブル
222 リテラルバイト
224 バックポインタ値
226 一致長
232 リテラル
236,238 LRUテーブル
234 バックポインタ

Claims (46)

  1. データ内の初期シーケンスと一致する、ルックアップテーブル内のインデックスを見つけるステップであって、
    前記ルックアップテーブルは、複数のエントリを含み、前記エントリのそれぞれは複数の前記インデックスのうちの特定の1つを使用して発見可能であり、
    前記エントリのそれぞれは、対応する前記インデックスがヒストリバッファ内に置かれているかどうかを示す参照であり、もし置かれていれば、さらに、前記ヒストリバッファ内の前記対応する前記インデックスの1つまたは複数の位置を示す参照となるステップと、
    前記マッチングインデックスの前記対応する前記エントリが複数の前記位置を示す参照である場合、
    前記位置毎に、前記マッチングインデックスを持つ前記位置にあるシーケンスと前記データ内の前記初期シーケンスを含むシーケンスとを比較するステップと、
    前記位置のそれぞれの前記シーケンスの長さと前記位置の少なくとも1つに基づき前記比較からマッチングシーケンスを導くステップと、
    前記ヒストリバッファ内の前記マッチングシーケンスの前記長さおよび前記位置を含む表現を使用して前記マッチングシーケンスを表すステップとを行うステップとによってターミナルサービス環境において通信を行うためにデータを圧縮するステップを備えることを特徴とする方法。
  2. 前記データ内の前記シーケンスのそれぞれについて前記ルックアップテーブル内の前記インデックスの1つを見つけるステップと、
    1つまたは複数の前記表現を含む圧縮データを形成するステップと、
    前記圧縮データをストリーミング配信するステップとをさらに備えることを特徴とする請求項1に記載の方法。
  3. 前記マッチングインデックスの前記対応する前記エントリは、前記ヒストリバッファ内の前記マッチングインデックスの前記位置のそれぞれを含むハッシュチェーンを参照することを特徴とする請求項1に記載の方法。
  4. 前記初期シーケンスおよび前記インデックスは、それぞれ、少なくとも2バイトからなることを特徴とする請求項1に記載の方法。
  5. 前記表現を含む圧縮データを形成するステップと、
    1つまたは複数のパケットとして形成された前記圧縮データをネットワーク経由でストリーミング配信するステップとをさらに備えることを特徴とする請求項1に記載の方法。
  6. ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術を使用して前記表現の前記長さおよび前記位置のうちの少なくとも1つを符号化するステップをさらに備えることを特徴とする請求項1に記載の方法。
  7. 前記マッチングインデックスの前記対応する前記エントリが前記位置をどれも参照しない場合に、ハフマン符号化により前記初期シーケンスを符号化するステップと、
    前記マッチングインデックスの前記対応する前記エントリが単一の前記位置を参照する場合に、
    前記マッチングインデックスを持つ前記単一の前記位置のシーケンスと前記データ内の前記シーケンスとを比較するステップと、
    前記単一の前記位置の前記シーケンスの長さと前記位置の少なくとも1つに基づき前記比較からマッチングシーケンスを導くステップと、
    前記ヒストリバッファ内の前記マッチングシーケンスの前記長さおよび前記単一の前記位置を含む表現を使用して前記マッチングシーケンスを表すステップとを行うステップと、
    前記データの前記シーケンスのそれぞれが表現で表されるまたは符号化されるときに、前記符号化または前記表現を有する前記データをストリーミング配信するステップとを含むこと特徴とする請求項1に記載の方法。
  8. 前記マッチングシーケンスを導くための前記比較は、
    比較される前記マッチングインデックスを持つ前記位置の数と、
    前記マッチングインデックスを持つ前記位置のそれぞれを記述する値のサイズと、
    前記マッチングインデックスを含む前記データ内の前記シーケンスと一致する前記位置のそれぞれでの前記シーケンスの長さを記述する値のサイズとからなるグループから選択された1つまたは複数のしきい値を使用して実行されることを特徴とする請求項1に記載の方法。
  9. コスト関数を使用して、前記表現が、格納時に前記マッチングシーケンスよりも少ないメモリが使用するかどうかを判別し、もしより少ないメモリを使用するならば、前記表現を含む圧縮データを形成するステップをさらに備えることを特徴とする請求項1に記載の方法。
  10. 前記マッチングシーケンスの前記位置がLRU(最も長い間参照されていない)テーブル内の複数の位置のうちの1つと一致しているかどうかを判別するステップであって、
    前記LRUテーブル内の前記位置のそれぞれは対応するLRU表現を持ち、
    前記LRUテーブル内の前記位置のそれぞれは、すでにストリーミング配信されているデータ内のシーケンスの最も長い間参照されていない複数の位置のうちの1つを記述し、
    前記マッチングシーケンスの前記位置が前記LRUテーブルに含められる場合、前記マッチングシーケンスの前記位置は、前記LRUテーブルからの対応する前記LRU表現で符号化されるステップをさらに備えることを特徴とする請求項1に記載の方法。
  11. 実行時に請求項1に記載の方法を実行させるコンピュータ実行可能命令を備える1つまたは複数のコンピュータ読み取り可能な媒体。
  12. データをヒストリバッファに追加するステップと、
    追加されたデータを含めるために前記ヒストリバッファを参照するルックアップテーブルを更新するステップであって、
    前記ルックアップテーブルは、複数のエントリを含み、前記エントリのそれぞれは複数のインデックスのうちの特定の1つを使用して発見可能であり、
    前記エントリのそれぞれは、対応する前記インデックスがヒストリバッファ内に置かれているかどうかを示す参照であり、もし置かれていれば、さらに、前記ヒストリバッファ内の前記対応する前記インデックスの1つまたは複数の位置を示す参照となるステップと、
    前記ヒストリバッファ内の前記追加されたデータのところからカレントポインタを開始するステップと、
    前記カレントポインタが指している初期シーケンスと一致する前記ルックアップテーブル内の前記インデックスの1つを見つけるステップと、
    前記マッチングインデックスの前記対応する前記エントリが複数の前記位置を示す参照である場合、
    前記マッチングインデックスを持つ前記位置のそれぞれのシーケンスと前記初期シーケンスを含む前記追加された入力データ内のシーケンスとを比較するステップと、
    前記比較からマッチングシーケンスを導くステップと、
    前記ヒストリバッファ内の前記マッチングシーケンスの前記位置および長さを含む表現を使用して前記マッチングシーケンスを表すステップと、
    コスト関数を使用して、前記表現が格納時に前記マッチングシーケンスよりも少ないメモリを使用するかどうかを判別し、
    もしより少ないメモリを使用するならば、前記表現を含むようにデータを構成し、前記マッチングシーケンスの前記長さだけ前記カレントポインタを進め、
    もしそうでなければ、前記初期シーケンスを含むようにデータを構成し、前記初期シーケンスの前記長さだけ前記カレントポインタを進めるステップと、
    前記カレントポインタが前記追加されたデータを通して進んだときに、ストリーミング配信用に前記構成されているデータをパケット化するステップとにより、ターミナルサービス環境において通信のためにデータを圧縮するステップを備えることを特徴とする方法。
  13. ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術を使用して前記表現の前記長さおよび前記位置のうちの少なくとも1つを符号化するステップをさらに備えることを特徴とする請求項12に記載の方法。
  14. 前記カレントポインタが指す前記初期シーケンスが前記ヒストリバッファ内のどのシーケンスとも一致しない場合、前記カレントポインタが指す前記初期バイトシーケンスは、
    ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術を用いてストリーミング配信のため構成されたデータに含まれるように符号化されることを特徴とする請求項12に記載の方法。
  15. 前記マッチングシーケンスの前記位置がLRU(最も長い間参照されていない)テーブル内の複数の位置のうちの1つと一致しているかどうかを判別するステップであって、
    前記LRUテーブル内の前記位置のそれぞれは対応するLRU表現を持ち、
    前記LRUテーブル内の前記位置のそれぞれは、すでにストリーミング配信されているデータ内のシーケンスの最も長い間参照されていない複数の位置のうちの1つを記述し、
    前記マッチングシーケンスの前記位置が前記LRUテーブルに含まれている場合、前記マッチングシーケンスの前記位置は、前記LRUテーブルからの対応する前記LRU表現で符号化されるステップをさらに備えることを特徴とする請求項12に記載の方法。
  16. 実行時に請求項12に記載の方法を実行させるコンピュータ実行可能命令を備える1つまたは複数のコンピュータ読み取り可能な媒体。
  17. サーバによってクライアントに提供されるターミナルサービスからネットワーク経由でデータを通信するためのリソースの使用可能性を示すフィードバックを受け取るステップと、
    前記フィードバックに応じて前記データを圧縮するために使用される圧縮ルーチンの1つまたは複数のパラメータをチューニングするステップとを備えることを特徴とする方法。
  18. 前記リソースは、
    前記クライアントのハードウェアリソースと、
    前記クライアントのソフトウェアリソースと、
    前記ネットワークのネットワークリソースと、
    前記サーバのハードウェアリソースと、
    前記サーバのソフトウェアリソースと、
    前記リソースの任意の組み合わせからなるグループから選択されることを特徴とする請求項17に記載の方法。
  19. 実行時に請求項17に記載の方法を実行させるコンピュータ実行可能命令を備える1つまたは複数のコンピュータ読み取り可能な媒体。
  20. サーバを通じて利用可能なアプリケーションまたはファイルへのリモートアクセスのためにクライアントから、サーバで要求を受け取るステップと、
    ネットワーク経由で、前記要求に応じてデータを通信するためのリソースの使用可能性を判別するステップと、
    前記判別された使用可能性に基づいて前記データを圧縮するために使用される圧縮プロトコルの1つまたは複数のパラメータをチューニングするステップとを備えることを特徴とする方法。
  21. 前記リソースは、
    前記クライアントのハードウェアリソースと、
    前記クライアントのソフトウェアリソースと、
    前記ネットワークのネットワークリソースと、
    前記サーバのハードウェアリソースと、
    前記サーバのソフトウェアリソースと、
    前記リソースの任意の組み合わせからなるグループから選択されることを特徴とする請求項20に記載の方法。
  22. 実行時に請求項20に記載の方法を実行させるコンピュータ実行可能命令を備える1つまたは複数のコンピュータ読み取り可能な媒体。
  23. 複数のバイトを有するヒストリバッファと、
    複数のエントリを含むルックアップテーブルであって、前記エントリのそれぞれが、
    複数のインデックスのうちの特定の1つを使用して発見可能であり、
    対応する前記インデックスが前記ヒストリバッファ内に置かれているかどうかを示す参照であり、もし置かれていれば、さらに、前記ヒストリバッファ内の前記対応する前記インデックスの1つまたは複数の位置を示す参照となる、ルックアップテーブルと、
    圧縮モジュールであって、
    ターミナルサービスからクライアントへ通信するデータ内の初期シーケンスと一致するルックアップテーブル内の1つのインデックスシーケンスを見つけ、
    前記マッチングインデックスの前記対応する前記エントリが複数の前記位置の参照である場合、
    前記位置毎に、前記マッチングインデックスを持つ前記位置にあるシーケンスと前記データ内の、前記初期シーケンスを含むシーケンスとを比較し、
    前記位置のそれぞれの前記シーケンスの長さと前記位置の少なくとも一方に基づき前記比較からマッチングシーケンスを導き、
    前記ヒストリバッファ内の前記マッチングシーケンスの前記長さおよび前記位置を含む表現を使用して前記マッチングシーケンスを表すことを実行可能な圧縮モジュールとを備えることとを特徴とするサーバ。
  24. 前記圧縮モジュールは、さらに、
    前記データ内の前記シーケンスのそれぞれについて前記ルックアップテーブル内の前記インデックスの1つを見つけ、
    1つまたは複数の前記表現を含む圧縮データを形成し、
    前記圧縮データをストリーミング配信することを実行可能であることを特徴とする請求項23に記載のサーバ。
  25. 前記マッチングインデックスの前記対応する前記エントリは、前記ヒストリバッファ内の前記マッチングインデックスの前記位置のそれぞれを含むハッシュチェーンを参照することを特徴とする請求項23に記載のサーバ。
  26. 前記初期シーケンスおよび前記インデックスは、それぞれ、少なくとも2バイトからなることを特徴とする請求項23に記載のサーバ。
  27. 前記圧縮モジュールは、さらに、
    前記表現を含む圧縮データを形成し、
    1つまたは複数のパケットとして形成された前記圧縮データをネットワーク経由でストリーミング配信するためにパケット化することを実行可能であることを特徴とする請求項23に記載のサーバ。
  28. 前記圧縮モジュールは、さらに、
    ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術により前記表現の前記長さおよび前記位置のうちの少なくとも1つを符号化することを実行可能であることを特徴とする請求項23に記載のサーバ。
  29. 前記圧縮モジュールは、さらに、前記マッチングインデックスの前記対応する前記エントリが前記位置をどれも参照していない場合に、
    ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術により、前記初期シーケンスを符号化することを実行可能であることを特徴とする請求項23に記載のサーバ。
  30. 前記マッチングシーケンスを導くための前記比較は、
    比較される前記マッチングインデックスを持つ前記位置の数と、
    前記マッチングインデックスを持つ前記位置のそれぞれを記述する値のサイズと、
    前記マッチングインデックスを含む前記データ内の前記シーケンスと一致する前記位置のそれぞれでの前記シーケンスの長さを記述する値のサイズとからなるグループから選択された1つまたは複数のしきい値を使用して実行されることを特徴とする請求項23に記載のサーバ。
  31. 前記圧縮モジュールは、さらに、コスト関数を使用して前記表現が格納時に前記マッチングシーケンスよりも少ないメモリを使用するかどうかを判別し、もしより少ないメモリを使用するならば、前記表現を含む圧縮データを形成することを実行可能であることを特徴とする請求項23に記載のサーバ。
  32. 前記圧縮モジュールは、さらに、前記マッチングシーケンスの前記位置が最もLRU(長い間参照されていない)テーブル内の複数の位置のうちの1つと一致しているかどうかを判別することを実行可能であり、
    前記LRUテーブル内の前記位置のそれぞれは対応するLRU表現を持ち、
    前記LRUテーブル内の前記位置のそれぞれは、すでにストリーミング配信されているデータ内のシーケンスの最も長い間参照されていない複数の位置のうちの1つを記述し、
    前記マッチングシーケンスの前記位置が前記LRUテーブルに含まれている場合、前記マッチングシーケンスの前記位置は、前記LRUテーブルからの対応する前記LRU表現で符号化されることを特徴とする請求項23に記載のサーバ。
  33. ネットワークと、
    サーバであって、
    複数のバイトを有する第1のヒストリバッファと、
    複数のエントリを含むルックアップテーブルであって、前記エントリのそれぞれは複数のインデックスのうちの特定の1つを使用して発見可能であり、前記エントリのそれぞれは対応する前記インデックスが前記ヒストリバッファ内に置かれているかを示す参照であり、もし置かれていれば、前記ヒストリバッファ内の前記対応する前記インデックスの1つまたは複数の位置を示す参照である、ルックアップテーブルと、
    圧縮モジュールであって、
    リモートアクセスの要求に応じてストリーミング配信されるデータ内のカレントポインタが指す初期シーケンスと一致する前記ルックアップテーブル内の前記インデックスの1つを見つけ、
    前記マッチングインデックスの前記対応する前記エントリが1つまたは複数の前記位置を参照している場合、
    前記マッチングインデックスを持つ前記位置のそれぞれのシーケンスと前記カレントポインタが指す前記データ内のシーケンスとを比較し、
    前記比較からマッチングシーケンスを導き、
    前記第1のヒストリバッファ内の前記マッチングシーケンスの前記位置および長さを含む表現を含むようにデータを構成して、前記マッチングシーケンスの前記長さだけ前記カレントポインタを進め、
    前記マッチングインデックスの前記対応する前記エントリが前記位置をどれも参照していない場合、前記初期シーケンスを含むようにデータを構成して、前記初期シーケンスの長さだけ前記カレントポインタを進め、
    前記カレントポインタが前記追加データを通して進めたときに、前記ネットワーク経由で前記構成されたデータをストリーミング配信することを実行可能な圧縮モジュールとを備えるサーバと、
    前記ネットワークに通信可能に接続され、第2の前記ヒストリバッファおよび、前記表現により示される前記位置および前記長さに基づいて前記第2の前記ヒストリバッファ内の前記マッチングシーケンスを見つけることにより前記ストリーミング配信データを伸張することを実行可能な伸張モジュールを備えるクライアントとを備えることを特徴とするシステム。
  34. 前記伸張モジュールは、さらに、伸張されたデータを前記第2のヒストリバッファに追加することをクライアントにより実行可能であることを特徴とする請求項33に記載のシステム。
  35. 前記圧縮モジュールは、さらに、
    ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術により前記表現の前記長さおよび前記位置のうちの少なくとも1つを符号化することを前記サーバにより実行可能であることを特徴とする請求項33に記載のシステム。
  36. 前記マッチングインデックスの前記対応する前記エントリが前記位置をどれも参照していない場合に、前記圧縮モジュールは、さらに、
    ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術により、前記初期シーケンスを符号化することを実行可能であることを特徴とする請求項33に記載のシステム。
  37. 前記圧縮モジュールは、さらに、前記マッチングシーケンスの前記位置がLRL(最も長い間参照されていない)テーブル内の複数の位置のうちの1つと一致しているかどうかを判別することを前記サーバにより実行可能であり、
    前記LRUテーブル内の前記位置のそれぞれは対応するLRU表現を持ち、
    前記LRUテーブル内の前記位置のそれぞれは、すでにストリーミング配信されているデータ内のシーケンスの最も長い間参照されていない複数の位置のうちの1つを記述し、
    前記マッチングシーケンスの前記位置が前記LRUテーブルに含まれている場合、前記マッチングシーケンスの前記位置は、前記LRUテーブルからの対応する前記LRU表現で符号化されることを特徴とする請求項33に記載のシステム。
  38. コンピュータ実行可能命令を備えるコンピュータ読み取り可能な媒体であって、コンピュータにより実行されると、
    クライアントにストリーミング配信するデータである、前記クライアントからリモートで実行されているアプリケーションのユーザインターフェイスを生成するためのデータの中の初期シーケンスと一致するルックアップテーブル内のインデックスを見つけるステップであって、
    前記ルックアップテーブルは、複数のエントリを含み、前記エントリのそれぞれは、複数の前記インデックスのうちの特定の1つを使用して発見可能であり、
    前記エントリのそれぞれは、対応する前記インデックスがヒストリバッファ内に置かれているかどうかを示す参照であり、もし置かれていれば、さらに、前記ヒストリバッファ内の前記対応する前記インデックスの1つまたは複数の位置を示す参照となるステップと、
    前記マッチングインデックスの前記対応する前記エントリが複数の前記位置を示す参照である場合、
    前記位置毎に、前記マッチングインデックスを持つ前記位置にあるシーケンスと前記データ内の、前記初期シーケンスを含むシーケンスとを比較し、
    前記比較から、前記マッチングシーケンスの長さを計算するステップとをコンピュータに指示することを特徴とするコンピュータ読み取り可能な媒体。
  39. 前記コンピュータ実行可能命令は、前記長さおよび前記位置を含む表現を使用して前記マッチングシーケンスを表すよう前記コンピュータに指示することを特徴とする請求項38に記載のコンピュータ読み取り可能な媒体。
  40. 前記マッチングインデックスの前記対応する前記エントリは、前記ヒストリバッファ内の前記マッチングインデックスの前記位置のそれぞれを含むハッシュチェーンを参照することを特徴とする請求項38に記載のコンピュータ読み取り可能な媒体。
  41. 前記初期シーケンスおよび前記インデックスは、それぞれ、少なくとも2バイトからなることを特徴とする請求項38に記載のコンピュータ読み取り可能な媒体。
  42. 前記コンピュータ実行可能命令は、
    ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術により前記長さおよび前記位置のうちの少なくとも1つを符号化するよう前記コンピュータに指示することを特徴とする請求項38に記載のコンピュータ読み取り可能な媒体。
  43. 前記コンピュータ実行可能命令は、前記マッチングインデックスの前記対応する前記エントリが前記位置をどれも参照していない場合に、
    ハフマン符号化と、
    算術符号化と、
    プレフィクス符号化と、
    マルコフ符号化とからなるグループから選択された符号化技術により、前記初期シーケンスを符号化するよう前記コンピュータに指示することを特徴とする請求項38に記載のコンピュータ読み取り可能な媒体。
  44. 前記比較は、
    比較される前記マッチングインデックスを持つ前記位置の数と、
    前記マッチングインデックスを持つ前記位置のそれぞれを記述する値のサイズと、
    前記マッチングインデックスを含む前記データ内の前記シーケンスと一致する前記位置のそれぞれでの前記シーケンスの長さを記述する値のサイズとからなるグループから選択された1つまたは複数のしきい値を使用して実行されることを特徴とする請求項38に記載のコンピュータ読み取り可能な媒体。
  45. 前記コンピュータ実行可能命令は、コスト関数を使用して、前記マッチングシーケンスの前記長さおよび前記位置を含む表現が格納時に前記マッチングシーケンスよりも少ないメモリを使用するかどうかを判別し、もし少ないならば、前記表現を含む圧縮データを形成するよう前記コンピュータに指示することを特徴とする請求項38に記載のコンピュータ読み取り可能な媒体。
  46. 前記コンピュータ実行可能命令は、前記マッチングシーケンスの前記位置がLRU(最も長い間参照されていない)テーブル内の複数の位置のうちの1つと一致しているかどうかを判別するように前記コンピュータに指示する命令であって、
    前記LRUテーブル内の前記位置のそれぞれは対応するLRU表現を持ち、
    前記LRUテーブル内の前記位置のそれぞれは、すでにストリーミング配信されているデータ内のシーケンスの最も長い間参照されていない複数の位置のうちの1つを記述し、
    前記マッチングシーケンスの前記位置が前記LRUテーブルに含まれている場合、前記マッチングシーケンスの前記位置は、前記LRUテーブルからの対応する前記LRU表現で符号化されることを特徴とする請求項38に記載のコンピュータ読み取り可能な媒体。
JP2005028194A 2004-03-15 2005-02-03 データ圧縮 Pending JP2005269618A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/801,329 US7966424B2 (en) 2004-03-15 2004-03-15 Data compression

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2011180783A Division JP2012019532A (ja) 2004-03-15 2011-08-22 データ圧縮

Publications (1)

Publication Number Publication Date
JP2005269618A true JP2005269618A (ja) 2005-09-29

Family

ID=34838883

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2005028194A Pending JP2005269618A (ja) 2004-03-15 2005-02-03 データ圧縮
JP2011180783A Pending JP2012019532A (ja) 2004-03-15 2011-08-22 データ圧縮

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2011180783A Pending JP2012019532A (ja) 2004-03-15 2011-08-22 データ圧縮

Country Status (10)

Country Link
US (1) US7966424B2 (ja)
EP (1) EP1578019A3 (ja)
JP (2) JP2005269618A (ja)
KR (1) KR20050092343A (ja)
CN (1) CN1671103B (ja)
AU (1) AU2005200349A1 (ja)
BR (1) BRPI0500301A (ja)
CA (1) CA2496067A1 (ja)
MX (1) MXPA05001846A (ja)
RU (1) RU2377670C2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010539606A (ja) * 2007-09-14 2010-12-16 マイクロソフト コーポレーション データ依存チャンキングを使用する最適化されたデータストリーム圧縮
WO2012161838A3 (en) * 2011-03-30 2013-04-04 Chevron U.S.A. Inc. System and method for computations utilizing optimized earth model representations

Families Citing this family (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050234927A1 (en) * 2004-04-01 2005-10-20 Oracle International Corporation Efficient Transfer of Data Between a Database Server and a Database Client
US20070005911A1 (en) * 2005-07-01 2007-01-04 Nec Laboratories America, Inc. Operating System-Based Memory Compression for Embedded Systems
US8171238B1 (en) 2007-07-05 2012-05-01 Silver Peak Systems, Inc. Identification of data stored in memory
US8370583B2 (en) 2005-08-12 2013-02-05 Silver Peak Systems, Inc. Network memory architecture for providing data based on local accessibility
US8095774B1 (en) 2007-07-05 2012-01-10 Silver Peak Systems, Inc. Pre-fetching data into a memory
US8392684B2 (en) 2005-08-12 2013-03-05 Silver Peak Systems, Inc. Data encryption in a network memory architecture for providing data based on local accessibility
US8489562B1 (en) 2007-11-30 2013-07-16 Silver Peak Systems, Inc. Deferred data storage
US8929402B1 (en) 2005-09-29 2015-01-06 Silver Peak Systems, Inc. Systems and methods for compressing packet data by predicting subsequent data
US8811431B2 (en) * 2008-11-20 2014-08-19 Silver Peak Systems, Inc. Systems and methods for compressing packet data
US8284759B2 (en) * 2006-01-31 2012-10-09 Alcatel Lucent System and method for compressing voice over IP headers
US8755381B2 (en) 2006-08-02 2014-06-17 Silver Peak Systems, Inc. Data matching using flow based packet data storage
US8885632B2 (en) 2006-08-02 2014-11-11 Silver Peak Systems, Inc. Communications scheduler
US8850547B1 (en) 2007-03-14 2014-09-30 Volcano Corporation Remote access service inspector
US8140610B2 (en) 2007-05-31 2012-03-20 Microsoft Corporation Bitmap-based display remoting
EP2153607A4 (en) * 2007-06-01 2010-10-06 Research In Motion Ltd METHOD AND DEVICE FOR MULTIPLE INTERACTIVE COMPRESSION
US8307115B1 (en) 2007-11-30 2012-11-06 Silver Peak Systems, Inc. Network memory mirroring
US7849243B2 (en) * 2008-01-23 2010-12-07 Intel Corporation Enabling flexibility of packet length in a communication protocol
US8442052B1 (en) 2008-02-20 2013-05-14 Silver Peak Systems, Inc. Forward packet recovery
US8743683B1 (en) 2008-07-03 2014-06-03 Silver Peak Systems, Inc. Quality of service using multiple flows
US10805840B2 (en) 2008-07-03 2020-10-13 Silver Peak Systems, Inc. Data transmission via a virtual wide area network overlay
US10164861B2 (en) 2015-12-28 2018-12-25 Silver Peak Systems, Inc. Dynamic monitoring and visualization for network health characteristics
US9717021B2 (en) 2008-07-03 2017-07-25 Silver Peak Systems, Inc. Virtual network overlay
US20110055403A1 (en) * 2009-09-01 2011-03-03 Krishna Balachandran Collaboration agent based system architecture to support collaborative multimedia applications over wireless networks
RU2473960C2 (ru) * 2010-05-26 2013-01-27 Учреждение Российской академии наук Институт проблем управления им. В.А. Трапезникова РАН Способ нахождения максимальных повторяющихся участков последовательности символов конечного алфавита и способ вычисления вспомогательного массива
US8417039B2 (en) 2010-06-03 2013-04-09 Microsoft Corporation Motion detection techniques for improved image remoting
EP2451083A1 (en) * 2010-11-09 2012-05-09 Océ-Technologies B.V. Method for compressing and decompressing digital data
EP2701144B1 (en) * 2011-04-20 2016-07-27 Panasonic Intellectual Property Corporation of America Device and method for execution of huffman coding
CN102325343B (zh) * 2011-05-25 2014-03-12 京信通信系统(中国)有限公司 一种数据压缩传输方法及其系统
US8400335B2 (en) 2011-07-21 2013-03-19 International Business Machines Corporation Using variable length code tables to compress an input data stream to a compressed output data stream
US8669889B2 (en) 2011-07-21 2014-03-11 International Business Machines Corporation Using variable length code tables to compress an input data stream to a compressed output data stream
CA2881012A1 (en) * 2011-08-03 2013-02-07 Libre Communications Inc. Secure event broadcasting system and method
US9130991B2 (en) 2011-10-14 2015-09-08 Silver Peak Systems, Inc. Processing data packets in performance enhancing proxy (PEP) environment
US9626224B2 (en) 2011-11-03 2017-04-18 Silver Peak Systems, Inc. Optimizing available computing resources within a virtual environment
US8681813B2 (en) * 2011-11-29 2014-03-25 Wyse Technology L.L.C. Bandwidth optimization for remote desktop protocol
US9171158B2 (en) 2011-12-12 2015-10-27 International Business Machines Corporation Dynamic anomaly, association and clustering detection
US8650644B1 (en) * 2011-12-28 2014-02-11 Juniper Networks, Inc. Compressed data pattern matching
KR101329676B1 (ko) 2011-12-28 2013-11-18 계명대학교 산학협력단 수정된 허프만 코드에 기반한 모바일 데이터 동기화 패키지 전송 방법
US8692696B2 (en) 2012-01-03 2014-04-08 International Business Machines Corporation Generating a code alphabet of symbols to generate codewords for words used with a program
US20130290478A1 (en) * 2012-04-30 2013-10-31 Franck Diard System and method for enabling a remote computer to connect to a primary computer for remote graphics
CN104365096B (zh) * 2012-06-01 2018-12-21 恩智浦美国有限公司 执行图像数据的压缩的方法及装置
US9166620B2 (en) 2012-09-26 2015-10-20 Qualcomm Incorporated Method and apparatus for a memory based packet compression encoding
US9231615B2 (en) * 2012-10-24 2016-01-05 Seagate Technology Llc Method to shorten hash chains in Lempel-Ziv compression of data with repetitive symbols
US9350676B2 (en) 2012-12-11 2016-05-24 Qualcomm Incorporated Method and apparatus for classifying flows for compression
US10474652B2 (en) * 2013-03-14 2019-11-12 Inpixon Optimizing wide data-type storage and analysis of data in a column store database
US9384204B2 (en) * 2013-05-22 2016-07-05 Amazon Technologies, Inc. Efficient data compression and analysis as a service
US9325813B2 (en) * 2013-09-03 2016-04-26 Qualcomm Incorporated Formatting data packets for compression
WO2015052690A1 (en) * 2013-10-10 2015-04-16 Yandex Europe Ag Methods and systems for indexing references to documents of a database and for locating documents in the database
US10108692B1 (en) * 2013-10-15 2018-10-23 Amazon Technologies, Inc. Data set distribution
US20150207742A1 (en) * 2014-01-22 2015-07-23 Wipro Limited Methods for optimizing data for transmission and devices thereof
US9491103B2 (en) * 2014-02-28 2016-11-08 Qualcomm Incorporated Introducing uncompressed packets in compression flow based on flow control
US9948496B1 (en) 2014-07-30 2018-04-17 Silver Peak Systems, Inc. Determining a transit appliance for data traffic to a software service
EP3195481B1 (en) * 2014-08-12 2022-07-13 Micron Technology, Inc. Adaptive rate compression hash processing device
US9875344B1 (en) 2014-09-05 2018-01-23 Silver Peak Systems, Inc. Dynamic monitoring and authorization of an optimization device
US9628111B2 (en) * 2015-05-11 2017-04-18 Via Alliance Semiconductor Co., Ltd. Hardware data compressor with multiple string match search hash tables each based on different hash size
WO2016205209A1 (en) * 2015-06-15 2016-12-22 Ascava, Inc. Performing multidimensional search, content-associative retrieval, and keyword-based search and retrieval on data that has been losslessly reduced using a prime data sieve
US9473168B1 (en) * 2015-09-25 2016-10-18 Intel Corporation Systems, methods, and apparatuses for compression using hardware and software
US10169360B2 (en) * 2015-11-11 2019-01-01 International Business Machines Corporation Mixing software based compression requests with hardware accelerated requests
CN106817386B (zh) * 2015-11-27 2020-03-10 华为技术有限公司 一种多会话下远程服务的数据处理方法和系统
US10432484B2 (en) 2016-06-13 2019-10-01 Silver Peak Systems, Inc. Aggregating select network traffic statistics
US9967056B1 (en) 2016-08-19 2018-05-08 Silver Peak Systems, Inc. Forward packet recovery with constrained overhead
US10771394B2 (en) 2017-02-06 2020-09-08 Silver Peak Systems, Inc. Multi-level learning for classifying traffic flows on a first packet from DNS data
US11044202B2 (en) 2017-02-06 2021-06-22 Silver Peak Systems, Inc. Multi-level learning for predicting and classifying traffic flows from first packet data
US10257082B2 (en) 2017-02-06 2019-04-09 Silver Peak Systems, Inc. Multi-level learning for classifying traffic flows
US10892978B2 (en) 2017-02-06 2021-01-12 Silver Peak Systems, Inc. Multi-level learning for classifying traffic flows from first packet data
TWI645698B (zh) * 2017-07-17 2018-12-21 財團法人工業技術研究院 資料發送裝置、資料接收裝置及其方法
US11212210B2 (en) 2017-09-21 2021-12-28 Silver Peak Systems, Inc. Selective route exporting using source type
US10637721B2 (en) 2018-03-12 2020-04-28 Silver Peak Systems, Inc. Detecting path break conditions while minimizing network overhead
CN109408515A (zh) * 2018-11-01 2019-03-01 郑州云海信息技术有限公司 一种索引执行方法与装置
CN109802686B (zh) * 2019-01-30 2022-12-06 上海兆芯集成电路有限公司 加速压缩方法以及加速压缩装置
US11387844B2 (en) * 2019-04-19 2022-07-12 Preferred Networks, Inc. Data compression method, data compression apparatus, data decompression method, data decompression apparatus and data storage system
DE102019208780A1 (de) * 2019-06-17 2021-01-21 Infineon Technologies Ag Vorrichtungen und verfahren zum komprimieren bzw. dekomprimieren
CN110598156B (zh) * 2019-09-19 2022-03-15 腾讯科技(深圳)有限公司 绘图数据的处理方法、装置、终端、服务器及存储介质
CN112399479B (zh) * 2020-11-03 2023-04-07 广州机智云物联网科技有限公司 用于数据传输的方法、电子设备和存储介质
CN112783056B (zh) * 2021-01-04 2022-09-23 潍柴动力股份有限公司 Ecu的数据烧写方法、装置、设备及存储介质
FR3137519A1 (fr) * 2022-07-01 2024-01-05 Valeo Vision Procédé de projection d’un faisceau d’éclairage dynamique par un système lumineux d’un véhicule automobile

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0936747A (ja) * 1995-07-18 1997-02-07 Toshiba Corp データ圧縮方法及びデータ圧縮装置
JPH0946235A (ja) * 1994-10-04 1997-02-14 Nec Corp データ圧縮装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4730348A (en) * 1986-09-19 1988-03-08 Adaptive Computer Technologies Adaptive data compression system
US5146221A (en) * 1989-01-13 1992-09-08 Stac, Inc. Data compression apparatus and method
US5155484A (en) * 1991-09-13 1992-10-13 Salient Software, Inc. Fast data compressor with direct lookup table indexing into history buffer
US6092070A (en) * 1992-02-11 2000-07-18 Telcordia Technologies, Inc. Method and system for lossless date compression and fast recursive expansion
EP0920207B2 (en) 1992-12-09 2006-09-27 Sedna Patent Services, LLC Interactive terminal for television delivery system
US5455577A (en) * 1993-03-12 1995-10-03 Microsoft Corporation Method and system for data compression
US5572206A (en) * 1994-07-06 1996-11-05 Microsoft Corporation Data compression method and system
JPH09233467A (ja) * 1996-02-21 1997-09-05 Fujitsu Ltd 画像データ通信装置及び画像データ通信システムにおける通信データ量調整方法
EP0944257A1 (en) 1998-03-06 1999-09-22 CANAL+ Société Anonyme Multimedia terminal adapted for multiple users
US6301246B1 (en) 1998-08-17 2001-10-09 Siemens Information And Communication Networks, Inc. Silent monitoring in a voice-over-data-network environment
CN1437738A (zh) * 2000-01-03 2003-08-20 埃菲克塔技术股份有限公司 数据发送和存储的有效且无损耗转换
WO2001050612A1 (en) 2000-01-05 2001-07-12 Realnetworks, Inc. Systems and methods for multiple-file data compression
US6882750B2 (en) * 2000-05-02 2005-04-19 Zaxel Systems, Inc. Fast loss less image compression system based on neighborhood comparisons
US20020078241A1 (en) * 2000-12-15 2002-06-20 Alfy, Inc. Method of accelerating media transfer
US6883037B2 (en) 2001-03-21 2005-04-19 Microsoft Corporation Fast data decoder that operates with reduced output buffer bounds checking

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0946235A (ja) * 1994-10-04 1997-02-14 Nec Corp データ圧縮装置
JPH0936747A (ja) * 1995-07-18 1997-02-07 Toshiba Corp データ圧縮方法及びデータ圧縮装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010539606A (ja) * 2007-09-14 2010-12-16 マイクロソフト コーポレーション データ依存チャンキングを使用する最適化されたデータストリーム圧縮
US8819288B2 (en) 2007-09-14 2014-08-26 Microsoft Corporation Optimized data stream compression using data-dependent chunking
WO2012161838A3 (en) * 2011-03-30 2013-04-04 Chevron U.S.A. Inc. System and method for computations utilizing optimized earth model representations
US8798967B2 (en) 2011-03-30 2014-08-05 Chevron U.S.A. Inc. System and method for computations utilizing optimized earth model representations

Also Published As

Publication number Publication date
BRPI0500301A (pt) 2005-11-01
RU2005104018A (ru) 2006-07-20
CN1671103A (zh) 2005-09-21
EP1578019A2 (en) 2005-09-21
US20050210151A1 (en) 2005-09-22
JP2012019532A (ja) 2012-01-26
MXPA05001846A (es) 2005-09-20
CA2496067A1 (en) 2005-09-15
US7966424B2 (en) 2011-06-21
CN1671103B (zh) 2010-06-02
AU2005200349A1 (en) 2005-09-29
RU2377670C2 (ru) 2009-12-27
KR20050092343A (ko) 2005-09-21
EP1578019A3 (en) 2011-03-30

Similar Documents

Publication Publication Date Title
US7966424B2 (en) Data compression
US9727574B2 (en) System and method for applying an efficient data compression scheme to URL parameters
US8766826B2 (en) Determination of compression state information for use in interactive compression
US9363309B2 (en) Systems and methods for compressing packet data by predicting subsequent data
EP2284722B1 (en) Methods and apparatus for generating graphical and media displays at a client
JP3982688B2 (ja) テンポラリ圧縮テーブルを用いた通信システム及び方法
US20060167969A1 (en) Data caching based on data contents
JP2010539606A (ja) データ依存チャンキングを使用する最適化されたデータストリーム圧縮
US20110282932A1 (en) Asymmetric end host redundancy elimination for networks
US20120072613A1 (en) Interactive compression with multiple units of compression state information
CA2689877A1 (en) Method and apparatus for communicating compression state information for interactive compression
Gutwin et al. Improving network efficiency in real-time groupware with general message compression
US20120047171A1 (en) Synchronization of side information caches
US20090316774A1 (en) Method and apparatus for multi-part interactive compression
WO2014029081A1 (zh) 压缩方法及设备
US11025272B2 (en) Real-time history-based byte stream compression
WO2022167482A1 (en) Identification of compressed net resources

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080201

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101105

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101119

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20110107

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110107

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110221

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110422

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110822