私はデータの冗長性について考えていましたが、これを続ける前にすべてを書面で破棄したいと思っていました(さらに、このアイデアがすでに実行されているかどうかを再確認しました)。
さて、ここに行きます。
インターネットは、テキスト、画像、ビデオなどの冗長データでいっぱいです。その結果、HTTPを介したgzipおよびbzip2のオンザフライ圧縮および解凍に多くの努力が注がれています。GoogleやFacebookのような大規模なサイトには、ページの読み込みを高速化するために時間を費やすチーム全体があります。
私の「質問」は、圧縮がファイルごとにのみ行われるという事実に関連しています(gzip file.txt
yields file.txt.gz
)。間違いなく、インターネット上に散らばっている一見無関係なデータの間には多くの共通点があります。これらの一般的なチャンクを保存し、クライアント側またはサーバー側でそれらを組み合わせて、コンテンツを動的に生成できるとしたらどうでしょうか。
これを実行できるようにするには、インターネット上で最も一般的なデータの「チャンク」を見つける必要があります。これらのチャンクは任意のサイズにすることができ(おそらくここで最適な選択があります)、組み合わせて、考えられる任意のデータを表現できる必要があります。
説明のために、次の5つの共通データのチャンクがあるとしましょう- a, b, c, d, and e
。これらのチャンクのみを含む2つのファイルがあります。と呼ばれるプログラムがchunk
ありcombine
ます。chunk
データを取得し、bzip2、gzip、またはその他の圧縮アルゴリズムを使用して圧縮し、そのデータを構成するチャンクを出力します(圧縮後)。combine
チャンクを展開し、連結された結果を解凍します。使用方法は次のとおりです。
$ cat gettysburg.txt
"Four score and seven years ago...cont'd"
$ cat test.txt
"This is a test"
$ chunk gettysburg.txt test.txt
$ cat gettysburg.txt.ck
abdbdeabcbdbe
$ cat test.txt.ck
abdeacccde
$ combine gettysburg.txt.ck test.txt.ck
$ cat gettysburg.txt
"Four score and seven years ago...cont'd"
$ cat test.txt
"This is a test"
たとえば、HTTPを介してファイルを送信する場合、サーバーchunk
はデータを送信してクライアントに送信できます。クライアントはcombine
、チャンク化されたデータを送信してレンダリングすることができます。
誰かがこれを以前に試みたことがありますか?そうでない場合は、その理由を知りたいのですが、そうであれば、この機能をどのように実現できるかを投稿してください。良い最初のステップは、これらのチャンクが何であるかを理解する方法を詳しく説明することです。チャンクを取得する方法を理解したら、これら2つのプログラムchunk
とがどのように機能するかを理解しますcombine
。
これは現実世界に影響を与える非常に興味深い問題だと思うので、おそらくこれに賞金をかけます(受信状況によって異なります)。