SQLite3+;Node.js-我应该为每次插入打开和关闭数据库还是始终保持打开状态?
我有一个Node.js进程监视应用程序,当某个操作发生时写入数据库。此数据库有一个前端,当两者都试图访问数据时,会导致并发错误。内部进程不太重要,但每秒大约有3次对数据库的写入(我认为这仍然相当慢)。这是我的插入声明:SQLite3+;Node.js-我应该为每次插入打开和关闭数据库还是始终保持打开状态?,node.js,sqlite,node-sqlite3,Node.js,Sqlite,Node Sqlite3,我有一个Node.js进程监视应用程序,当某个操作发生时写入数据库。此数据库有一个前端,当两者都试图访问数据时,会导致并发错误。内部进程不太重要,但每秒大约有3次对数据库的写入(我认为这仍然相当慢)。这是我的插入声明: db.run(query, data, function(e) { if (e) { console.log("Could not insert a Sync!") console.log(e.message) } });
db.run(query, data, function(e)
{
if (e)
{
console.log("Could not insert a Sync!")
console.log(e.message)
}
});
我的问题是,我是否应该为每次插入打开和关闭数据库:
db = new sql.Database('../db', sql.OPEN_READWRITE, (e) =>
{
if (e)
{
console.log("Could not connect to the DB!")
console.log(e.message)
}
})
db.run(query, data, function(e)
{
if (e)
{
console.log("Could not insert a Sync!")
console.log(e.message)
}
});
db.close()
或者在进程开始时打开,而只让db对象保持打开状态?
我希望减少并发错误的数量,这是我正在研究的选项。谢谢不断地打开和关闭数据库连接不会帮助您解决并发问题,而且效率也不高。让它开着 WAL模式允许您同时拥有一个writer和多个reader。其他日记模式允许您同时拥有多个活动读者,但没有作者,或者一个作者在作者完成之前没有读者。因此,如果使用数据库的另一个应用程序只是一个读卡器,那么WAL可能就是您想要的 尝试读取或写入数据库的任何内容都可以写入,因此,如果出现锁定错误,它会在短暂暂停后再次尝试,然后在几次尝试失败后最终放弃(C api有办法做到这一点,但不确定节点,但始终存在杂注) 您还应该确保您执行的任何准备好的语句在使用完后都被重置或最终确定,以便它们释放锁并允许运行其他查询 如果问题仍然存在,您可能需要另一个数据库