CoreData是否适合搜索大量数据?

时间:2012-11-24 19:35:44

标签: objective-c ipad core-data

在我的iPad应用程序中,我下载了大量的客户和订单历史信息,这些信息保存在内存中并在整个应用程序中使用。但是,对于某些用户来说,下载的数据量太大,导致应用崩溃。

我刚刚建立了一个CoreData商店,将所有客户和订单数据写入磁盘。在我进一步讨论之前,CoreData是最好的方法吗?我需要能够通过许多参数对这些数据集进行排序,并使用它们驱动表格视图(CoreData看起来非常适合),但我还需要查看整个数据集来驱动其他视图。例如,字母过滤器仅显示我有结果的字母。

2 个答案:

答案 0 :(得分:4)

核心数据绝对是首选技术。你会发现你可以很容易地解决所有问题并实现你提到的所有功能。

就iOS上的数据操作优化(性能和内存)而言,Core Data实际上是一个非常强大且经过良好测试的框架。如果你想最大化iOS设备的容量,几乎没有更好的东西。

作为一个例子,最近我参与了一个项目(也涉及大量的客户数据),这个项目已经存在了几年,在管理内存,速度和复杂性时只是碰壁了。对核心数据进行重构非常简单,性能提升非常可观。

Core Data成功的原因在于它完全隐藏了数据库层并专注于对象图。这导致更易读和可维护的代码(与SQL语句相反)。虽然理论上可以使用Core Data的几种商店,但最常见的是SQLite,即世界上安装次数最多的数据库。它在移动设备上无处不在,因为它速度快,占地面积小。

这使我得出结论,核心数据是您的最佳选择。

答案 1 :(得分:0)

我最近使用sqlite后备存储将我的应用程序从直接sqlite移植到核心数据。我有一个合理大小的数据库,大约有100,000条记录。我也花了很多时间来优化它

尽管所有的苹果doc和pr都说它高效,快速等等,但我发现,与直接sqlite相比,对于大量数据,它确实具有更高的内存要求并且速度明显更慢。快速搜索堆栈溢出将确认这一点。关于速度,内存要求等有很多未解决的问题。

特别是,插入和删除的速度要慢几个数量级。提取通常使用比直接sqlite更多的内存。在大多数情况下,核心数据会提取更多数据。例如,在直接sqlite中,您可以提取整数id,然后在需要时拉出其余数据。 coredata拉更多的数据做到了。删除要求您在删除数据之前将数据拉下来等。

如果您需要加密数据。这对核心数据来说是一个挑战,没有人真正能够提供可靠的加密,同时不会破坏像nspredicates这样的东西。 是否需要更少的代码来编写是有争议的。 肯定有一个陡峭的学习曲线。核心数据思维方式与关系数据库方法截然不同。

那你为什么要使用核心数据呢?它的附加功能,支持撤消,批量提取,管理对象更新和同步到iCloud(虽然这是非常错误到现在它无法使用)等等。它为你做的一些事情。您不需要管理主键,关系等。 在苹果生态系统中,由于icloud支持等新功能正在构建到核心数据中,因此它似乎是未来的证明。虽然如果你想去Android等它会破坏你的可移植性。