IOS中的Sqlite3并发问题
Posted
技术标签:
【中文标题】IOS中的Sqlite3并发问题【英文标题】:Sqlite3 Concurrency Issue in IOS 【发布时间】:2013-10-07 13:04:48 【问题描述】:我在我的 ios 应用程序中使用 SQLite 3。它需要大量的读/写操作,其中许多是同时尝试的。这些函数中的大多数都在不同的线程中运行,但是访问的是同一个数据库。
以下是我想到的几种方法:
在每次数据库访问(读/写)时,我都会设置一个标志为database_open=YES
,如果发现是真的,我会在几秒钟后重试。我可以把函数放在数据库层本身。
在同一线程中运行所有数据库操作。但是,我的用例是我需要等待一些 HTTP 调用完成并将检索到的数据存储到 SQLite 中。对于这种方法,我必须使所有这些服务器调用也同步。不是最好的主意。
如果我想错了方向,请提出建议。
【问题讨论】:
离题:你应该试试FMDB。 FMDB 是线程保存的,并且有一个非常简单的 SQL 语句接口 或者,更准确地说,您可以使用 FMDB 的FMDatabaseQueue
,作为协调来自不同线程的数据库交互的机制,方法是拥有一个单独的串行队列,两个线程将调度任何数据库交互。即使您不使用 FMDB,您也可以使用这种模式来协调来自不同线程的数据库交互,拥有自己的串行队列,您可以将所有这些交互分派到该队列。
谢谢各位。这似乎解决了我的问题。我阅读了他们的 FMDatabaseQueue,它完全符合我的需要。 :)
【参考方案1】:
SQLitesupports concurrent access from multiple threads。只需配置 SQLITE_CONFIG_MULTITHREAD 模式,从每个线程单独打开数据库。
【讨论】:
以上是关于IOS中的Sqlite3并发问题的主要内容,如果未能解决你的问题,请参考以下文章