【问题标题】:Concurrency with SQLITE与 SQLITE 的并发性
【发布时间】:2011-04-24 22:10:30
【问题描述】:

我们计划在我们的项目中使用 SQLite,但对它的并发模型有点困惑(因为我在社区中阅读了许多不同的观点)。所以我放下我的问题,希望能消除我的疑虑。

我们计划在应用程序启动期间准备我的所有语句,多个连接用于读取,一个连接用于写入。所以基本上我们创建连接并在一个线程中准备语句,并使用另一个线程来绑定和执行声明。

我在 Windows 和 Linux 上使用 C API。

  1. 在一个线程上创建连接并在另一个线程中使用它。这有什么问题吗?
  2. 我应该使用“共享缓存模式”吗?
  3. 我正在考虑使用一个锁在读取和写入之间进行同步,并且读取之间不会有任何同步。我也应该在读取之间同步吗?
  4. 是否在同一连接上进行并发多次读取工作
  5. 是否在不同的连接上同时进行多次读取工作

编辑:还有一个问题,如何验证连接,即我们在应用程序启动时打开连接,将使用相同的连接直到应用程序退出,所以在这个过程中,我们如何验证使用前的连接

提前致谢

问候 DEE

【问题讨论】:

    标签: concurrency connection sqlite


    【解决方案1】:

    1) 我不认为 SQLite 使用任何线程特定的数据,因此在一个线程上创建连接并在另一个线程上使用应该没问题(他们说对于 3.5 版以上的版本如此)

    2)我认为使用共享缓存模式不会有任何显着的性能优势,实验一下,每个线程只需一条语句即可启用它

    3) 您需要使用 Single-Writer-Multiple-Reader 类型的锁,使用简单锁将序列化所有读取和写入,并抵消使用多线程的任何性能优势。

    4 & 5) 任何读取操作都应该同时进行,没有任何问题。

    【讨论】:

    • 关于:如何验证连接的任何评论,即我们在应用程序启动时打开连接,将使用相同的连接直到应用程序退出,所以在这个过程中,我们如何使用前验证连接
    【解决方案2】:

    SQL Lite 常见问题解答详细介绍了线程。 Specific FAQ on threads 从 3.3.1 开始,在特定条件下按照您所说的去做是安全的(参见常见问题解答)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      相关资源
      最近更新 更多