我使用FMDB访问标准的iOS内部SQLite数据库,在多个线程之间共享一个数据库连接。
为了使线程安全,我一次将对db的访问锁定到一个代码块。一切都运行良好,虽然现在显然是对数据库的访问是一个瓶颈。
我的问题是:我是否可以通过允许来自多个线程的同步查询来缓解这一点,只要它们都是只读SELECT语句?
我无法在任何地方找到答案。
答案 0 :(得分:3)
您无法使用相同的连接同时执行多个查询。
但是,对于纯粹的只读访问,您可以使用多个连接。
答案 1 :(得分:1)
每个线程可以有一个FMDatabase
对象。您可能必须编写代码来测试真正繁忙的条件并正确处理它们。例如,设置适合您情况的busyRetryTimeout
(例如,您希望它在争用情况下重试多长时间)。如果超时到期且数据库查询失败,也可以正常处理。
显然,使用共享FMDatabaseQueue
是从多个线程进行数据库交互的最简单方法。请参阅FMDB README
的{{3}}部分。