(注意如果这是很多文本,底部有一个TLDR)
我正致力于从服务器中提取和显示图像和视频。基本上可以想到不同的文件夹,背后有可以查看的图片和视频。
每个文件夹都可以相当一致地更新新图片和视频,因此我希望能够一次存储尽可能多的图片和视频,以便通过预加载和节省一些来最小化加载/请求数据库时间。
让我先说这一切,说我在这一行之后写的任何事情都完全错了。这就是我要问的原因。我不是100%清楚每种方法的能力
我将尽力在这里尽可能有条理:
REQS /用法:
我对核心数据的理性:
优点:
CONS:
缓存的理性:
优点:
CONS:
我是否应该使用缓存或核心数据来保存将要经常从服务器更新的大文件?要考虑的因素是效率(最小化服务器请求;存储数据直到被新数据覆盖),速度(写入/加载),数量数据存储/可用内存(内存涉及使用缓存移动大量数据,是否会影响性能..在我开始看到不良性能之前,我可以在内存中有多少文件?),可定制性(在我看来,我需要两者之间的东西,所以更容易适应我的用途)
并且重要的是....还有其他我完全错过的东西吗?像某种文件系统管理器或独特的缓存ma-jiggy?)
答案 0 :(得分:1)
如果你所做的只是缓存文件,那么对CoreData的需求就不多了,因为文件系统本身就是一个非常快速的文件密钥/值存储。
如果您想为文件提供大量关联数据,可以在文件上设置扩展属性(尽管您无法在搜索中有效地使用这些属性)。
如果您仍想使用CoreData,您当然可以这样做。你有几个选择。最常见的两个选项是:
将文件的URL存储为CoreData实体中的属性,并自行管理将文件直接存储到磁盘。
将数据存储为CoreData属性,然后选择"允许外部存储"属性的选项。这将导致CoreData进行自己的计算,如果数据足够小"它将存储在数据库中。如果它太大"然后它将被存储为外部文件。
Apple没有记录截止值,但实验表明它是1MB。
使用选项2会更容易,因为Core Data会为您管理所有内容。这是一个非常可行的选项,我在一个非常大的应用程序中使用它,它存储了一堆非常大的文件(没有一个足够小,可以选择存放在数据库中)。
迁移速度存在问题,因为Core Data希望迁移整个商店。因此,您需要在决定之前考虑这一点。
你可能想要构建一个测试应用程序,添加一堆东西,并在决定之前经历各种场景,但这些是你可以使用的两个最常见的选项。