如果我不需要持久存储,那么以类似数据库的方式存储数据的最佳做法是啥? NSMutableArray?

Posted

技术标签:

【中文标题】如果我不需要持久存储,那么以类似数据库的方式存储数据的最佳做法是啥? NSMutableArray?【英文标题】:If I don't need persistent storage, what's the best practice for storing data in a database-like fashion? NSMutableArray?如果我不需要持久存储,那么以类似数据库的方式存储数据的最佳做法是什么? NSMutableArray? 【发布时间】:2014-04-03 15:16:23 【问题描述】:

我通常在我的应用程序中使用 Core Data,但对于我当前的项目,我不需要数据来持久启动启动。

因此,我想知道应该如何存储我的数据。它不会是数以万计的项目或任何东西,最有可能是数百个高端项目。

我仍然要创建一个NSObject 子类来表示数据库中的每个“条目”,但是我应该将它存储在什么中?一个简单的NSMutableArray 那是一个属性?我应该有一个独特的模型类吗?我还应该以某种方式使用 Core Data 吗?

对于这种情况,可接受的/最佳实践是什么?

【问题讨论】:

取决于您需要如何访问它。如果你需要随机搜索,你必须弄清楚你要使用的方案。使用 CoreData 或 SQLite 可能比管理自己的方案更简单。 【参考方案1】:

持久性方面只是核心数据的一部分。获取请求、对象图维护和实体建模器可以说同样重要。

如果您不想保留数据,请在创建核心数据堆栈时使用内存存储类型。

【讨论】:

啊,很公平!如果我正在创建像帖子列表这样简单的东西,在概念上类似于我不想保留的 RSS 提要,那么使用 Core Data 有很多优势吗?我想通过 fetch 请求进行搜索和诸如此类的事情将是主要的。 你知道任何概述核心数据在内存存储中的使用的教程吗?我遇到任何困难。 @DougSmith 所有关于核心数据的教程也适用于内存存储选项。你做的一切都是一样的,只是没有任何东西击中磁盘。不需要关于该商店类型的特定教程。 @MarcusS.Zarra 那么我该如何指定该选项呢? 添加持久性存储 (addPersistentStoreWithType:...) 时,指定内存存储类型而不是 SQLLite 存储类型,并且不需要 URL。这是唯一的区别。【参考方案2】:

我会说,如果您熟悉 Core Data,为什么不使用它?

当然,您也可以坚持使用 NSUserDefault。 Atm 我正在使用 NSCache 类。

Good explanation of NSCache and how to use it

Apple's Doc

如果您不喜欢在当前项目中使用 CD,我会试一试。

【讨论】:

NSCache 是个糟糕的主意。可以随时从缓存中删除内容,超出您的控制范围。 因为 Core Data 是一个持久存储模型,我根本不需要?这也是多线程的一大难题,如果我可以避免,为什么不呢?如果我不需要持久存储,为什么还要使用 NSUSerDefaults?这正是它的目的。 NSCache 会随机删除项目,因为它是一种缓存机制。你读过我的问题吗? 是的,我读了你的问题,但你要求的东西没有太多的可能性.. @DougSmith 核心数据是可以保存到磁盘的对象层次结构。持久化实际上并不是它的主要功能。作为您的对象模型是它的主要功能。就数据库结构而言,它将为您提供所需/想要的一切。在多线程环境中,一切都很复杂,只是一些 API 对此保持沉默,并悄悄地破坏您的数据或崩溃 :) Core Data 只是碰巧没有对此保持沉默。 @SaifDeen 这正是我的观点。如果 OP 想要 NSMutableArray 或 NSMutableDictionary 之类的东西,那么就使用它们。但是你问了一个广泛的问题来征求其他人的意见,然后对他们给出的意见变得粗鲁。事实是,NSUserDefaults 很棒,因为如果您不想要“持久性”部分,那么只需在完成后删除数据,这实际上就是 1 行代码。【参考方案3】:

由于您不担心持久性,因此在 NSMutableArray (或 NSMutableDictionary 如果索引比排序更重要)周围使用包装器似乎最简单,因为您可以将 NSPredicates 应用于数组,您仍然有能力这样做非常动态的数据库样式排序和搜索,没有核心数据的一些缺点。

使用包装器而不是仅使用数组,因为这样可以方便地放置排序和搜索选项,并可能让您更好地访问 KVO 操作。

【讨论】:

以上是关于如果我不需要持久存储,那么以类似数据库的方式存储数据的最佳做法是啥? NSMutableArray?的主要内容,如果未能解决你的问题,请参考以下文章

redis的数据持久化存储

Kubernetes 数据持久化之Configmap

Redis 5.0持久性存储配置

如何用Redis缓存改善数据库查询性能?

sqlite还是文件存储?

创建一个核心日期实体实例但不希望它被存储(非持久性)