作为一个node和javascript 的新手, 有一个问题想请教各位。如果我希望将一个log系统的输出存储到数据库中,以logcat为例,我会有如下代码
logcat | node myapp.js
var rl = require(“readline”); rl.on(“data”, function() { //将当前内容存储到数据库中 if(existed()) { // do nothing } else { // save to database } })
但是因为logcat的输出速度非常快,并且node中所有的io操作都是异步的。那么
-
是否有可能出现前一次的写入还没有完成,下一次执行find() 操作的时候因为找不到这个数据从而重复存储的情况呢?
-
如果是的话,有什么方法来解决呢。根据我个人的理解,如果是在"一个"函数中,可以用回调函数的嵌套调用或者promise来解决,但是现在的逻辑代码注册在了监听器中,不知道有什么通用的思路?如果是java可以进行同步控制,保证当前写入的时候其他对该数据库的操作被阻塞(而且我使用了mongoose, 貌似不支持数据库操作的transaction)
非常感谢!
自定一下,求大大们解答!
用一个数组做FIFO的队列. 加强性能可以 setTimeout 加判断队列长度做batch write
nice
nice