网络服务器在将数据定期存储在node-sqlite3驱动的数据库中时出现问题。它会工作几次,然后失败
SQLITE_BUSY:数据库已锁定
有时即使没有失败,所有插入操作也都没有完成到数据库中,只在表中保留了一部分插入操作。
setInterval(doInserts,60000);
doInserts() {
calculateData(function(data){
if(data)
{
insertData(data);
}
});
}
function insertData(data) {
var sqlite3 = require("sqlite3").verbose();
//user fs existSync to check if file exists and openSync(file,'w') to create if not
db.serialize(function(){
var stmt = db.prepare("INSERT INTO mytable (col1,col2) values (?,?)");
for(var i =0;i<data.length;i++)
stmt.run(data[0],data[1]);
stmt.finalize();
});
db.close();
}
Run Code Online (Sandbox Code Playgroud)
考虑到我对节点和SQLite都是陌生的,我猜测我以错误的方式使用了某些东西,导致多个开放线程或进程锁定了db,但是没有任何文档或研究使我更接近解决方案。
我怀疑你正确理解 Node\Sqlite。我使用 Sqlite3#serialize 遇到了同样的问题。我最终没有使用它,而是使用了Mixu 的 Node Book 7.2.2 章节中的模式。 控制数据库查询的流程。基本上你有一系列的功能。每个函数都有一个调用下一个函数的回调。
| 归档时间: |
|
| 查看次数: |
7922 次 |
| 最近记录: |