不想引入 SQLite 或 LevelDB,直接用 JSON 文件存业务数据。研究了读写锁、定时备份、异常恢复,适合单机桌面应用。
读写锁
Node.js 单线程,但 fs 操作是异步的。用 Promise 队列确保同一时间只有一个写入操作。
let writeQueue = Promise.resolve();
function writeDB(data) {
writeQueue = writeQueue.then(() => {
return fs.promises.writeFile('db.json', JSON.stringify(data));
});
return writeQueue;
}
定时备份
每 5 分钟备份一次,保留最近 10 个版本。用 node-schedule 定时任务。
异常恢复
启动时检查 db.json 是否损坏,如果损坏用最近备份恢复。用 JSON.parse 的 try-catch 检测。