【问题标题】:Core Data model design — search vs relationships?核心数据模型设计——搜索与关系?
【发布时间】: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


    【解决方案1】:

    通常,我建议您使用策略二,并且仅在您在测试期间遇到性能问题时才花时间研究和开发其他技术。 Core Data 通常比人们想象的要快,尤其是在 iPhone 上。

    但是,如果您能够提前确定所有可能的搜索,那确实会给您带来优势。听起来就像创建了一封电子邮件,您会检查它并将其添加到所有适当的“搜索”对象中。我的直觉是,策略一会明显更快,尤其是在处理数以万计的电子邮件对象时。

    【讨论】:

    • 我同意 gerry3 并进一步补充说,一旦数据模型到位并可以测试其性能,您就可以在开发过程中添加搜索。您可以创建一个“测试”数据库,其中包含比您期望应用处理的数据多一个数量级的数据,然后针对该数据库进行测试以发现任何性能问题。
    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多