返回博客列表

用 JSON 文件做本地数据库:持久化与备份策略

不想引入 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 检测。