3

我正在使用 FMDB 访问标准的 iOS 内部 SQLite 数据库,在多个线程之间共享一个 db 连接。

为了使其线程安全,我一次将对数据库的访问锁定为一个代码块。一切都很好,尽管显然现在对数据库的访问有点瓶颈。

我的问题是:只要它们都是只读的 SELECT 语句,我可以通过允许来自多个线程的同时查询来缓解这个问题吗?

我在任何地方都找不到答案。

4

2 回答 2

3

您不能使用同一连接同时执行多个查询。

但是,对于纯只读访问,您可以使用多个连接。

于 2013-01-19T13:36:44.310 回答
1

每个线程可以有一个FMDatabase对象。您可能必须编写代码来测试真正的繁忙情况并正确处理它们。例如设置busyRetryTimeout适合您的情况(例如,您希望它在争用情况下重试多长时间)。如果超时到期并且您的数据库查询失败,也可以优雅地处理。

显然,使用共享FMDatabaseQueue是从多个线程进行数据库交互的最简单方法。请参阅 FMDB 的使用 FMDatabaseQueue 和线程安全部分README

于 2013-01-19T15:14:29.867 回答