Я работаю над переносом объекта Core Data в Realm. В объекте может быть более 2 миллионов записей, поэтому я стараюсь сделать это максимально эффективно.Удаление объекта основных данных в блоке транзакций записи в реальном времени?
Миграция идет в партиях 10000 записей или около того, и следующий код, который я буду использовать, чтобы сделать это:
/// We're in a loop
/// Get the 10000 records out of Core Data
[realm beginWriteTransaction];
// samples is an NSArray of NSManagedObjects
NSInteger numberOfSamples = samples.count;
for (NSInteger i = 0; i < numberOfSamples; i++)
{
// WeightSample is an NSManagedObject
WeightSample *sample = samples[i];
//Diagnostic is an RLMObject
Diagnostic *weightSample = [Diagnostic new];
///
/// transfer data from WeightSample to Diagnostic
///
[realm addObject:weightSample];
// Remove the old sample from Core Data
[context deleteObject:sample];
}
[realm commitWriteTransaction];
/// Start over at the top of the loop
- я буду работать в каких-либо проблем, делающих
[context deleteObject:sample]
в блокbeginWriteTransaction-commitWriteTransaction
?
Мое предположение: «Нет, но я буду блокировать дольше», исходя из моего загадочного tweet @Realm и их ответа.
- Я могу разгрузить это в другую тему, не так ли?
Спасибо за ответ. Я немного обеспокоен тем, что знаю, какие * записи были преобразованы. Пользователь может легко отключить приложение в любой момент, и я бы не захотел перезапускать миграцию каждый раз. – churowa
Я полагаю, что я должен отслеживать, какие записи были преобразованы, когда я иду. Таким образом, если миграция будет убита, я могу избежать преобразования уже сделанных записей. – churowa
Поскольку мы имеем дело с несколькими миллионами записей, миграция займет какое-то время. Я предполагаю, что вы покажете пользователю какой-то индикатор активности или контролер представлений, если это произойдет, может быть хорошей идеей информировать пользователя в предупреждении или в указанном контроллере представления данных, что убийство приложения вызовет миграция для перезагрузки? Если дубликаты - это то, о чем вы беспокоитесь, у меня были бы первичные ключи (которые однозначно идентифицировали записи) в области, и использовать методы createOrUpate, я нашел их довольно эффективными. –