如何有效地在DB中存储许多数据?

时间:2012-02-09 17:32:21

标签: mysql ruby-on-rails ruby database

我没有处理许多记录的经验。以前,我使用MySql来存储文章,评论和其他简单数据。现在我需要在Ruby On Rails中编写一个应用程序,它会每分钟向数据库推送几十条记录。

此应用程序将观看一些网站并测量其中的一些参数。这些网站将全天候观看。如果我想观察100个网站,我将在我的数据库表中每天有大约144000(100 * 60 * 24)个新添加的记录。

我不想只是将它们存储在数据库中,而是使用它们,结合结果,图表等。

我想在博客系统中保存像评论这样的记录并不是很明智。我应该在没有任何“花哨”解决方案的情况下存储数据吗?

1 个答案:

答案 0 :(得分:2)

我建议你使用MongoDB,我目前有一些运行存储数百万文件的实例。与通常的关系模式相反,您可以使用MongoDB对子文档的支持。

MongoDB是一个NoSQL数据库,但如果您熟悉数据库和日常OO,它就非常容易使用并开始使用。

MongoDB有大多数流行语言的驱动程序,包括Ruby,所以你可以通过使用gem运行以下命令来安装Ruby的驱动程序(假设你想要使用它):

gem install mongo

如果运行Debian / Ubuntu只是使用以下内容的mongodb:

apt-get install mongodb

这应该让你开始。

根据每条记录的大小,您可以采用各种不同的设计,MongoDB目前每个文档的限制为16MB,这是您需要注意的事项。

我会有一个名为网站的集合,用于存储您正在监控的网站的基本信息(名称,网址,客户端引用,......)

然后有另一个用于存储您的统计数据的集合,可以称为“统计数据”,我会将每个子文档(每分钟的统计数据)存储在另一个文档中,该文档将数据保存一天。

所以统计数据中的每个文档都是这样的:

{
  _id : X,
  website_id : STORE_THE_ID_HERE,
  timestamp_start : PUT_THE_TIMESTAMP_WHEN_YOU_START_MONITORING_HERE,
  timestamp_end : SAME_AS_ABOVE_REALLY,
  stats_count : A_DENORMALIZED_COUNT_OF_STATS
  stats : [ { views : X, clicks : X2, ... },
       ...
  ]
}

希望能让您入门,我认为如果您愿意尝试,MongoDB完全符合您的要求。