массовые вставки с SQLite и CoreData - PullRequest
7 голосов
/ 27 октября 2011

У меня есть модель CoreData, которая использует SQLite в качестве хранилища данных. Мне нужно вставить большое количество строк после некоторой обработки каждой записи. Есть ли способ отправить эти команды в SQLite

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

Мне нужно ускорить время обработки, так как это занимает пару часов.

Любые советы будут оценены.

Спасибо

1 Ответ

12 голосов
/ 25 января 2012

Вы можете указать прагмы при добавлении магазина в координатор магазина:

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];

(адаптировано из Постоянные функции магазина )

Я настоятельно рекомендую такжепрочитайте «Эффективный импорт данных».

Связанная документация: NSSQLitePragmasOption Эффективный импорт данных

...