У меня довольно крупная схема базы данных на основе Core Data (~ 20 объектов, более 140 свойств), которая претерпевает большие изменения по мере ее миграции из нашей базы кода 1.x к нашей кодовой базе 2.x.Основные методы миграции данных: движущийся атрибут -> смоделированные отношения
Я очень хорошо знаком с выполнением облегченных миграций, но я немного смутил эту конкретную миграцию, потому что существует несколько объектов, которые использовали для хранения связанных объектов в качестве преобразуемых атрибутов для самой сущности, но теперь я хочу выполнить миграцию для фактических лиц.
Это похоже на пример того, когда вы должны использовать тяжелую миграцию вместо легкого, но я тоже не очень этому рад. Я не знаком с тяжелыми миграциями, у одного из объектов, у которых этот преобразованный массив -> смоделированное преобразование отношений, занимает ~ 90% строк в базе данных, эти базы данных имеют размер более 200 МБ, и я знаю хорошая часть наших клиентов использует iPad 1s. Это в сочетании с повторными предупреждениями в документации Apple и превосходной базой данных Core of Marcus Zarra относительно скорости и использования памяти в результате большой миграции заставляет меня очень осторожно и искать другой способ справиться с этой ситуацией.
Сессия 118 «Учет основных данных» WWDC 2010 118 (slides here) требует входа в систему с 9-го по последний слайд с заголовком «Пост-обработка миграции», о чем я говорю) упоминает способ сортировки работы это - выполнение миграции, а затем использование метаданных хранилища для определения того, была ли выполнена пользовательская пост-обработка, которую вы хотите выполнить. Я думаю, что это может быть способ пойти, но он чувствует себя немного взломанным (из-за отсутствия лучшего слова) для меня. Кроме того, я беспокоюсь о том, чтобы оставить атрибуты, висящие вокруг, которые на практике устарели. ех. если я перейду атрибут barArray объекта foo в отношения между сущностью foo и строкой сущности, а я noil out barArray, barArray все еще существует как атрибут, который можно записать и прочитать. Потенциальным способом решения этой проблемы было бы сигнализировать о том, что эти атрибуты устарели, изменив их имена, чтобы они «устарели» впереди, а также, возможно, переопределили аксессуры для утверждения, если они используются, но с KVO нет гарантированного компиляции которое не позволит людям использовать их, и я не хочу оставлять «код ловушки» вокруг, тем более, что «код ловушки» должен быть примерно до тех пор, пока у меня потенциально есть клиенты, которым все еще нужно перейти с 1.0.
Это превратилось в большую свалку мозга, чем я предполагал, поэтому для ясности мои вопросы:
1) Является ли тяжелая миграция особенно плохим выбором с ограничениями, с которыми я работаю? (бизнес-критическое приложение, отсутствие опыта работы с большими миграциями, базы данных размером более 200 МБ, десятки тысяч строк, клиенты, использующие iPad 1 с iOS 5+)
2) Если это так, описан способ последующей обработки миграции на сессии 118 мой лучший выбор?
3) Если да, то как я могу отменить/в конечном итоге устранить эти «устаревшие» атрибуты, чтобы они больше не загрязняли мою базу кода?