代码之家  ›  专栏  ›  技术社区  ›  Jaanus

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

  •  2
  • Jaanus  · 技术社区  · 15 年前

    我熟悉核心数据的基础知识,做过一些尝试,但没有真正做过任何主要的应用程序。现在我需要计划一个。问题不在于核心数据,而在于总体上的数据设计,尽管我将使用核心数据在iPhone上实现它,这对于考虑性能很重要。

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

    有些对象,比如人(发送者/接收者),自然地将自己建模为一流的对象,所以我可以这样做,并在人和电子邮件之间创建多对多的关系。其他搜索,例如上面的一些例子,更为人为,没有自然的方法来建模它们。但是,我能够提前枚举新的搜索,也就是说,我事先知道什么是标准。

    因此,要做“有两个收件人的电子邮件”和“主题长于X的电子邮件”,我认为我有两个策略:

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

    2)不要建模核心电子邮件对象之外的任何东西,只需在运行时使用存储中的谓词进行搜索。

    我的问题是:

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

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   gerry3    15 年前

    通常,我建议您使用策略2,如果您在测试过程中遇到性能问题,那么只需花时间研究和开发其他技术。核心数据通常比人们想象的要快,尤其是在iPhone上。

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