【问题标题】:iOS optimal performance persistent data solution?iOS 最优性能持久化数据解决方案?
【发布时间】:2015-05-22 09:27:28
【问题描述】:

我正在构建一个基于 healthKit 的应用程序,并且想知道如何最好地持久保存 healthKit 数据。

我目前的方法是获取数据并将其保存为自定义类对象的属性,然后将其作为 NSData 保存在核心数据中。

在性能方面,Realm 比 CoreData 快吗?

根据http://qiita.com/moriyaman/items/1a2916f4c2b79e934370,CoreData 显然比 FMDB 慢,后者比 Realm 慢。即使考虑到故障和索引,有人可以确认这是否属实吗?

【问题讨论】:

    标签: ios core-data fmdb persistent-storage realm


    【解决方案1】:

    免责声明:我在 Realm 工作

    在您提到的解决方案中,哪种持久性产品性能最好的问题在很大程度上取决于您数据的类型/数量/频率。由于 Core Data 和 FMDB 是 SQLite 之上的层,它们在设计上不能比 SQLite 快,但它们提供了足够的便利,对许多用户来说是值得的。另一方面,Realm 不是基于 SQLite,而是它自己的自定义数据库引擎,专为现代智能手机设计。它旨在在强大的功能和简单的 API 之间取得更好的平衡,而不会对性能造成很大的影响。

    您可以在 Realm 的发布博客文章中查看比较 Realm/SQLite/Core Data/FMDB 的公共基准测试:http://realm.io/news/introducing-realm#fast

    最后,您使用 NSCoding 之类的方法将 HealthKit 信息序列化为 NSData 的方法将非常低​​效。无论您选择哪种持久性解决方案,使用这些产品内置的序列化而不是存储已经序列化的数据 blob 都会为您提供更好的服务。

    【讨论】:

    • “由于 Core Data 和 FMDB 是 SQLite 之上的层,因此它们在设计上不会比 SQLite 快。”这与说“C 构建在程序集之上,因此您编写的任何程序集都将比您编写的任何 C 更快,这是设计的”。这根本不是真的。简单编写的程序集可能比简单编写的 C 慢得多,而简单编写的 SQLite 可能比简单编写的 Core Data 慢得多。 SQLite 和 Core Data 处理问题的方式非常不同,而且很难直接比较性能,因为它们都会极大地影响您应该如何编写程序。
    • 我绝对同意将 ORM 与关系数据库与非关系数据库进行比较绝对不是苹果对苹果的比较,而且程序的编写方式也会产生重大影响。天真地编写代码总是会影响性能。程序员对所用工具的理解程度和经验也会产生重大影响。
    • @jpsim Realm 后端是基于 LMDB 的吗?是不是像 forntends 一样开源?
    【解决方案2】:

    正如我对 @jpsim 的评论,很难简单地将 Core Data 的性能与 FMDB 等较低级别的框架或 Realm 等不同抽象的框架进行比较。您选择哪种方法将极大地影响您构建程序的方式,这往往会将性能问题转移到不同的地方。

    Core Data 和 SQLite 解决了截然不同的问题。 SQLite 是一个关系数据库。 Core Data 是一个对象持久化引擎。我不是 Realm 方面的专家,但它似乎试图在这两种方法之间取得平衡,比 Core Data 提供的低级控制更多,但比 SQLite 更接近对象模型。 Realm(至少在我的印象中)为您提供了更多低级控制的事实为您提供了优化事物或将 IMO 搞砸的机会。这既不好也不坏,它只是让苹果对苹果很难比较它们,特别是使通用的“性能基准”成为问题。问题不在于 someone 是否有可能使用引擎 A 与引擎 B 编写更快的代码。问题是 是否可能在每个引擎中编写可接受的性能代码,同时避免错误,并最大限度地缩短开发时间。

    一般来说,我认为 HealthKit 数据应该存储在 HealthKit 中以保护隐私。无论如何,您应该小心将此数据存储在您自己的存储中。特别注意the guidelines about iCloud

    使用 HealthKit 框架在 iCloud 中存储用户健康信息的应用将被拒绝

    我不知道这将如何影响您存储然后备份到 iCloud 的文档。将数据留在 HealthKit 中是不必担心此类问题的最佳方法。

    不过,无论如何,性能只是要考虑的一个轴。您没有表示任何暗示您有非常特殊的性能问题(例如,您正在处理数万条记录或实时数据或类似的东西)。所以我会首先关注什么工具最能满足你的一般需求,然后做一些基本的实验,确保性能合理,然后在你发现问题时进行优化。

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      相关资源
      最近更新 更多