如何决定使用什么[Sqlite,领域,CoreData,用户默认,JSON文件]来存储数据iOS?

vlju58qv  于 2023-01-03  发布在  iOS
关注(0)|答案(4)|浏览(115)

在到处搜索之后,我发现SQLite、Realm、CoreData、UserDefaults和JSON文件之间没有更好的比较。
你可以很容易地找到优点和缺点,但很难知道该用什么。
我知道决定完全取决于要求,但仍然必须有一个方法来作出决定。
假设以下情况,哪些选项对个人最好,为什么?
1.保存用户关注的历史记录[数据量巨大,仅插入和删除操作]
1.保存联系人号码[最多1000个号码,需要快速获取,并持续运行]
1.保存简单GET API请求[用于缓存]
注意:我在这里不是说存储敏感信息。
请随时添加/更新更多相关案例。

wrrgggsh

wrrgggsh1#

数据存储实现的大部分只是SQLite Package 器,最常见的iOS实现是SQLite、ORM、CoreData、Realm、Keychain。
实现的另一部分只是一个简单的文本。例如,UserDefaults只是一个XML文件,您可以使用简单的iOS API对其进行编辑。但是,当您处理超过几十个元素时,SQLite Package 器在性能方面更有用。
那么,SQLite Package 器呢?
1.您可以使用Keychain,但它有几个缺点:这不是一个线程安全的,你只能在应用程序允许的时刻获取数据,有时它会返回不正确的结果。这对密码有用,仅此而已。

  1. CoreData有原生的API,但它有内存泄漏的缺点,API复杂,这不是线程安全的数据库,性能不好。
  2. SQLite。首先,您可以使用具有11KB依赖性的本机C库。缺点:旧式C API,原始SQL查询。
  3. SQLite Swift wrapper。在这种情况下,您必须使用第三方库。但性能良好。
  4. Realm。这确实是很好的表现和易于使用。但它有一个缺点线程安全。ORM和领域之间的区别是,领域中的对象并不存储为一个明显的表,它有自己的魔术如何转换数据到表的表示。
  5. Firebase database。我没有在生产中使用这个库。它的主要特性是在线实现。我不确定使用主要内部数据库是否正确。
    总结怎么样?
    在我们的测试中,SQLite(Wrapper,纯C)和Realm的性能几乎相同,CoreData还不够好。
    SQLite Package 器和Realm有足够好的API。
    唯一的SQLite Package 器是真正线程安全的。
6pp0gazn

6pp0gazn2#

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

**用户默认值:**Quicky保留少量数据。
**可编码(NSCoder):**用于保存自定义对象。
**钥匙串:**保护少量数据。
**SQLite:**持久化大数据,但需要查询操作。
**核心数据:**面向对象数据库。
**领域:**更快、更简单的数据库解决方案。
CoreData、Sqlite和Realm在存储中存储纯文本如果您不告诉它加密,您可以使用加密来确保安全。
***保存用户关注的历史记录[数据量巨大,仅插入和删除操作]**应使用Coredata & Realm。
***保存联系人号码[最多1000个号码,需要快速提取和连续操作]**应使用Coredata & Realm。
***保存简单GET API请求[用于缓存]**应使用可编码、核心数据和领域。响应可用于脱机存储。

tnkciper

tnkciper3#

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

缓存:

    • NSURLCache:**简单的选项来配置所需大小的缓存。适用于缓存不需要任何后期处理的数据(JSON,图像请求)。
let URLCache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
NSURLCache.setSharedURLCache(URLCache)
    • 文件缓存:**如果您需要以某种方式对数据进行后期处理(如图像上的圆角,从JSON构建自己的数据结构),可以选择文件缓存。图像可以保存为普通文件,对于数据对象,可以使用NSCoding协议。
    • 数据库:**对于完全脱机工作模式,最好使用数据库。

持久性:

    • NSUserDefaults:**小数据块。不安全,不同步。
    • SQLite:**内存效率和跨平台。通常不是最好的选择。当你想在应用程序中共享现有的跨平台数据库时很有用。
    • 核心数据:**当你需要复杂的查询和对象之间的复杂关系时,这是一个很好的选择。有基本的迁移支持和可视化代码编辑器(带有代码生成器)。除非你需要,否则它可能是默认选项:同步或跨平台。
    • YapDatabase:**比CoreData快。使用iCloud同步。
    • Realm:**有些文章说它比CoreData更快,线程安全。有很多选项,其中一些是付费的(如同步)。可能是CoreData的一个很好的替代品。
    • Firebase:**云平台,有离线模式,但付费。
    • CouchBase:**免费同步。由于模式非常灵活,因此无需迁移。

总结如下:

简单记录:* * 用户默认值**,NSCoding
本地数据存储,复杂记录:* * 核心数据**(雅浦领域
同步:* * CouchDB**、Yap(iCloud)、核心数据(iCloud-)、领域(付费)、Firebase(付费)
速度:狂吠领域
平台或基于云:* * 防火墙**、解析
跨平台:* * 领域**、沙发数据库蒙古数据库防火墙

7vhp5slm

7vhp5slm4#

我个人的看法如下:

*核心数据:来自苹果的良好支持,原生,可视化编辑器,对于大多数用例都有良好的性能,但在我看来有一个相当不舒服的API。
*Realm:简单的API,令人难以置信的速度,轻松的迁移。但是就我个人而言,线程的问题让我很困扰。使用Realm处理线程很困难,也很烦人。对于其他方面,我觉得很棒。另外,它也增加了应用程序的大小,但这是值得的。

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

相关问题