每小时更新DB(mongo)的最佳方法?

时间:2011-05-05 19:39:27

标签: mongodb node.js express socket.io

我正准备一个小应用程序,它将汇总我网站上用户的数据(通过socket.io)。我想每小时将所有数据插入我的monogDB。

最好的方法是什么? setInterval(60000)似乎是一个小小的跛脚:)

5 个答案:

答案 0 :(得分:4)

例如,您可以使用cron并将node.js应用作为预定作业运行。

修改

如果程序必须连续运行,那么setTimeout可能是少数可能的选择之一(实现起来非常简单)。否则,您可以将数据卸载到某个临时存储系统,例如redis,然后定期运行其他node.js程序来移动数据,但这可能会引入对其他数据库系统的新依赖性,并根据您的方案增加复杂性。在这种情况下,如果您的主node.js应用程序意外终止并丢失部分或全部数据批处理,Redis也可以作为某种故障保护解决方案。

答案 1 :(得分:1)

您应该实时汇总,而不是每小时汇总一次。

我将看一下BuddyMedia的演示文稿,了解他们如何实时聚合。我正在使用这种方法的改编版本来实现我的实时指标,它运行得非常好。

http://www.slideshare.net/pstokes2/social-analytics-with-mongodb

答案 2 :(得分:0)

为什么不使用触发数据库写入的curl请求命中服务器?您可以将命令放在每小时的cron作业上并在本地端口上侦听。

答案 3 :(得分:0)

您可以在上次复制数据时使用mongo存储,每次发出任何请求时,您都可以查看自上次复制数据以来的时间。

或者您可以尝试setInterval(checkRestore,60000)进行一分钟检查。 checkRestore()将查询服务器以查看上次更新的时间是否大于一小时。有几种方法可以做到这一点。

存储日期的简单方法是将其存储为Date.now()(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)的值,然后检查某些内容比如db.logs.find({lastUpdate:{$ lt:Date.now() - 6000000}})。

我认为我在那里混淆了一些不同的解决方案,但希望这样的东西能起作用!

答案 4 :(得分:0)

如果您正在使用Node,那么使用类似CRON的工具就是Forever。它使用相同的CRON模式来处理重复的工作。