繁体   English   中英

具有内存存储的核心数据

[英]Core Data with in-memory store

我想将Core Data用作数据库服务器上较大数据集的缓存。 并非所有数据都在内存中。

在考虑这个问题时,我想到了两个问题:

  1. 故障(例如1-n关系)可以与内存中的持久存储一起使用,如果是这样,你如何捕获故障?

  2. 核心数据管理对象上下文具有过期间隔。 这也适用于内存商店​​吗?

或者我应该为此目的使用NSAtomicStore?

您的第一个问题表明您误解了NSInMemoryStore类型持久性存储的意图。 它们是Core Data堆栈的持久存储部分。 当您将实例引入托管对象上下文时,会发生错误; 创建一个错误,该错误在触发时从NSPersistentStoreCoordinator的缓存或底层持久存储中触发并填充自身。 内存存储不会改变故障关系。 显然,它不会真正帮助您的问题,但是因为你必须将所有数据保存到内存中。 内存存储非常适合于(1)测试(它们很快)和(2)临时核心数据堆栈,您希望在其中使用Core Data的对象图管理而无需将任何内容持久保存到磁盘。

在回答第二个问题时,答案是肯定的。 过时间隔适用于上下文,而不适用于持久性存储。

那么,Core Data是否适合从远程数据库服务器缓存数据? 并不是的。 尽管Bill Bumgarner(一位Apple工程师)暗示这是可能的,但我发现在我自己的代码中将缓存与Core Data对象图管理分开会更容易。 使用Core Data来管理对象图并轻松绑定到Controller / UI层仍然非常好。 所以我的策略是从数据库服务器提取数据并将其缓存在我自己的数据结构中(OS X 10.6中的libcache和NSCache可能是一个非常好的起点)。 然后在对象图中决定您想要的内容并将其迁移到Core Data堆栈(由内存持久性存储库支持)。 您必须自己处理来自数据库服务器的更改通知或轮询。 当数据库中的数据发生更改(或用户查询更改等)时,我只是告诉所有编辑器完成编辑,然后擦除上下文并从(可能)更新的缓存中重建它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM