每小时更新数据库(mongo)的最佳方法是什么?

3

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

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


1
如果可以的话,将其设置为 Cron 作业可能是最简单的方法。 - undefined
5个回答

4
你可以使用 cron 来作为示例,定期运行你的 node.js 应用程序。
编辑:
如果程序需要连续运行,则 setTimeout 可能是少数几个可选项之一(实现相当简单)。否则,你可以将数据卸载到某些临时存储系统(例如 redis),然后定期运行其他 node.js 程序来移动你的数据,但这可能会引入对其他 DB 系统的新依赖,并根据你的情况增加复杂性。在这种情况下,Redis 也可以作为某种故障转移解决方案,以防止你的主 node.js 应用程序意外终止并丢失部分或全部数据批处理。

问题是我的应用程序应该持续运行,因为它将聚合实时数据。所以我必须想办法写入上一个小时收集的数据。 - undefined

1

0
为什么不直接用一个触发数据库写入的curl请求来访问服务器呢?你可以把这个命令放在每小时执行的cron job上,并监听一个本地端口。

0
如果你正在使用Node,一个不错的类似CRON的工具是Forever。它使用相同的CRON模式来处理作业的重复执行。

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}})的条件。

我可能混淆了几种不同的解决方案,但希望类似这样的方法能够起作用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接