爬虫/抓取器使用哪种数据库?

11

我目前正在研究在我正在进行的项目中使用哪个数据库。希望你们能给我一些提示。

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

要求:

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

我假设它既不是图形数据库(没有复杂的关联),也不是基于内存的键/值存储(缓存中保存太多数据)。对于我能找到的其他任何类型的数据库,我仍然摇摆不定,每种数据库似乎都有其优点。

那么,有没有专业人士能给我建议,我应该如何决定呢?

3个回答

5
我同意Vladimir的观点,你应该考虑使用基于文档的数据库来处理这种情况。我最熟悉的是MongoDB。以下是我使用它的原因:
1.你的“模式需求”只需要少量表和少量列,非常适合MongoDB的NoSQL特性。
2.对于“节点之间没有过于复杂的关联”,你需要决定是使用嵌套文档还是使用dbref(我更喜欢前者)。
3.大量的基于时间的数据(和其他扩展要求) - 通过分片或分区,MongoDB可以很好地扩展。
4.读/写访问 - 这就是我推荐MongoDB而不是像Hadoop这样的东西的原因。交互式查询要求最好使用其他类型的存储,而不是像Hadoop这样的存储,因为这种存储是设计用于批量(而不是交互式查询)要求。

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

嘿,感谢您的输入。如果这是您的产品,我无法相信这是一个不偏不倚的推荐,但我一定会仔细研究它。 - KonstantinK
当然,这就是我添加免责声明的原因。 :) - cruppstahl

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接