使用 CoreData 备份到物理文件
Backup into physical file using CoreData
我打算在一个 macOS 应用程序中使用 CoreData 来处理每秒变化的大约 100 MB,大小不应显着增加。
CoreData 的关系特性正是我所需要的。
为了不丢失任何数据,我必须非常小心,所以我想创建一些可以作为备份存储的物理文件。
CoreData 是否已经有一个辅助函数来执行此操作,还是我必须自己编写它?
最接近的内置选项是 NSPersistentStoreCoordinator
方法 migratePersistentStore:toURL:options:withType:error:
。它采用现有的持久存储并将其保存在新位置。 (请注意,此方法与迁移到更新版本的数据模型无关)。但是,当此方法完成时,旧的持久存储将从持久存储协调器中删除,除非您重新添加它,否则无法使用。
另一种选择是更改日志模式。最近的 OS 版本使用了预写日志记录,但仍然支持旧的 "delete" 模式。在这种情况下,您可以使用 NSFileManager
方法简单地复制持久存储文件。 Apple 的 Technical Q&A QA1809 中对此进行了描述。如果你这样做并且你使用 Core Data 的外部二进制支持,你需要找到并复制用于二进制 blob 的目录。
我打算在一个 macOS 应用程序中使用 CoreData 来处理每秒变化的大约 100 MB,大小不应显着增加。 CoreData 的关系特性正是我所需要的。 为了不丢失任何数据,我必须非常小心,所以我想创建一些可以作为备份存储的物理文件。 CoreData 是否已经有一个辅助函数来执行此操作,还是我必须自己编写它?
最接近的内置选项是 NSPersistentStoreCoordinator
方法 migratePersistentStore:toURL:options:withType:error:
。它采用现有的持久存储并将其保存在新位置。 (请注意,此方法与迁移到更新版本的数据模型无关)。但是,当此方法完成时,旧的持久存储将从持久存储协调器中删除,除非您重新添加它,否则无法使用。
另一种选择是更改日志模式。最近的 OS 版本使用了预写日志记录,但仍然支持旧的 "delete" 模式。在这种情况下,您可以使用 NSFileManager
方法简单地复制持久存储文件。 Apple 的 Technical Q&A QA1809 中对此进行了描述。如果你这样做并且你使用 Core Data 的外部二进制支持,你需要找到并复制用于二进制 blob 的目录。