【发布时间】:2012-02-06 22:59:59
【问题描述】:
在首次启动 iOS 应用程序时,我从 Web 服务导入了大约 18,000 条相互关联的各种实体的记录。这些记录具有来自网络数据库的自己的唯一标识符。我反复阅读了苹果的文档、cimgf 的博客文章、Marcus Zarra 的核心数据书籍,并一遍又一遍地观看了 iDeveloper TV 的核心数据系列。如果不将实体 B、C 和 D 保留在内存中或执行昂贵的提取并维护实体之间的关系,我无法找到导入实体 A 的方法。如果我不使用核心数据,我可以只使用已经建立的唯一标识符,并且导入会更快。
如果您有任何建议,我会全力以赴。
我们已在 Android 中实施此策略,导入需要约 2.5 分钟,而在不同设备上的硬件相当的 iOS 上,导入需要约 6 分钟。缩短导入时间对我们的用户来说至关重要,所以我无法在这个问题上妥协。提前感谢您的帮助。
编辑:
这是我目前的做法 - 我创建了一个 NSOperation 来创建它自己的上下文。我首先导入实体 B、C 和 D,并为每个实体类型保留一个数组。然后我导入实体 A 并使用谓词过滤实体 B、C 和 D 的数组,以便将实体 A 与 B、C 和 D 中的适当实体相关联。我以优化的间隔批量保存上下文根据我当前导入的实体类型而有所不同。
我不只是导入一个表,我正在导入许多相互关联的表。因此,如果我导入实体 B,我必须将实体 B 保留在内存中,或者在需要将实体 B 与实体 A 关联时获取它。有意义吗?
【问题讨论】:
-
我用更多信息编辑了这个问题。
-
数据是什么?它是每个用户唯一的还是每个人都有相同的 18k 记录?
-
每个用户唯一。由于用户也使用应用程序,因此我必须在初始同步后进行增量同步。
-
@RossChapman +1 回答您的问题。这很有趣。我有兴趣购买关于 CD 的 iDeveloper'TV 系列。你能说点什么吗?提前谢谢你。
-
强烈推荐,并发编程、核心动画、单元测试系列。我从这些书上学到的东西比我读过的书要多,但我从视频中学到的东西比书本上的要好,所以你的里程可能会有所不同。