node.js - 在桌面应用程序中共享一个 SQLite 连接是否安全?共享一个连接与为每个查询创建新连接
问题描述
我在 stackoverflow 上发现了类似的问题,但它只关注性能,答案非常明显:为每个查询创建新连接 = 性能较慢(慢多少?这取决于)
我更担心事务隔离方面。在SQLite 文档中,我发现单个连接中没有隔离。我在我的电子桌面应用程序中使用sqlite3库,我计划在我的应用程序运行的整个过程中共享一个连接(让它更快一点),但现在我想知道它是否安全。如果单个连接中没有隔离,那么这种情况可能吗?:
客户端触发 2 个不相关的进程
1.
db.serialize(()=>{
db.run("BEGIN");
try{
db.run("foo");
db.run("bar");
}catch(e){
db.run("ROLLBACK")
}
db.run("COMMIT")
});
2.
db.run("another foobar")
1.和2.并行运行,因此 2. 可能在1 的“开始”和“提交”/“回滚”之间完成。 这是否意味着来自2.的查询可能被回滚或由1提交。即使它们是完全独立的或者是2。使用一些隐式事务来防止这种情况?
我认为这是可能的,因为单个连接中没有隔离,但我可能会遗漏一些东西,因为我从未使用过 SQLite 和sqlite3(或者我可能错过了更基本的东西)所以我想确认这种情况是否是潜在的使用单个sqlite3连接的危险。
解决方案
推荐阅读
- c# - 如何处理无法访问的 ADFS 元数据
- java - 如何从主类调用一个方法到另一个活动
- php - 不同数组中键的值
- javascript - 来自 JSON 的 DOM 表
- webrtc - WebRTC replaceTrack,getStats不返回audioInputLevel
- javascript - document.getElementsByName("q1").disabled = true 不工作
- javascript - 即使单击标签区域,引导程序默认表单输入也会打开。我该如何防止这种情况?
- python - 如何在python中组合多个列
- javascript - 在自定义元素构造函数调用中维护 JS 范围
- join - 水晶报表外部加入