【问题标题】:Android SqlCipher Performance issueAndroid SqlCipher 性能问题
【发布时间】:2013-11-01 16:22:09
【问题描述】:

我们将 SqlCiper sqlite db 集成到我们的 Android 项目中。我们发现未加密的 SqlCiper sqlite db 和加密的 SqlCiper sqlite db 的数据库查询性能存在很大差异。

我们只是在同一台 Android 设备上对我们的代码进行了一些基本的计时记录:

  • 未加密的 SqlCiper db:100 db 查询,总时间:1-2 秒
  • 加密的 SqlCiper db:100 db 查询,总时间:17 秒。

如您所见,在 SqlCiper 数据库中打开加密时,运行时间会大大增加。

根据这篇帖子:SqlCiper Performance and SqlCiperSpeed,我们不会在 iOS 上看到如此大的增长,但我在 Android 上没有看到任何性能数据。

你们看到的问题和我们看到的一样吗?有什么改进的建议吗?

【问题讨论】:

    标签: android sqlite encryption sqlcipher


    【解决方案1】:

    首先,确保您有一个值得担心的问题。一个耗时 170 毫秒而不是 10 毫秒的查询不太可能对用户产生重大影响,单独来看。无论哪种情况,您都需要使用后台线程,因为即使是 10 毫秒也足以让您丢掉一两帧,这取决于其他情况。因此,如果您正在执行此查询以响应某些离散的用户请求(例如,点击操作项),则用户不太可能注意到差异。只有在短时间内执行大量此类查询时,您才可能遇到可能给用户带来问题的速度问题。

    其次,确保您已使用the EXPLAIN keyword 之类的方式调整了您的数据库访问权限。 SQLCipher for Android 使糟糕的数据库 I/O 变得更糟,例如导致表扫描的查询(例如,由于没有正确的索引)。

    第三,使用 Traceview 准确确定您的时间都花在了哪里。

    【讨论】:

      【解决方案2】:

      你可以顺便优化一下:

      1.在SQLCipher lib中,使用AES算法加密数据。 --> 您可以更改 AES --> RC4。性能提高了 10-15%。 (你可以在使用前比较AES和RC4)

      2.重要的是你应该优化数据SQLite(创建索引,sql查询,...); http://www.sqlite.org/optoverview.html

      【讨论】:

      • 谢谢,很遗憾,由于符合 FIPS 140-2,我们无法更改为 RC4,因此我们必须使用 RC4。
      猜你喜欢
      • 2016-11-09
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      相关资源
      最近更新 更多