【问题标题】:Is there any way to be notified when sqlite tables update?sqlite表更新时有什么方法可以通知吗?
【发布时间】:2016-05-16 10:52:41
【问题描述】:

FMDB 的帮助下,我正在开发一个使用 sqlite 数据库的 iOS 应用程序。我曾经使用Core Data,但一次插入 5000 个项目非常慢。 FMDB 与事务使此类插入更快!

我还需要一些机制来在 sqlite 表中的某些项目更新时通知我的视图控制器。 NSFetchedResultsController 是我的解决方案,但由于我使用了FMDB,我不能再使用NSFetchedResultsController

sqlite表更新时有什么方法可以通知吗?

【问题讨论】:

  • 你的应用真的把大部分时间都花在了插入上吗?
  • 我正在测试 2500 项删除 + 插入。需要 10-12 秒。 FMDB 在 0.5-0.7 秒内完成删除 + 插入。一些用户拥有多达 5000-6000 个项目。
  • 是的,但他们多久会插入和删除整个集合?如果他们导入 ONCE,然后随着时间的推移逐步更新/扫描,那么您就放弃了一次性操作的大量功能。如果他们的主要操作是导入和删除那么多数据,那可能是合理的。
  • 另外,您是否使用仪器找出原因并更改批处理以查看它如何影响性能?
  • 你必须自己动手。这就是 Core Data 为您所做的一部分。

标签: objective-c sqlite core-data nsfetchedresultscontroller fmdb


【解决方案1】:

我给你的建议是回到 Core Data。您应该解决插入性能问题,而不是下降到数据库级别,并且必须重新访问数据模型设置的各种更复杂的机制。你的具体问题就是一个例子。

要优化插入速度,请参阅众多有用的 SOF 答案。正如已经指出的那样,为您的数据类型找到正确的批量大小是关键。

不过,无论您如何优化,您都可以利用 Core Data 框架在后台执行这些密集操作。这不会影响您的应用程序的可用性,可能甚至比您使用 FMDB 插入的 0.7 秒还要短。

【讨论】:

  • 感谢您的建议。我改变了主意,放弃了 FMDB 的使用。但我决定尝试一下 YapDatabase。
【解决方案2】:

我已经搜索了一段时间并找到了解决方案。我想知道为什么我没有早点找到它。

我现在的选择是YapDatabase。我不知道它的弱点,但这个库有很多很棒的东西:

  • 定期更新。有超过 1000 次提交!哇!
  • 这是一个键/值存储。我只是在保存我的 NSDictionaries。不再有数据模型和令人头疼的问题。
  • 性能很棒。我比较了 Core Data 的删除 + 插入速度。
  • 最棒的是“Views”:

视图允许您对数据进行排序、分组和过滤。非常适合 表视图、集合视图等。他们甚至提供 NSFetchedResultsController 样式更新,使动画更容易 更改您的 tableViews/collectionViews。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多