【问题标题】:sqlite multiple databases insert/update/deletesqlite 多数据库插入/更新/删除
【发布时间】:2011-11-29 10:06:35
【问题描述】:

我想知道当 SQLite 有多个数据库同时插入/更新/删除时,它的行为如何?它是否产生多个进程,理论上比使用单个数据库/单个进程具有更好的并发性,或者它为每个进程使用相同的进程?

搜索文档并没有为 e 提供明确的答案。我知道 SQLite 不是多次写入的最理想环境,因为数据库作为单个文件存在。但这是否意味着多个文件 = 不同的写入过程?

databaseOne = connectToSqlite('databaseOne'); 
databaseTwo = connectToSqlite('databaseTwo');
function write()
    queryDatabaseOne("INSERT SOMETHING INTO SOME_TABLE VALUES SOME_VALUES");
    queryDatabaseTwo("INSERT SOMETHING INTO SOME_TABLE VALUES SOME_VALUES");

因此,两个不同的 sqlite 数据库,以及两个并行执行的插入,针对两个数据库中的表。

谢谢

【问题讨论】:

  • 这是什么意思:'多个数据库同时插入/更新/删除'?也许您应该提供一个代码示例?
  • 问题不在于特定的实现——它更多的是理论上的。但我知道这可能会令人困惑。我将在问题中添加一些伪代码以澄清一下。
  • 我无法识别“queryDatabaseOne()”。它是非阻塞的吗?如果它是阻塞的,则插入不会并行执行。

标签: sqlite concurrency


【解决方案1】:

通常,数据库查询是阻塞的 - 它们在完成之前不会返回。这有助于确保数据库的完整性。 SQLITE API 被阻塞。

当然,如果您有多个数据库,那么您可以使用调用 SQLITE API 的非阻塞例程编写多线程应用程序,然后将代码重叠、并行插入到多个数据库中。您必须小心处理多线程应用程序中的所有常见问题 - SQLITE API 既不会帮助也不会阻碍 - 确保不会出现对 SAME 数据库的重叠访问的额外复杂性。

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多