3

我们将 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 和 SqlCuperSpeed,我们不会在 iOS 上看到如此大的增长,但我在 Android 上没有看到任何性能数字。

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

4

2 回答 2

2

你可以顺便优化一下:

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

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

于 2014-09-22T09:14:49.743 回答
2

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

其次,确保您已经调整了您的数据库访问,使用诸如关键字之类EXPLAIN东西。SQLCipher for Android 使糟糕的数据库 I/O 变得更糟,例如导致表扫描的查询(例如,由于没有正确的索引)。

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

于 2013-11-01T16:31:22.047 回答