核心数据模型设计 - 搜索与关系?

时间:2010-01-20 17:19:14

标签: cocoa-touch performance core-data data-modeling

我熟悉Core Data的基础知识并做了一些尝试,但还没有真正做过任何主要的应用程序。现在我需要计划一个。问题不是关于核心数据,而是关于数据设计的更多内容,尽管我将使用Core Data在iPhone上实现它,这对于考虑性能非常重要。

想象一下,我正在制作一个电子邮件应用,其中电子邮件是核心对象。我需要在电子邮件商店中提供多个视图:按用户搜索以及许多其他条件:例如,“所有包含两个以上收件人的电子邮件”,“主题长于X的所有电子邮件”,“包含单词X的所有电子邮件” “等等。

某些对象,如人(发件人/收件人),自然适合被建模为一流的对象,因此我可以做到这一点,只需在人和电子邮件之间创建多对多的关系。其他搜索(例如上面的一些示例)更加人为,并且没有自然的方法来对它们进行建模。但是,我能够提前列举新的搜索,即我事先知道什么是标准。

所以,要做一些事情,例如“带有> 2个收件人的电子邮件”和“主题长于X的电子邮件”,我认为我有两个策略:

1)将这些模型建模为一个特殊的“搜索”对象,并在将新对象插入存储时创建电子邮件和搜索对象之间的多对多关系,这样在搜索时它就是一个简单的连接查询;

2)不要对核心电子邮件对象之外的任何内容进行建模,只是在运行时使用来自商店的谓词进行搜索。

我的问题是:

根据您的核心数据直觉,从性能角度来看,这两种策略之间的差异有多大?我的直觉告诉我#1总是会更快,但如果它是10%,我愿意接受性能打击,以便更灵活地使用#2。但如果#2的速度慢了200%,我需要投入更多的工作来建模搜索对象,并基本上预先生成所有的搜索结果。

我知道确切的答案将取决于数据的具体情况,但必须有一种直觉感觉:)让我们说有成千上万但不是数百万的内容对象,每条记录都是几段内容文本,包含多个元数据字段。

1 个答案:

答案 0 :(得分:2)

通常情况下,如果您在测试过程中遇到性能问题,我建议您选择策略二,只花时间研究和开发其他技术。核心数据通常比人们对iPhone的想法更快。

但是,如果您能够提前确定所有可能的搜索,那确实会给您带来优势。这听起来就像创建了一个电子邮件,你会检查它并将其添加到所有适当的“搜索”对象。我的直觉是,策略一会快得多,特别是成千上万的电子邮件对象。