【问题标题】:FMDB + SQLCipher Performance issueFMDB + SQLCipher 性能问题
【发布时间】:2016-11-09 17:34:02
【问题描述】:

我们正在使用 FMDB SQLCipher 包装器来处理 sqlite DB 的加密。我们有一个FMDataBaseQueue 来处理来自多个线程的读写。自从我们引入 SQLCipher 以来,应用程序的性能就受到了打击。在每笔交易中,我们都会设置密钥。

self.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback){
  [db setKey:"dummykey"];
  //Do Some DataBase Updates or Queries

}

因此,我们必须抽象出所有方法,因为它已被多个控制器使用。我们如何解决这个问题?有时我们必须执行这个主队列(大多数时候我们在全局队列中执行),因为我们等待一些处理完成。 由于我觉得加密数据库是一项昂贵的操作,我该如何提高 sqlite 语句的执行性能。 DBConnection 在应用程序的整个生命周期中打开。每次我想与数据库交互时都应该使用[db setKey:"dummykey"];吗?

【问题讨论】:

    标签: ios objective-c sqlite fmdb sqlcipher


    【解决方案1】:

    请查看 SQLCipher performance guidance 并与您的应用程序使用情况进行比较。

    【讨论】:

    • 文档说“不要重复打开和关闭连接,因为密钥派生是非常昂贵的,通过设计。频繁打开/关闭数据库连接(例如,对于每个查询)是一个非常常见的原因性能问题”。我们有一个具有单个 FMDBDataBaseQueue 实例的单例类,并且在其初始化期间打开连接。这是否意味着我应该只设置一次密钥,而不是在每个数据库交互中重复?
    • 打开数据库连接时只需要提供一次密钥。
    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多