cru*_*ach 25 sql database sqlite core-data objective-c
我正在创建一个与Core Data一起使用的框架.在Core Data类上使用我的框架的一个要求是,您希望拥有Framework功能的任何实体都需要是我提供给您的实体的子实体和子类.为此,我将该对象称为Foo.
今天我意识到Core Data将所有作为Foo子实体的对象存储到一个名为ZFOO的表中.如果有大量数据集的人想要使用它,我担心Core Data的性能,因为foo类的所有子实体都将存储在一个巨大的ZFOO表中.
任何意见或建议将受到高度赞赏.
小智 36
我和@deathbob一起在这个项目上担任iOS主管.在我们的实例中,我有多个类,其中包含属性"remote_id"和"remote_update".我最初使用子类设置表.我有一个"RemoteEntity"抽象实体,它包含那些属性以及从它继承的一堆其他实体,每个实体都有自己的属性.我认为我们最终会得到一堆表,每个表都有remote_id,remote_update,然后是自定义属性.相反,我们最终得到了你描述的庞大的表格.
此修复程序是非常简单的,你必须不设置继承通过GUI.而是包括该对象的所有属性,包括Core Data建模器中的共享属性(这意味着"remote_id"和"remote_update"将出现在每个实体中.也就是说我们仍然可以使用子类.在生成模型的类之后,创建父实体的类.它不能在GUI中.它应该从NSManagedObject继承而在.m文件中属性应该使用@dynamic而不是@synthesize.现在你有了父类,是时候调整子类了将父类设置为RemoteEntity(在我的示例中)而不是NSManagedObject.然后删除超类中出现的任何属性(在我的示例中,"remote_id"和"remote_update").
这是我的超级类https://gist.github.com/1121689的一个例子.
我希望这会有所帮助,请提示@deathbob指出这一点.
Dea*_*bob 28
去年我参与了一个做同样事情的项目,我们将所有内容存储在核心数据中,核心数据中的所有内容都从一个具有一些共同属性的类继承而来.
我们的核心数据记录介于1k到10k之间,性能下降到我们重写它并删除共同祖先的程度.我记得简单的搜索花了几秒钟,插入/更新也很糟糕.只有在事情变得非常缓慢之后我们才开始破解数据库并在封面下注意到核心数据是将所有内容存储在一个表中.
对不起,我不记得具体的数字,最重要的是我们不得不重做它,因为它太慢了,而且不是太慢,就像高频交易太慢,但太慢,就像应用程序在尝试填充初始时崩溃一样查看核心数据.
所以,对于旧的iOS和旧硬件上的盐,我想说绝对不要这样做.