错误博客( cuowu.com )发布于 2019-06-10 18:59:11

压缩和大规模文件

压缩和大规模文件教程。

不管应用系统是否需要对文档进行随机存取,文档存储系统都需要大规模的文件和压缩技术。

尽管对于用户来讲,文档看上去可能会很长,但对于现代计算机来讲,这样的文档规模是很小的。例如,本章中的内容大约有10 000字左右,存储这些内容大约需要70K的磁盘空间。比网页的平均大小要大很多,但现代的磁盘系统传输70K的数据大约仅需要1个毫秒。然而,为了对文件进行读取,磁盘系统可能会需要10毫秒的时间来寻找这个文件。这就是为什么文档在它自己的文件中存放不是一个好的想法;打开这些零散的小文件来读取文档的内容,需要大量的时间开销。一个较好的解决方案是,将多个文档存储在一个单独的文件中,但这样做的结果会使文件变得很大,以至于在网络上传输该文件的时间开销会远远大于搜索文档的时间。文件的合理大小应该是几百兆字节。通过将多个文档在文件中一起存放,索引器可以将大量的时间用于数据内容的读取上,而不是文档内容的查找上。

在Galago搜索引擎中,含有三种混合文档格式的解析器:ARC、TREC文本和TREC Web。在每种格式中,大量的文档都存储在同一个文件中,各文档之间以一个较短的文档元数据区域进行分隔。图3-10给出了TREC Web格式。每个文档块以 <DOC> 标签开始,并以 </DOC> 标签结束。在文档的开始部分,<DOCHDR> 标签部分含有页面请求的信息,如它的URL、页面采集的日期以及网络服务器返回的HTTP头部信息。每个文档记录还包括一个<DOCNO>部分,该部分包括该文档的一个唯一的识别符。

大规模的文件对于从磁盘传输数据是有很大意义的,但减少对文档集合的总体存储需求也有着很明显的优势。幸运的是,人们书写的文本通常都有较大的冗余性。例如,字母 q 的后面通常会跟随着字母 u。香农(1951)指出,对于英语是母语的人,能够在英文文本中猜出下一个字母的准确率为69%。HTML和XML中的标签具有更大的冗余性。针对冗余性采用压缩(compression)技术,可以使文件在不丢失任何信息的基础上变得更小。我们将在第5章中介绍文档的压缩技术,这样做的部分原因是由于对于索引的压缩相当特别。目前,文本压缩技术仍有大量的研究,常用的算法像DEFLATE(Deutsch,1996)和LZW(Welch,1984),能够对HTML和XML文本压缩80%。空间的节省降低了存储大量文档的开销。由于有时候只需要读取少量的字节,这样也降低了从磁盘中读取文档的时间开销。

对于大块的数据,压缩的效果较好,这样就使得大规模的文件中可以存放数量较多的文档。然而,把这个文件作为单独的一个数据块进行压缩是不必要的。绝大多数的压缩方法都不支持随机存取,因此每一个数据块会被相继地解压缩。如果希望能够对数据进行随机存取,较好的方式是考虑对小数据块进行压缩,一个文档可以是一个数据块,或者少量的文档组成一个数据块。小数据块降低了压缩率(节省空间的数量),却能够降低请求等待的时间。

TREC Web混合文档格式中的文本内容实例


2020年错误博客亲测项目系列

错误教程( cuowu.com )专注网推培训、SEO培训和网赚培训,微信/电话:13722793092

关注微信公众号:第一时间获得错误博客最新教程,让我们一起成长!

公众号二维码