使用Core Data存储大量对象

时间:2013-11-12 16:38:02

标签: ios objective-c core-data

我对Core Data有点新,并且有一个普遍的问题。

在我目前的项目中,用户可以访问我所在州的各个传感器报告的数据。每个传感器都以表格视图表示,该视图从Web服务调用中收集其数据。调用Web服务可能需要一些时间,因为此应用程序可能在具有慢速无线连接的农村地区使用。此外,用户通常只需要来自该州55个县中的一个或两个的数据。每个县可以有由Web服务返回的15到500个项目。由于传感器名称和位置很少变化,我希望应用程序缓存来自Web服务调用的数据,以便更快地收集传感器位置列表(并为某些内容发生变化的情况提供刷新按钮)。该应用程序已使用Core Data存储已添加书签的传感器位置,因此已在应用程序中进行设置。

我的问题是是使用Core Data来缓存传感器列表,还是使用SqlLite数据存储。既然已经存在数据模型,我可以简单地将另一个实体添加到模型中。但是,我担心这是否会引入不必要的开销,或者根本不会产生任何开销。

作为Core Data的新手,似乎所有真正发生的事情都是对象被序列化并且它们的属性被添加为Core Data管理的SqlLite DB中的字段。如果是这种情况,那么使用已经存在的Core Data存储肯定不会有任何开销。

任何人都可以帮我解决这个问题吗?谢谢!

2 个答案:

答案 0 :(得分:1)

  

作为Core Data的新手,似乎所有真正发生的事情都是对象被序列化并且它们的属性被添加为Core Data管理的SqlLite DB中的字段。如果是这种情况,那么使用已经存在的Core Data存储肯定不会有任何开销。

情况并非总是如此。 Core Data隐藏了开发人员的存储实现。它有时是一个SQL数据库,但在其他情况下,它可以是不同的数据存储。如果您需要有关CoreData的综合指南,我建议this objc.io article

正如@CouchDeveloper所指出的,CoreData是一个磁盘io / CPU绑定进程。如果您注意到性能命中,请将其放入后台线程(是的 - 这是一个非常令人头痛的问题),但它总是比普通网络更快。

答案 1 :(得分:1)

  

似乎所有真正发生的事情都是对象   序列化及其属性作为字段添加到SqlLite DB中   由Core Data管理

你是对的。核心数据做得更多,但这是基本功能(如果你告诉它使用SQLite商店,这是大多数人所做的)。

对于要存储在Core Data中的记录数,这应该不是问题。我现在正在开发一个核心数据应用程序,它还可以在Core Data中存储超过20,000条记录,而且我仍然可以获得非常快的获取时间,例如在输入时自动完成。

核心数据肯定会增加一些开销,但如果您只有很少的参与和关系,并且没有在多个上下文中创建/修改对象,那么它可以忽略不计。