Самый быстрый способ вставить много строк в sqlite db на iPhone

Может кто-нибудь объяснить, как лучше всего вставить много данных на iPhone с помощью FMDB? Я вижу такие вещи, как использование команды beginTransaction. Честно говоря, я не уверен, что делают это или setShouldCacheStatements. Я следил за кодом, который до сих пор делал мой коллега, и вот как это выглядит:

BOOL oldshouldcachestatements = _db.shouldCacheStatements;
[_db setShouldCacheStatements:YES];
[_db beginTransaction];
NSString *insertQuery = [[NSString alloc] initWithFormat:@"INSERT INTO %@ values(null, ?, ?, ?, ?, ?, ?, ?);", tableName];
[tableName release];
BOOL success;

bPtr += 2;
int *iPtr = (int *)bPtr;
int numRecords = *iPtr++;

for (NSInteger record = 0; record < numRecords; record++) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    // Some business logic to read the binary stream  

    NSNumber *freq = aFreq > 0 ? [NSNumber numberWithDouble:100 * aFreq / 32768]: [NSNumber numberWithDouble:-1.0];

    // these fields were calculated in the business logic section
    success = [_db executeUpdate:insertQuery,
               cID,                                                                                                   
               [NSNumber numberWithInt:position],                                                                       
               [NSString stringWithFormat:@"%@%@", [self stringForTypeA:typeA], [self stringForTypeB:typeB]],     // methods are switch statements that look up the decimal number and return a string
               [NSString stringWithFormat:@"r%i", rID],                                                               
               [self stringForOriginal:original],                                                                    
               [self stringForModified:modified],                                                                    
               freq];

    [pool drain];
}
[outerPool drain];

[_db commit];
[_db setShouldCacheStatements:oldshouldcachestatements];

Это самое быстрое, что я могу сделать? Является ли написание ограничением sqlite? Я видел это:http://www.sqlite.org/faq.html#q19и не был уверен, является ли эта реализация лучшей для fmdb, или есть ли что-то еще, что я могу сделать. Некоторые другие коллеги упомянули что-то о массовых вставках и их оптимизации, но я, честно говоря, не уверен, что это значит, поскольку это мое первое знакомство с sqlite. Любые мысли или направления, которые я могу исследовать? Спасибо!

13
задан Crystal 2 August 2012 в 19:06
поделиться