【问题标题】:store a high amount of HTML files存储大量 HTML 文件
【发布时间】:2014-04-21 19:57:58
【问题描述】:

我正在做一个学术项目(一个搜索引擎),这个搜索引擎的主要功能是:

    1/-crawling
    2/-storing
    3/-indexing
    4/-page ranking

我的搜索引擎将抓取的所有网站都在本地可用,这意味着它是一个Intranet 搜索引擎。

在存储爬虫找到的文件后,需要快速提供这些文件以进行缓存。

所以我想知道存储和检索这些文件的最快方法是什么?

想到的第一个想法是使用FTP或SSH,但这些协议是基于连接的协议,连接、搜索文件和获取文件的时间很长。

我已经阅读了有关 google 的解剖结构,我看到他们使用数据存储库,我也想这样做,但我不知道如何。

注意:我使用的是 Linux/debian,搜索引擎后端是使用 C/C++ 编码的。 帮助!

【问题讨论】:

  • 为什么不是简单的数据库?以 MySQL 为例。如果存储容量很关键并且您可以承受计算开销,您可以压缩内容。
  • 当然可以,但是在主题中,他们告诉我们不允许数据库存储 HTML 文件:/ 还有第二种方法
  • 我不明白您所说的“提供”文件是什么意思。对于 FTP/SSH,您是否谈论过“服务”页面,或者在找到它们后如何获取它们以便 为它们提供服务(使用其他东西?)最好通过 HTTP 提供网页,这不是一个选择吗?如果您必须为此编写一个自己的服务器应用程序,请尝试找到一个作为库的 HTTP 服务器实现,或者如果您不允许使用一个,请自己编写一个非常简单的实现。然后,只需提供您抓取到硬盘上的缓存文件。
  • 好的,但是当爬虫需要一个文档(HTML文件)时,我需要通过HTTP来提供它吗,如果爬虫可以直接访问文件而不需要下载页面,那就太酷了?跨度>
  • 现在您的爬虫听起来像是从您自己的应用程序中抓取的。这真是令人困惑。我是这样理解的:我以为你想缓存网页内容。您的爬虫会爬取其他一些网页并将其存储为文件。您编写了一些以某种方式为这些(“缓存”)文件提供服务的应用程序。搜索发生在缓存文件上(带有一些索引以加快速度)。

标签: c++ linux storage nfs


【解决方案1】:

存储单个文件非常容易 - wget -r http://www.example.com 将存储 example.com 的整个(可抓取)内容的本地副本。

当然,请注意生成的页面,其中的内容会根据您访问页面的时间(或从何处)而有所不同。

要考虑的另一件事是,您可能并不真的想自己存储所有页面,而只是转发到实际包含这些页面的站点 - 这样,您只需要存储对哪个页面包含什么的引用单词,而不是整个页面。由于很多页面会有很多重复的内容,你只需要在你的数据库中存储唯一的单词和包含该单词的页面列表(如果你还过滤掉几乎每个页面上出现的单词,例如“如果", "and", "it", "to", "do" 等,可以减少需要存储的数据量。做一个统计每页每个单词的个数,然后看比较不同的页面,找到无意义的页面。

【讨论】:

  • 你的答案,你的解决方案的问题是爬虫也必须访问这些文件,它们存储在远程服务器(不是同一台机器)中,并且需要快速可用它们在同一台机器上(无需下载)。顺便说一句,对于这种情况,NFS 是一个很好的解决方案吗?
  • 为什么?你到底想解决什么?一旦你阅读了一个页面来获取它的内容,你就不需要存储它(谷歌确实存储页面,但这主要是当页面每天都相同时不必重建内容,以及能够显示缓存)。 NFS、HTTP 或 SSH,它们几乎都直接依赖于网络的速度——其他一切都接近“没有区别”。
  • 它用于缓存目的。
  • 伙计们,我阅读了有关谷歌的解剖结构,我看到他们正在使用数据存储库,你们有关于这个主题的任何信息吗?
  • Google 的数据存储库是数千台相当普通的 PC,它们排成一排,内存充足。机器是根据某种排序标准进行分区的,因此单个机器负责字母表的一个单独部分——至少据我所知。假设您并没有真正考虑将其设置为与谷歌竞争,我只会将文件存储在本地磁盘上(假设您真的需要存储它们 - 我不相信这一点,因为发送了一个页面重定向到原始页面更容易,并减少系统的负载)。
【解决方案2】:

好吧,如果程序要在运行期间不断运行,您可以将页面存储在 RAM 中 - 占用 1 GB 的 RAM,您就可以存储大量页面。这比将它们缓存到硬盘要快得多。

我从这个问题中收集到,用户与搜索引擎在不同的机器上,因此缓存。也许我在这里忽略了一些明显的东西,但你不能通过用户和搜索引擎之间已经建立的连接向他们发送 HTML 吗?毕竟,文本在数据方面是非常轻量级的,因此它不应该对连接造成太大压力。

【讨论】:

  • 我不知道页面的确切大小,它可能超过 200 万页(2GIG ram)。每次重启后我需要重新加载 RAM 中的数据:/
猜你喜欢
  • 1970-01-01
  • 2014-12-03
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
相关资源
最近更新 更多