存储URL列表的有效方法

时间:2014-03-07 19:50:04

标签: algorithm data-structures compression finite-automata data-compression

我需要存储万亿个URL列表,其中每个URL列表将包含~50个URL。 什么是最节省空间的方法来压缩磁盘存储。

我想首先删除像“http://”这样无用的信息,然后构建一个最小的有限状态自动机并保存它。

另一个选项是构建一个逗号分隔的URL字符串,并使用常规压缩(如GZIP或BZ2)压缩此字符串。

如果我不关心速度哪种解决方案会产生最佳压缩效果。

2 个答案:

答案 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压缩比使用紧凑型非循环字图更好!