一次向数据库执行多个任务

时间:2016-05-10 18:28:51

标签: swift multithreading sqlite thread-safety

我正在使用Sqlite.Swift,我想执行三项不同的任务来将数据添加到我的数据库中。每项任务都将从外部来源获取数据。

所以我想做的是:

  1. 获取第一项任务的数据
  2. 将其添加到第一个表格
  3. 完成后,继续下一个任务
  4. 将其添加到第二个表格
  5. 完成后,继续执行上一个任务
  6. 将其添加到最后一个表格
  7. 现在我只有这样:

    dataService.getPlaces()
    dataService.getTaxes()
    dataService.getPersons()
    

    但问题是有超过2000个地方,100个税和2000个人,所以每个任务都需要一些时间才能完成,当数据库试图同时运行时数据库会被锁定。

    任何人都知道如何一次完成这项任务?

2 个答案:

答案 0 :(得分:0)

使用NSOperationQueue,去年的WWDC有一个很好的video online

答案 1 :(得分:0)

SQLite,无论您使用什么样的Swift库,都不支持并发写入:您无法并行编写场所,税收,人员。

即使你打开多个连接也是如此,因为我猜你做错了。

您可以做的是:首先从内存中的外部源加载数据。这可以并行完成。加载完所有数据后,您可以在单个事务中将它们写入数据库(当您在事务中对写入进行分组时,SQLite的执行效果会更好。)