【发布时间】:2010-10-13 04:50:09
【问题描述】:
我有一个使用数据库存储的核心数据模型,其中包含具有经典父/子关系的实体。每个父级有多个子级,每个子级是一个父级,创建了多级层次结构。
我想做的是在获取请求中使用谓词来返回给定实体和根之间的所有实体的列表。
如果我在代码中执行此操作,我会沿着“父”链向上工作,直到找到根实体,但我想在谓词中执行此操作,以便搜索保持“在数据库中” .这将是搜索的一部分,因此需要相对较快。
这可能吗?
【问题讨论】:
我有一个使用数据库存储的核心数据模型,其中包含具有经典父/子关系的实体。每个父级有多个子级,每个子级是一个父级,创建了多级层次结构。
我想做的是在获取请求中使用谓词来返回给定实体和根之间的所有实体的列表。
如果我在代码中执行此操作,我会沿着“父”链向上工作,直到找到根实体,但我想在谓词中执行此操作,以便搜索保持“在数据库中” .这将是搜索的一部分,因此需要相对较快。
这可能吗?
【问题讨论】:
谓词被硬连线以在关系图中横穿未知数量的对象。您必须具体告诉它要遍历哪些实体和关系。你不能说,“遍历某某关系,直到你达到零。”
过早的优化是万恶之源。我不会担心在活动对象中遍历关系的速度。在这些事情上,Core Data 比您预期的要快得多。要在这种情况下进行优化,请设置为故障获取,以便仅加载关系不加载数据,我认为您不会遇到速度问题。
顺便说一句,注意你的命名法,实体对托管对象就像类对实例一样。实体是抽象的、具体的托管对象。实体只是数据模型的属性。例如,在这种情况下,您可能在数据模型中只有一个自引用实体,可用于创建由数百万个托管对象组成的图形。
您可以像查找超类一样查找父实体,但这实际上并不是您要问的。
【讨论】:
我认为使用父/子关系在一次往返中不可能做到这一点。但是,还有其他方法。如果您担心性能(并已对其进行测量以验证这实际上是您的平均数据集的问题),您可能会发现这很有帮助:Storing Hierarchical Data in a Database
【讨论】: