首页 > 解决方案 > 在桌面应用程序中共享一个 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连接的危险。

标签: node.jssqlitetransactionsisolationnode-sqlite3

解决方案


推荐阅读