代码之家  ›  专栏  ›  技术社区  ›  Dan Loewenherz Snowman

分布式文件压缩

  •  2
  • Dan Loewenherz Snowman  · 技术社区  · 15 年前

    我一直在思考数据冗余问题,只是想在继续进行这项工作之前把所有内容都写下来(并且再次检查这个想法是否已经付诸实践)。

    好了,开始吧。

    互联网上充斥着冗余数据,包括文本、图像、视频等。因此,gzip和bzip2在HTTP上进行了大量的动态压缩和解压缩。像谷歌和Facebook这样的大型网站已经 全队 他们花时间让页面加载更快。

    我的“问题”涉及到这样一个事实,即压缩只在一个平台上进行 gzip file.txt 产量 file.txt.gz

    要做到这一点,就必须在互联网上找到最常见的“数据块”。这些数据块可以是任意大小(这里可能有一个最佳选择),组合起来,需要能够表达任何可以想象的数据。

    为了便于说明,假设我们有以下5个公共数据块- a, b, c, d, and e 只有 包含这些块。我们有叫做 chunk 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发送文件时,服务器可以 大块 结合

    以前有人尝试过吗?如果不是,我想知道为什么,如果是这样,请张贴你可能如何使这项工作。一个好的第一步是详细说明如何找出这些块是什么。一旦我们知道了如何获取块,然后我们就知道这两个程序, ,可能有用。

    我可能会对这一点给予奖励(取决于接收情况),因为我认为这是一个具有现实意义的非常有趣的问题。

    4 回复  |  直到 9 年前
        1
  •  3
  •   DataWraith    12 年前

    你问我以前是否有人做过类似的事情,以及块大小应该是多少,我想我会告诉你我想到的两篇论文:

    • (谷歌的一个团队)正试图通过利用文档间共享的数据来加速网络请求。服务器将一个预先计算好的字典传递给客户端,该字典包含文档之间的公共数据,并在以后的请求中引用。这一功能一次只适用于单个域,而且——目前——仅适用于Google Chrome: Shared Dictionary Compression Over HTTP

    • Optimizing File Replication over Limited-Bandwidth Networks using Remote Differential Compression 在文件系统同步的情况下,大约2KB的块大小可以很好地工作。他们使用了一定程度的间接寻址,因此重新创建文件所需的块列表本身就被分为块——这篇论文很吸引人,可能会给你一些关于如何完成事情的新想法。

    不确定它是否对您有帮助,但这里是以防万一。:-)

        2
  •  1
  •   Steven Schlansker    15 年前

    你真的不必分析最常见的块-事实上,这样的分布式决策可能真的很难。这是怎么回事

    让我们以HTTP数据传输为例。将每个文件分为10Mb块(或任何您喜欢的大小,我相信每种方式都会影响性能)并计算它们的SHA-256(或一些您非常确定应该可以安全防止冲突的哈希)

    例如,文件F1包含块B1..Bn和校验和C1..Cn。现在,HTTP服务器可以只使用列表C1..Cn响应文件F1的请求

    如果您曾经从任何服务器(即使是完全不同的服务器)下载另一个文件,而该文件恰好共享一个块,那么您已经下载了该文件,并且它与您选择的哈希算法一样安全。

    AAAAAAAA
    

    另一个呢

    BAAAAAAAA
    

    思想?

        3
  •  1
  •   Square Rig Master    15 年前

    有一种更简单的方法来处理文本数据。目前,我们将文本存储为代表声音的字母流。然而,语言的单位是单词而不是声音。因此,如果我们有一个包含所有单词的字典,然后将指向这些单词的“指针”存储在文件中,我们就可以通过使用指针和查找单词列表来动态地重新构建文本。

    这将使事物的大小立即减少3或4倍。在这个方法中,单词和你脑海中的块是一样的。下一步是常见的词组,如“这是”、“我是”、“满月”、“严肃的花花公子”、“哦宝贝”等。

        4
  •  0
  •   No Refunds No Returns    15 年前

    与您的答案不完全相关,但您已经看到了这一点。微软(和其他公司)已经提供了边缘网络来承载jquery库。您可以引用这些相同的URI,并从用户从不同站点访问文件和浏览器缓存文件中获得好处。

    但是,在过去的20分钟里,你提到了多少其他人提到的内容(任意数字)?你可能会在一家有很多员工共享一个应用程序的大公司看到一些好处,但我认为,如果不是这样的话,你将很难确定自己想要的应用程序块,这将超过共享应用程序的任何好处。