2017-09-05 7 views
0

私はEncrypted CoreData Sqlite Storeを使用してCoreDataスタックを暗号化しています。私は400kを超えるレコードを格納するデータベースを持っています。私はいくつかの活動に基づいてそれらのレコードの大部分を削除したい。私がする必要があるこの暗号化されたストアのバッチ削除が利用できないので、データを読み込むためにフェッチ要求を実行します。暗号化されたコアデータは、400k +レコードを削除するのにかなり時間がかかります

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MyEntity") 
fetchRequest.includesPropertyValues = false 
// Fetch data till minimum threshold limit 
let newPredicate = NSPredicate(format: "%K <= %@", "recordTime", NSNumber(value: maxAllowedTimeStamp as Int64)) 
fetchRequest.predicate = newPredicate 
let objectsToDelete = myDataController.executeFetchRequest(fetchRequest) as? [NSManagedObject] 

私は、オブジェクトの動作一つ一つを削除実行したより:この操作はより7-8分を取っている

for object in objectsToDelete { 
    myDataController.deleteManagedObject(object) 
} 

。私は、コアデータが障害オブジェクトを提供するのに十分速いと信じています。フェッチ時間を短縮するためにプロパティ値を取っていない私の述語を見ることができるので、この長い時間がかかりません。

オブジェクトを削除するのに何が時間がかかるのか理解してくれる人がいますか?

+0

こんにちはKappil バッチ削除のオプションは、データ全体を反復処理し、削除するのに多くの時間がかかるため、最適です。このリンクを試してくださいhttps://stackoverflow.com/questions/23201917/ios-core-data-encryption#answer-23203728データの暗号化/セキュリティについては、バッチ削除を試してください –

答えて

0

何時までに400k個のオブジェクトを1つずつ削除しているのですか?それは暗号化されたものではなく、少なくともそれを中心にしたものではありません。この種の操作は常に遅く、バッチ削除が追加された理由です。

バッチ処理を行わずにこのレコードを削除するのは、基本的には非常に遅い処理です。バッチ削除を使用できない場合は、なぜこの多くのオブジェクトを削除する必要があるのか​​、それを避けることができるのかを真剣に考える必要があります。たぶんあなたがそれらをすべて削除するつもりなら、そんなにたくさん作成しないでください。あるいは、それらを削除しないでください。一度作成したのであれば、後でそれらを作成してしまう可能性があります。また、ユーザーアカウントデータのオフラインキャッシュの場合は、そのデータをすべて取得しないこともあります。または、オブジェクトを1つずつ削除する代わりに、永続ストアファイルを削除して削除を処理することもできます。

+0

同じプロセスでCoreDataで約150秒かかります。メモリ警告を発生させ、暗号化されたストアでは5分以上かかるためメモリ警告が発生し、クラッシュします。だから私は推測するこの暗号化されたストアで何かが間違っています。 –

+0

まだ150秒はばかげて長い時間です。私は私の分析に立っている。暗号化によってさらに悪化する可能性がありますが、それほど重大ではないので、それは本当に重要ではありません。 –

関連する問題