【问题标题】:Sqlite3 Concurrency Issue in IOSIOS中的Sqlite3并发问题
【发布时间】:2013-10-07 13:04:48
【问题描述】:

我在我的 iOS 应用程序中使用 SQLite 3。它需要大量的读/写操作,其中许多是同时尝试的。这些函数中的大多数都在不同的线程中运行,但是访问的是同一个数据库。

以下是我想到的几种方法:

  1. 在每次数据库访问(读/写)时,我都会设置一个标志为database_open=YES,如果发现是真的,我会在几秒钟后重试。我可以把函数放在数据库层本身。

  2. 在同一线程中运行所有数据库操作。但是,我的用例是我需要等待一些 HTTP 调用完成并将检索到的数据存储到 SQLite 中。对于这种方法,我必须使所有这些服务器调用也同步。不是最好的主意。

如果我想错了方向,请提出建议。

【问题讨论】:

  • 离题:你应该试试FMDB。 FMDB 是线程保存的,并且有一个非常简单的 SQL 语句接口
  • 或者,更准确地说,您可以使用 FMDB 的FMDatabaseQueue,作为协调来自不同线程的数据库交互的机制,方法是拥有一个单独的串行队列,两个线程将调度任何数据库交互。即使您不使用 FMDB,您也可以使用这种模式来协调来自不同线程的数据库交互,拥有自己的串行队列,您可以将所有这些交互分派到该队列。
  • 谢谢各位。这似乎解决了我的问题。我阅读了他们的 FMDatabaseQueue,它完全符合我的需要。 :)

标签: ios sqlite


【解决方案1】:

SQLitesupports concurrent access from multiple threads。只需配置 SQLITE_CONFIG_MULTITHREAD 模式,从每个线程单独打开数据库。

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2011-07-12
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多