Ios 如何在FMDB中查询它';这是一个巨大的更新任务

Ios 如何在FMDB中查询它';这是一个巨大的更新任务,ios,objective-c,fmdb,Ios,Objective C,Fmdb,请看下面我的代码 在我们的需求中,一开始我们有很多数据库更新, 据我所知, 我怀疑任务A是否会让B等到A完成。如果它如我所说的那样工作,那么我希望任务A可以暂停,而我执行任务B,这将是完美的 我理解正确吗 如果我可以随时查询为B,而不等待A完成,那就太好了。(旧数据库不是空的,即使没有更新,也可以使用) 谢谢 FMDatabaseQueue *queue = [[FMDatabaseQueue alloc]init]; // A [queue inDatabase:^(FMDatabase *d

请看下面我的代码

在我们的需求中,一开始我们有很多数据库更新, 据我所知, 我怀疑任务A是否会让B等到A完成。如果它如我所说的那样工作,那么我希望任务A可以暂停,而我执行任务B,这将是完美的

我理解正确吗

如果我可以随时查询为B,而不等待A完成,那就太好了。(旧数据库不是空的,即使没有更新,也可以使用)

谢谢

FMDatabaseQueue *queue = [[FMDatabaseQueue alloc]init];
// A
[queue inDatabase:^(FMDatabase *db, BOOL *rollback) { 
    //a huge amount of inserts and updates
}];

// B
[queue inDatabase:^(FMDatabase *db, BOOL *rollback) { 
    // some easy querying task
}];

如果您同时启动两个队列,并且它访问同一个表,则可能会发生死锁

FMDatabaseQueue
将在序列化队列上运行块。因此,如果您同时从多个线程调用FMDatabaseQueue的方法,它们将按接收顺序执行


注意:对FMDatabaseQueue方法的调用被阻塞。因此,即使您正在传递块,它们也不会在另一个线程上运行。

我建议您使用数据库的克隆版本。如果更新任务->通过复制文件克隆数据库,则将读取路径指向克隆版本,并在完成更新时将读取路径指向原始数据库。但是,当您在工作副本上进行更改时,您应该处理另一件事情,如合并数据

我认为这是可行的,但成本太高。我相信web服务器开发人员这样做并不是为了解决像我这样的问题。没有FMDatabaseQueue,必须有更好的解决方案。是否有其他方法解决我的问题?最好使用FMDatabaseQueue作为其创建队列,并在执行时管理线程。