【发布时间】:2017-08-27 14:26:16
【问题描述】:
我已经上网,但几个小时后还没有意识到使用谓词或关系来获取数据以获得最佳性能是否更好。这是我的场景,假设我有两个实体Entity A 和Entity B 和Entity A 与Entity B 具有一对多 关系。 Entity A -->> Entity B
两者都从 Web 服务获取信息,然后使用 relationships 选项,我首先从 Entity 获取信息,填写 Entity B,当我填写 Entity A 时,我需要执行从Entity B 获取与我的Entity A 有关系(这对于我的Entity A 中的每条记录)假设对于一个id 字段, 并且每个匹配项都必须添加到核心-数据关系。
另一方面,没有关系,我只需要填写两个实体,当我需要来自Entity B 的与Entity A 相关的记录时,只需执行一个带有 谓词指的是 id 字段,仅此而已。
乍一看,第一种情况使用引用似乎效率较低,但不知道使用关系是否对后续有更优越的表现搜索和应用程序的整体操作。
我希望有人可以帮助我澄清我的疑问。谢谢
【问题讨论】:
-
如果你有太多的属性并且并不总是需要所有的东西,并且计划在未来使用更多的关系,使用两个关系。否则,只使用一个对象。应该衡量“绩效”。 0.01 秒对你来说是不是太多了?或者,也许您正在导入数百万个对象?谁知道。你试过什么了 。为什么不直接创建一个空项目并使用您的特定用例对其进行测试?
-
感谢您的回复 偷偷摸摸,我的目的是了解 coredata 中关系的好处,我没有证明创建项目并测试这两种情况,因为我由于获取和添加过程,认为第一种情况需要更多时间。更具体地说,我的表 A 最多包含 1k 条记录,但我的表 B 至少可以容纳 100k
-
我明白了。好吧,你的表中包含的项目数量并不是最重要的,因为 iOS/CoreData 和 NSFetchedResultsController 会为你管理内存。除非您在没有 NSFCtrl 的情况下手动执行所有这些操作。即使您在一个对象中有许多没有关系的属性,您也可以指定要获取的属性以避免使用比您需要的更多的内存。您应该阅读有关故障的信息:developer.apple.com/library/content/documentation/Cocoa/…。另外,我建议您不要关注“性能”,而是关注您的结构......
-
..也就是说,你如何在你的CoreData图中保持一个好的结构,如果你用关系扩展结构,最好有一个“干净”的结构计划而不是卡在上面性能部分,因为如果您根据文档做所有事情,那么您所要求的性能提升是不明显的,如果有的话。在此处阅读有关获取特定属性的更多信息:developer.apple.com/documentation/coredata/…
-
我编辑了您的帖子,因为您将 CoreData 实体称为“表格”,这让我很困惑认为您在谈论 TableViews,如果您将 CoreData 视为一个数据库。 stackoverflow.com/questions/26599599/…