【问题标题】:Is CoreData suitable for searching against large amounts of data?CoreData 是否适合搜索大量数据?
【发布时间】:2012-11-24 19:35:43
【问题描述】:

在我的 iPad 应用程序中,我下载了大量客户和订单历史信息,我将这些信息保存在内存中并在整个应用程序中使用。然而,对于某些用户而言,下载的数据量变得如此之大,以至于应用程序崩溃了。

我刚刚设置了一个 CoreData 存储来将所有客户和订单数据写入磁盘。不过,在我进一步讨论之前,CoreData 是解决此问题的最佳方法吗?我需要能够通过多个参数对这些数据集进行排序并使用它们驱动表视图(CoreData 似乎非常适合),但我还需要查看整个数据集以驱动其他视图。例如,一个字母过滤器,它只显示我有结果的字母。

【问题讨论】:

  • 定义“大”,另外,请提供有关您正在处理的数据的信息。
  • 我还没有进行彻底的分析,但我知道对于最终导致应用程序崩溃的用户来说,这已经结束了。这些数据对于客户(姓名、一些地址字段、电子邮件地址、一些其他元数据)、订单(客户元数据、定价信息、订单商品)和订单商品(SKU、价格、订购数量等)非常典型。

标签: objective-c ipad core-data


【解决方案1】:

Core Data 绝对是首选技术。您会发现您可以很轻松地解决所有问题并实现您提到的所有功能。

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

例如,最近我参与了一个项目(也涉及大量客户数据),该项目已有几年历史,在管理内存、速度和复杂性方面简直碰壁了。对 Core Data 进行重构非常容易,而且性能提升是巨大的。

Core Data 成功的原因在于它完全隐藏了数据库层,专注于对象图。这导致代码更具可读性和可维护性(与 SQL 语句相反)。虽然理论上您可以在 Core Data 中使用多种存储,但最常见的一种是 SQLite,它是世界上安装数量最多的数据库。由于速度快且占用空间小,它在移动设备上无处不在。

这使我得出结论,Core Data 是适合您的方式。

【讨论】:

  • @pst 添加了更多解释。
【解决方案2】:

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

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

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

如果您需要加密数据。这是核心数据中的一个挑战,没有人真正能够提供可靠的加密,同时又不破坏诸如 nspredicates 之类的东西。 它是否需要编写更少的代码是有争议的。 肯定有一个陡峭的学习曲线。核心数据的思维方式与关系型数据库有很大的不同。

那么为什么要使用核心数据?它的附加功能,支持撤消,批量获取,为您管理对象更新并同步到 iCloud(尽管这非常有问题,以至于它现在无法使用)等等。它为您做了一些事情。您不需要管理主键、关系等。 在苹果生态系统中,考虑到 icloud 支持等新功能正在构建到核心数据中,这似乎是未来的证明。虽然如果你想去安卓等,它确实会扼杀你的便携性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2015-05-13
    • 2014-09-19
    • 1970-01-01
    • 2011-06-28
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多