什么数据库的爬虫/刮刀?

时间:2012-08-12 07:35:35

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

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

该项目是一个自动网络爬虫,可根据用户的请求检查网站,在某些情况下擦除数据,并创建已完成内容的日志文件。

要求:

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

我认为它既不是图形数据库(也不是复杂的关联),也不是基于内存的键/值存储(缓存中容纳的数据太多)。我仍然可以找到我能找到的其他类型的数据库,每个数据库似乎都有它的优点。

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

感谢。

3 个答案:

答案 0 :(得分:3)

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

(免责声明:我为高压工作。)

答案 1 :(得分:3)

我同意弗拉基米尔的观点,你会想要考虑这个场景的基于文档的数据库。我最熟悉MongoDB。我在这里使用它的原因如下:

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

答案 2 :(得分:0)

查看面向文档的数据库,如CouchDBMongoDB