2016-05-10 9 views
0

私はSqlite.Swiftを使用しています。データベースにデータを追加するために3つの異なるタスクを実行します。各タスクは外部ソースからデータを取得します。複数のタスクを1つずつデータベースに実行する

は、だから私は何をしたいです:

  1. は、これは次の作業に進み、行われている最初の表
  2. にそれを追加します。最初のタスク
  3. のためのデータを取得
  4. これが完了したら、最後のタスクに進みます。
  5. 最後のテーブルに追加

今私はこのようにそれを持っている:

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

しかし、問題は、2000人以上の場所、100税2000人であるということですので、各タスクが完了するまでにある程度の時間がかかり、データベースが時にロックされますこれらは同時に実行しようとします。

誰でもこのタスクを一度に1つずつ行う方法はありますか?

+0

データベースがロックされているとはどういう意味ですか? – Anokrize

+0

非同期要求が多すぎるため、負荷が大きすぎます。 – Coder1000

答えて

0

NSOperationQueueを使用すると、昨年のWWDCの優れたvideo onlineがあります。

0

SQLiteは、あなたが使用するSwiftライブラリが何であれ、並行書き込みをサポートしていません。場所、税金、人物を並行して書くことはできません。

これは、複数の接続を開いている場合でも、ロックエラーが発生したためです。

あなたができることは、まず外部ソースからデータをメモリに読み込みます。これは並行して行うことができます。すべてのデータがロードされたら、それらを単一のトランザクションでデータベースに書き込むことができます(SQLiteは、トランザクション内で書き込みをグループ化するとより優れたパフォーマンスを発揮します)。

関連する問題