node定时写入数据丢失问题

老衲法号一眉道人
  • 15

有一个接收下单回报的监听方法,监听到后端传回的数据push到一个缓存的变量里

let receive = []
onReceive(order) {
    receive.push(order)
}
// 监听方法
listener(order) {
    onReceive(order)
}

定时写入方法在不断的向本地写入数据

setInterval(async function () {
    await file.appenFile(path, receive)
    receive = []
}, 1000)

普通下单接收回报写入文件时,文件中数据正常
当进行压测时,文件中数据出现不全,缺失的现象 求解决方案

回复
阅读 118
2 个回答

文件 IO 需要时间,await 等待的这段时间,receive 作为一个你目前代码中的全局变量,是有可能被修改的

所以建议在写文件之前先复制一个对象

setInterval(async function () {
    const clonedData = [...receive] // 当然你也可以用 map 或者最传统的 for / while 遍历来克隆数组
    receive = []
    await file.appenFile(path, clonedData)
}, 1000)

应该就能解决问题了

你既然是压测出问题,则表明系统承压能力不足,并不是业务逻辑问题。
要改善或者避免,就要考虑你

  1. 提高相应能力,从而提高承压能力,比如提高写入IO能力
  2. 减少或者说限制访问,在压力承受范围内进行服务,以保证数据完整,比如利用一个类似池的结构,保证能服务就能完整写入,其它排队等待
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏