如何决定使用什么[Sqlite,Realm,CoreData,User-default,JSON文件]来存储数据iOS



在搜索到处之后,我发现SQLite,Realm,CoreData,UserDefaults和JSON文件之间没有更合适的比较。

您可以轻松找到优缺点,但很难知道要使用什么。

我知道这个决定完全取决于要求。但仍然必须有一种方法来做出决定。

假设以下情况,哪些选项最适合个人,为什么?

  1. 保存用户观看历史记录[海量数据,仅插入和删除操作]
  2. 保存联系电话[最多1000个号码,需要快速获取和连续操作]
  3. 保存简单的 GET API 请求 [用于缓存]

注意:我在这里不是在谈论存储敏感信息。

请随时添加/更新更多相关案例。

数据存储实现的大部分只是SQLite包装器。最常见的iOS实现是SQLite,ORM,CoreData,Realm,Keychain。

实现的另一部分只是一个简单的文本。例如,UserDefaults只是一个XML文件,您可以使用简单的iOS API对其进行编辑。但是,当您使用数十个以上的元素时,出于性能原因,SQLite 包装器更有用。

那么,SQLite包装器呢?

  1. 您可以使用钥匙串,但它有几个缺点:这不是线程安全的,您只能在允许的应用程序时刻获取数据,有时会为现有元素返回不正确的结果。这对于密码很有用,仅此而已。
  2. CoreData有原生API,但它有内存泄漏的缺点,API复杂,这不是一个线程安全的数据库,性能不好。
  3. SQLite。首先,您可以使用具有 11KB 依赖项的本机 C 库。缺点:旧式C API,原始SQL查询。
  4. SQLite Swift wrapper.在这种情况下,您必须使用第三方库。但表现良好。
  5. 领域。这确实执行良好且易于使用。但是它有一个线程安全的缺点。ORM 和 Realm 的区别在于,Realm 中的对象不是存储为一个明显的表,它有它自己的魔力,如何将数据转换为表表示。
  6. 火力数据库。我没有在制作中使用此库。它已将在线实施作为主要功能。我不确定使用主内部数据库是否正确。

总结呢?

在我们的测试中,SQLite(Wrapper,纯C)和Realm具有几乎相同的性能。CoreData还不够好。

SQLite 包装器和 Realm 有足够好的 API。

唯一的SQLite包装器实际上是线程安全的。

在iOS中保存数据的可用选项。

用户默认值:Quicky 保留少量数据。

可编码(NSCoder):用于保存自定义对象。

钥匙串:安全存储少量数据。

SQLite:持久化大数据,但需要查询操作。

核心数据:面向对象的数据库。

领域:更快、更简单的数据库解决方案。

CoreData,Sqlite和Realm在店内存储纯文本 如果你不告诉它加密,你可以使用加密来保证它的安全。

  • 保存用户观看的历史记录 [海量数据,仅插入和删除操作]应该使用 Coredata & Realm。

  • 保存联系电话 [最多 1000 个号码,需要快速获取和连续操作]应该使用 Coredata & Realm。

  • 保存简单的 GET API 请求 [用于缓存]应使用 Codable、Coredata & Realm。响应可用于 脱机存储。

数据存储和缓存非常重要的主题。选择存储数据的方式可以依赖于整个应用程序设计。

缓存:

NSURLCache:配置所需大小的缓存的简单选项。适用于缓存不需要任何后处理的数据(JSON、图像请求)。

let URLCache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
NSURLCache.setSharedURLCache(URLCache)

文件缓存:如果您需要以某种方式发布处理数据(例如图像上的圆角,从 JSON 构建自己的数据结构),则可以选择文件缓存。图像可以保存为纯文件,对于数据对象,您可以使用NSCoding协议。

数据库对于完全工作的离线模式,最好使用数据库。

坚持:

NSUser默认值:小块数据。不安全,没有同步。

SQLite:内存高效且跨平台。通常不是最佳选择。当您想在应用程序中共享现有的跨平台数据库时很有用。

核心数据:当您需要复杂的查询和对象之间的复杂关系时,这是一个不错的选择。具有基本的迁移支持和可视化代码编辑器(带代码生成器)。除非您需要,否则它可能应该是默认选项:同步或跨平台。

YapDatabase:比CoreData更快。有iCloud同步。

Realm:有文章说它比 CoreData 和线程安全更快。有很多选择,其中一些是付费的(如同步)。可能是CoreData的一个很好的选择。

Firebase:云平台。具有离线模式,但已付费。

沙发基地:免费同步。无需迁移,因为非常灵活的架构。

结论是:

简单记录:UserDefaults,NSCoding本地数据存储,复杂记录:CoreData (Yap,Realm)同步:CouchDB,Yap(iCloud),
CoreData(iCloud-),Realm(付费),Firebase (Paid)速度:

Yap,Realm
Patform或基于云的:FirebaseParse
Cross-platform:Realm,CouchDB,MongoDB,Firebase

我个人的看法如下:

  • 核心数据:来自Apple,本机,可视化编辑器的良好支持,大多数用例的良好性能,但在我看来,API非常不舒服。

  • 领域:简单的 API,令人难以置信的速度,轻松的迁移。但就个人而言,线程问题让我很困扰。使用 Realm 处理线程既困难又烦人。其余的,对我来说似乎很棒。另一件事,它也为APP增加了一些大小,但这是值得的。

如果你问我个人,我喜欢 Realm,我也经常使用 Core Data,但最终还是坚持使用 Realm。

相关内容

  • 没有找到相关文章

最新更新