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

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

什么是最好的方法来做到这一点? setInterval(60000)似乎是一个比特跛脚:)

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

编辑:

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

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

我会看看BuddyMedia的这个演示,看看他们是如何进行实时聚合的。 我正在使用这种方法的改编版本来实现我的实时指标,它的function非常好。

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

为什么不用一个curl请求来触发数据库写入? 您可以将该命令放在每小时cron作业上,并在本地端口上侦听。

您可以在上次复制数据时存储mongo,每当有任何请求进来时,都可以查看自上次复制数据以来已经过了多长时间。

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

存储date的简单方法是将其存储为Date.now()(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)的值,然后检查db等内容。 logs.find({LASTUPDATE:{$ LT:Date.now() – 6000000}})。

我想我在那里混淆了一些不同的解决scheme,但希望这样的事情会起作用!

如果你使用的是Node,那么一个很好用的CRON工具就是Forever 。 它使用相同的CRON模式来处理重复的工作。