11

我目前正在研究用于我正在从事的项目的数据库。希望大家能给我一些提示。

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

要求:

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

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

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

谢谢。

4

3 回答 3

5

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

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

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

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

于 2012-08-12T20:33:49.723 回答
0

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

于 2012-08-12T07:48:34.300 回答