Core Data Inferred Migration – Automatic "lightweight" vs Manual
Posted
by ohhorob
on Stack Overflow
See other posts from Stack Overflow
or by ohhorob
Published on 2010-03-29T01:40:45Z
Indexed on
2010/03/29
1:43 UTC
Read the original article
Hit count: 339
I've updated the model of an existing iPhone app in some simple ways (remove attribute, add attribute, remove index), and can use automatic lightweight migration to migrate the persistent store.
Due to the typical size of the data set, the processing time is not insignificant, and warrants feedback for the user.
NSMigrationManager
provides a simple but useful migrationProgress
value that sends KVO notifications as the migration is performed. That forms the basis of providing feedback, however attempting to use an inferred model ([NSMappingModel inferredMappingModelForSourceModel:destinationModel:error:]
) results in drastically different timing for the exact same dataset.
Profile results on and original iPhone (2G)
Automatic inferred lightweight migration
PROFILE: CacheManager -migrateStore
PROFILE: 0.6130 (+0.6130) models loaded
PROFILE: 1.1759 (+0.5629) delegate -CacheManagerWillMigrate:
PROFILE: 1.2516 (+0.0757) persistent store coordinator loaded
PROFILE: 5.1436 (+3.8920) automatic lightweight migration completed
PROFILE: 5.5435 (+0.3999) delegate -CacheManagerDidFinishMigration:withError:
Manual inferred migration
PROFILE: CacheManager -migrateStore
PROFILE: 0.6660 (+0.6660) models loaded
PROFILE: 1.1471 (+0.4811) inferred mapping model generated
PROFILE: 1.4046 (+0.2574) delegate -CacheManagerWillMigrate:
PROFILE: 1.5058 (+0.1013) persistent store coordinator loaded
PROFILE: 22.6952 (+21.1894) manual migration completed
PROFILE: 23.1478 (+0.4525) delegate -CacheManagerDidFinishMigration:withError:
So, with an inferred model, the manual migration takes over 5 times longer than automatic!
It's a big inconsistency, and the lightweight option that NSPersistentStoreCoordinator -addPersistentStoreWithType:configuration:URL:options:error:
provides absolutely no indication of progress while processing.
Can anybody provide a supported way to get the migrationProgress
values during automatic migration, OR a way to configure an inferred mapping model to be as fast during manual processing as automatic?
© Stack Overflow or respective owner