【问题标题】:What database for crawler/scraper?爬虫/爬虫的数据库是什么?
【发布时间】:2012-08-08 20:49:28
【问题描述】:

我目前正在研究将什么数据库用于我正在进行的项目。希望大家能给我一些提示。

该项目是一个自动网络爬虫,可根据用户的请求检查网站,在特定情况下抓取数据,并创建所做操作的日志文件。

要求:

  • 只有几列少的表;预定义列没问题
  • 模型之间没有过于复杂的关联
  • 大量基于日期和时间的查询
  • 由于日志记录,数据库将快速增长并占用大量空间
  • 应该能够扩展到多台服务器
  • 字段主要包含 id (int)、字符串(最多 200-500 个字符)和 unix 时间戳
  • 两种不同类型的服务器将同时直接向/从其读取/写入数据:
    • 一个(/以后更多)rails 应用程序,它接受用户输入并根据请求显示结果
    • 一个(/稍后更多)Node.js 服务器,用作执行爬虫/爬虫。它将有足够的负载连续运行并每秒进行数十次数据库查询。

我认为它既不是图形数据库(没有复杂的关联),也不是基于内存的键/值存储(缓存中的数据太多)。对于我能找到的每一种其他类型的数据库,我仍然持观望态度,每一种似乎都有它的优点。

那么,专业人士有什么建议我应该如何决定?

谢谢。

【问题讨论】:

    标签: sql database nosql screen-scraping web-crawler


    【解决方案1】:

    看看像CouchDBMongoDB 这样的面向文档的数据库。

    【讨论】:

      【解决方案2】:

      Google 建立了一个名为“BigTable”的数据库,用于抓取、索引和搜索相关业务。他们发布了一篇关于它的论文(如果你有兴趣,谷歌搜索“BigTable”)。有几种类似 bigtable 的设计的开源实现,其中之一是 Hypertable。我们有一篇博客文章描述了由 sehrch.com 的人编写的爬虫/索引器实现 (http://hypertable.com/blog/sehrchcom_a_structured_search_engine_powered_by_hypertable/)。并查看您的要求:所有这些都受支持并且是常见用例。

      (免责声明:我为超表工作。)

      【讨论】:

      • 您好,感谢您的意见。如果它是您的产品,我不能相信这是一个公正的推荐,但我一定会调查它。
      • 当然,这就是我添加免责声明的原因。 :)
      【解决方案3】:

      我同意 Vladimir 的观点,即您会考虑在这种情况下使用基于文档的数据库。我最熟悉 MongoDB。我在这里使用它的原因如下:

      1. 您的“只有几个表和几个列”的“架构要求”非常符合 MongoDB 的 NoSQL 特性。
      2. 与上面的“节点之间没有过于复杂的关联”相同——您需要决定是更喜欢嵌套文档还是使用 dbref(我更喜欢前者)
      3. 大量基于时间的数据(以及其他扩展要求) - MongoDB 通过分片或分区很好地扩展
      4. 读/写访问 - 这就是为什么我推荐 MongoDB 而不是 Hadoop 之类的东西。交互式查询要求最好通过 Hadoop 样式存储以外的方式来满足,因为这种类型的存储是为批处理(而不是交互式查询)要求而设计的。

      【讨论】:

      • 感谢您的详细解释。