1

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

最好的方法是什么?setInterval(60000) 似乎有点蹩脚:)

4

5 回答 5

4

例如,您可以使用cron并按计划作业运行您的 node.js 应用程序。

编辑:

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

于 2011-05-05T20:16:24.647 回答
1

您应该实时聚合,而不是每小时一次。

我会看一下 BuddyMedia 的这个演示文稿,看看他们是如何进行实时聚合的。我正在为我的实时指标使用这种方法的改编版本,它的效果非常好。

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

于 2011-05-06T01:38:39.103 回答
0

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

于 2011-05-05T21:17:27.167 回答
0

您可以在上次复制数据时使用 mongo 存储,并且每次收到任何请求时,您都可以检查自上次复制数据以来已经过去了多长时间。

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

An easy way to store the date is to just store it as the value of Date.now() (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date) and then check for something like db.logs.find({lastUpdate:{$lt:Date.now()-6000000}}).

I think I confused a few different solutions there, but hopefully something like that will work!

于 2011-05-06T07:21:27.467 回答
0

If you're using Node, a nice CRON-like tool to use is Forever. It uses to same CRON patterns to handle repetition of jobs.

于 2013-03-09T09:11:53.783 回答