【问题标题】:Prevent duplicates when importing RSS feed to Core Data将 RSS 提要导入 Core Data 时防止重复
【发布时间】:2011-03-12 06:47:01
【问题描述】:

尝试将 RSS 提要导入 Core Data。导入它们后,当尝试再次更新提要时,我如何最有效地防止重复。现在它在解析过程中根据数据存储检查每个项目,这不是很有效。

我查看了来自 Apple 的热门歌曲样本。它对类别使用最近最少使用的缓存。但是当每个项目都不同时,缓存根本就没有帮助。

编辑: 澄清一下,我已经可以使用 guid 唯一地标识提要中的每个项目。问题在于每次将数百个项目与数据库进行比较时的性能,其中大多数是重复的。

【问题讨论】:

标签: iphone objective-c cocoa core-data ios


【解决方案1】:

当您导入新行时,您可以对现有行运行查询以查看它是否已经存在。为此,您针对您的实体创建一个NSFetchRequest,将谓词设置为查找 guid 属性并将返回的最大行数设置为 1。

我建议在导入过程中保留此NSFetchRequest,以便在导入过程中重复使用它。如果NSFetchRequest 返回一行,您可以更新该行。如果它没有返回一行,那么您可以插入一个新行。

如果操作正确,您会发现性能超出可接受范围。

【讨论】:

  • 谢谢。我会试试这个。顺便说一句,你的书很棒。
【解决方案2】:

你能修改你的核心数据模型吗?

如果可以的话,我会为每个提要条目添加一个“哈希”属性以唯一标识它。然后您可以有效地检测特定条目是否已在您的数据库中。

【讨论】:

  • 不确定你的意思。我仍然需要检查数据库中的哈希。检查哈希和检查项目 guid 有什么区别,这就是我现在正在做的事情。我已经可以用 guid 唯一地识别每个项目。问题是比较核心数据中的项目所花费的时间。
  • 我不知道你已经有一个 guid。如果性能是真正的问题,那么您可能应该直接使用 SQLlite。您能解释一下为什么选择核心数据吗?
  • Core Data 总是比使用原始 sqlite 更好的答案。快速搜索 SO 将显示有关该主题的许多讨论。 sqlite比原始 sqlite 性能更好。
  • 那么来自 newsgator Technology 的 Brent Simmons 是不是错了? On switching away from Core Data
  • 是的,他在 99.999% 的情况下都错了,正如他在自己的博客中所说的那样。它仍然在我的TODO 列表中,看看是否有其他 0.001% 的解决方案,因为我怀疑有解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2012-08-30
相关资源
最近更新 更多