【发布时间】:2010-01-20 17:19:14
【问题描述】:
我熟悉 Core Data 基础知识,并且已经涉足过一些,但还没有真正做过任何主要的应用程序。现在我需要计划一个。这个问题并不是专门针对 Core Data,而是更多关于一般数据设计的问题,尽管我将使用 Core Data 在 iPhone 上实现它,这对于考虑性能很重要。
假设我正在制作一个电子邮件应用程序,其中电子邮件是核心对象。我需要在电子邮件商店中提供多个视图:按用户搜索以及许多其他条件:例如,“所有收件人超过两个的电子邮件”、“主题长于 X 的所有电子邮件”、“所有包含单词 X 的电子邮件"等。
某些对象,例如人(发件人/收件人),自然而然地适合被建模为一流的对象,因此我可以这样做并在人和电子邮件之间创建多对多关系。其他搜索,例如上面的一些示例,更加人为,没有自然的方法来建模它们。但是,我可以提前列举新的搜索,即我事先知道标准是什么。
因此,要执行“具有>2 个收件人的电子邮件”和“主题超过 X 的电子邮件”之类的操作,我认为我有两种策略:
1) 将它们建模为一个特殊的“搜索”对象,并在将新对象插入存储时在电子邮件和搜索对象之间创建多对多关系,因此在搜索时它是一个简单的连接查询;
2) 不对核心电子邮件对象之外的任何内容进行建模,只在运行时使用来自商店的谓词进行搜索。
我的问题是:
根据您对 Core Data 的直觉,从性能角度来看,这两种策略之间的差异有多大?我的直觉告诉我#1 总是会更快,但如果它是 10%,我愿意承受性能损失,以便使用 #2 更灵活。但如果 #2 会慢 200%,我需要在搜索对象建模和预生成所有搜索结果方面投入更多工作。
我知道确切的答案取决于数据的具体情况,但您一定有一种直觉 :) 假设有数万但不是数百万的内容对象,每条记录都是包含多个元数据字段的几段内容文本。
【问题讨论】:
标签: cocoa-touch performance core-data data-modeling