我遇到了iOS核心数据性能问题。
假设我们有两个类:“Class_A”和“Class_B”。他们俩都有自己的ids和彼此之间的一对一关系。
现在让我们假设我从网上下载数据,允许我创建这些类(数据包含类A和B的ID,以及关于它们关系的信息)。例如:
因为所有这些信息都可以按随机顺序获得(例如,关于X和Y类之间的连接的信息可以在关于类X和Y的存在的信息之前下载),我使用了另一种实体:关系。< / p>
关系包含2个字段:class_A_id和class_b_id
每当我收到有关ClassA和ClassB之间关系的数据时,我都会使用相应的属性值创建Relationship实体的实例。
我正在迭代所有“关系”实体的实例,并尝试创建这样的正确关系:
在实现此算法后,我发现在Core Data中使用相当少量的对象时,它运行良好。 问题是我存储了数千个“关系”实体(关于它们的信息首先被下载),而关于“ClassA”和“ClassB”存在的信息的下载频率较低。
结果是,每次我尝试使用“关系”实体创建关系时,我都会获取包含不存在的类的id的数千个对象!
所以我对这个问题的解决方案是增强所提算法的第一步:
不是获取CoreData中的所有关系,而是仅获取包含系统中存在的类的ID的那些关键字。
在SQL中它可能看起来像这样:
SELECT * from 'Relationship' where
(SELECT * from 'ClassA' where id == class_A_id).count == 1
AND
(SELECT * from 'ClassB' where id == class_B_id).count == 1
我的问题是 - 如何在CoreData中实现这样的查询?在那里使用子查询?是的 - 怎么样? :)
答案 0 :(得分:0)
如果我理解正确,如果你不想修改你的模型太多,你有两个选择:
新的关系将是:
Relationships {
class_A_id,
class_B_id,
classAexists BOOL,
classBexists BOOL,
batchRelationshipCreated BOOL,
}
你还可以实现这两个选项: - )