在早期开发过程中轻松迁移核心数据,此时数据丢失是可以接受的

Posted

技术标签:

【中文标题】在早期开发过程中轻松迁移核心数据,此时数据丢失是可以接受的【英文标题】:Easy Core Data migration during early development, when Data Loss is expected and acceptable 【发布时间】:2016-05-24 23:17:26 【问题描述】:

当 Core Data 应用程序处于早期开发阶段时,其托管对象模型通常处于不断变化之中。对于每个构建,都会在模型中添加或删除新的托管对象和属性。

当托管对象模型更改时,应用程序将在下次运行时崩溃并出现错误:

开店的型号和开店的型号不兼容

common advice in this situation 用于删除应用 from your device/simulator and re-run。

这对于使用 Xcode 的开发人员来说效果很好,但对于参与发布过程的非技术利益相关者来说却很烦人。最好不要向 CEO 或 QA 团队解释他们必须在从 TestFlight 安装更新之前删除应用程序。或字段由此问题引起的崩溃错误。

一旦模型完成了一点,我们将实施真正的核心数据迁移策略。

在此开发阶段,数据丢失是可以接受的,也是可以预期的。

此方法将在应用发布前被移除。

在版本之间“迁移”对托管对象模型的更改的最简单、轻量级、可移动的调试方法是什么?这可能相当于“删除应用并重新运行”,但无需手动删除应用。

这应该处理对核心数据堆栈的所有更改,包括添加和删除托管对象和属性。

【问题讨论】:

【参考方案1】:

在这种情况下,我会检查与当前模型的兼容性,然后如果需要迁移,则删除 SQLite 数据库。

考虑使用(在 Objective-C 中)

// error, sourceStoreURL, theManagedObjectModel are valid

NSDictionary *storeMetadata=[NSPersistentStoreCoordinator metadataForPersistentStoreOfType: NSSQLiteStoreType
    URL: sourceStoreURL error: &error];
BOOL storeIsCurrent=[theManagedObjectModel isConfiguration: nil
    compatibleWithStoreMetadata: storeMetadata];
if (!storeIsCurrent)

    // Alert user
    // Delete on-disk store via sourceStoreURL
    // (including -wal and -shm files if journaling enabled)

【讨论】:

执行此操作时,请确保删除除持久存储文件之外的日志文件 - 即同一位置的 -wal-shm 文件。否则你可能会发现旧数据实际上并没有消失。 谢谢@TomHarrington。我将编辑答案以包含这个关键点。【参考方案2】:

您可以在更改模型时更改商店 URL。

即使是早期开发,您也可以进行模型版本控制,然后在发布之前将它们全部删除。这也可以帮助您的团队了解模型版本控制的细节。

【讨论】:

以上是关于在早期开发过程中轻松迁移核心数据,此时数据丢失是可以接受的的主要内容,如果未能解决你的问题,请参考以下文章

助力银行核心下移,监控分布式数据库,融天鹰眼轻松应对五大挑战

北亚数据恢复MongoDB数据迁移过程中由于未知原因丢失_mdb_catalog.wt文件的MongoDB数据恢复案例

轻量级迁移核心数据

迁移复杂的核心数据模型

服务器数据恢复服务器迁移数据时数据丢失的数据恢复案例

Coredata轻量级迁移丢失数据