2011-10-27 14 views
7

Tengo un modelo CoreData que usa SQLite como almacén de persistencia. Necesito insertar un gran número de filas después de hacer algún procesamiento en cada registro. ¿Hay alguna manera de enviar los comandos a SQLiteinserciones masivas con SQLite y CoreData

PRAGMA synchronous=OFF 
PRAGMA count_changes=OFF 
PRAGMA journal_mode=MEMORY 
PRAGMA temp_store=MEMORY 

necesito para acelerar el tiempo de procesamiento, ya que toma par de horas en completarse.

Cualquier sugerencia será apreciada.

Gracias

Respuesta

12

Puede especificar los pragmas al agregar su tienda al coordinador de la tienda:

NSMutableDictionary *pragmaOptions = [NSMutableDictionary dictionary]; 
[pragmaOptions setObject:@"OFF" forKey:@"synchronous"]; 
[pragmaOptions setObject:@"OFF" forKey:@"count_changes"]; 
[pragmaOptions setObject:@"MEMORY" forKey:@"journal_mode"]; 
[pragmaOptions setObject:@"MEMORY" forKey:@"temp_store"]; 
NSDictionary *storeOptions = 
    [NSDictionary dictionaryWithObject:pragmaOptions forKey:NSSQLitePragmasOption]; 
NSPersistentStore *store; 
NSError *error = nil; 
store = [psc addPersistentStoreWithType:NSSQLiteStoreType 
      configuration: nil 
      URL:url 
      options:storeOptions 
      error:&error]; 

(Adaptado de Persistent Store Features)

le recomiendo encarecidamente que lea también "de manera eficiente Importación de datos" .

Documentación relacionada: NSSQLitePragmasOption Efficiently Importing Data

+0

gracias, usted ha salvado el pellejo con esta memoria journal_mode !!!! – SpaceDog

+0

Debe tener en cuenta las consecuencias que tiene el modo memoria: si ocurre algo malo (bloqueo, excepción, fuerza abandonada, ...) perderá los datos que se encuentran en el diario en memoria. Si esto es lo que quieres: ve por ello. –

+0

¿hay un modo journal_mode = OFF? – SpaceDog

Cuestiones relacionadas