尝试将RSS Feed导入Core Data。导入后,尝试再次更新Feed时,如何最有效地防止重复。现在,它在解析期间针对数据存储区检查每个项目,这不是非常有效。
我查看了Apple的热门歌曲样本。它使用最近最少使用的缓存来进行分类。但是当每个项目都不同时,缓存根本没有帮助。
编辑: 为了澄清,我已经可以使用guid在feed中唯一地标识每个项目。问题是每次将数百个项目与数据库进行比较时的性能,当大多数项目都是重复项时。
答案 0 :(得分:12)
导入新行时,可以对现有行运行查询,以查看它是否已就位。为此,您需要针对您的实体创建NSFetchRequest
,设置谓词以查找guid属性并将返回的最大行设置为1.
我建议您在导入期间保留此NSFetchRequest
,以便在进行导入时可以重复使用它。如果NSFetchRequest
返回一行,您可以更新该行。如果它没有返回一行,那么你可以插入一个新行。
如果操作正确,您会发现性能超出了可接受范围。
答案 1 :(得分:1)
您可以修改核心数据模型吗?
如果可以,我可以在每个Feed条目中添加“Hash”属性以唯一标识它。然后,您可以有效地检测数据库中是否存在特定条目。