我一直在考虑数据冗余,只是想在我继续这样做之前把所有的东西都写下来(此外还要仔细检查这个想法是否已经付诸实践)。
好了,就到这里吧。
互联网上充斥着冗余数据,包括文本、图像、视频等。因此,gzip 和 bzip2 通过 HTTP 进行动态压缩和解压缩已经付出了很多努力。像 Google 和 Facebook 这样的大型网站拥有整个团队,他们致力于加快页面加载速度。
我的“问题”与压缩仅基于每个文件(gzip file.txt
产量file.txt.gz
)这一事实有关。毫无疑问,散布在互联网上的看似无关的数据之间存在许多共性。如果您可以存储这些公共块并在客户端或服务器端组合它们以动态生成内容怎么办?
为了能够做到这一点,人们必须在 Internet 上找到最常见的数据“块”。这些块可以是任何大小(这里可能有一个最佳选择),并且结合起来,需要能够表达任何可以想象的数据。
出于说明目的,假设我们有以下 5 块常见数据 - a, b, c, d, and e
. 我们有两个文件只包含这些块。我们有名为chunk
and的程序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
处理分块数据并呈现它。
有没有人尝试过这个?如果不是,我想知道为什么,如果是,请发布您如何使这项工作。一个不错的第一步是详细说明您如何弄清楚这些块是什么。一旦我们弄清楚了如何获取这些块,然后我们就会弄清楚这两个程序chunk
和combine
可能如何工作。
我可能会对此给予赏金(取决于接收),因为我认为这是一个非常有趣的问题,具有现实世界的影响。