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

Kon*_*inK 8 sql database screen-scraping web-crawler nosql

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

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

要求:

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

我假设它既不是图形数据库(没有复杂的关联),也不是基于内存的键/值存储(缓存中容纳的数据太多).对于我能找到的其他类型的数据库,我仍然处于困境之中,每个数据库似乎都有它的优点.

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

谢谢.

cru*_*ahl 5

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

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


Lyn*_*git 5

我同意弗拉基米尔的观点,即您需要考虑针对这种情况使用基于文档的数据库。我最熟悉的是 MongoDB。我在这里使用它的原因如下:

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