我需要存储万亿个URL列表,其中每个URL列表将包含~50个URL。 什么是最节省空间的方法来压缩磁盘存储。
我想首先删除像“http://”这样无用的信息,然后构建一个最小的有限状态自动机并保存它。
另一个选项是构建一个逗号分隔的URL字符串,并使用常规压缩(如GZIP或BZ2)压缩此字符串。
如果我不关心速度哪种解决方案会产生最佳压缩效果。
答案 0 :(得分:1)
考虑到URL的数量以及大多数URL使用或多或少相同结构和命名模式的事实,我会使用索引和标记化器。 首先使用标记生成器收集尽可能多的单词并将其保存在索引中。然后,您可以通过列表中的索引替换每个标记:
http://www.google.com/search?q=hello+world (42字节)==会给你
http:// => 1 万维网。 => 2 google.com => 3 search => 4 你好=>五 world => 6
,网址将变为:1,2,3,'/',4,'?','q','=',5,'+',6
鉴于很多网址都是普通大域的子域名,而且大多数网址都会使用相同的常用英语单词(想想所有关于我们的网页或职业......),你可能会结束不是那么大的指数(英语中通常有50000个单词,法语中有70000个单词)。
然后,您可以压缩索引和标记化的URL以获得更多空间。
有解析URL和构建索引的O(n)和O(nlogn)算法。
答案 1 :(得分:0)
经过调查,似乎只使用GZIP压缩比使用紧凑型非循环字图更好!