我们将 SqlCiper sqlite 数据库集成到我们的 Android 项目中。我们发现未加密的 SqlCiper sqlite db 和加密的 SqlCiper sqlite db 的数据库查询性能存在很大差异。
我们只是在同一台 Android 设备上对我们的代码进行了一些基本的计时记录:
- 未加密的 SqlCiper 数据库:100 数据库查询,总时间:1-2 秒
- 加密的 SqlCiper 数据库:100 数据库查询,总时间:17 秒。
如您所见,在 SqlCiper 数据库中启用加密后,运行时间会大大增加。
基于这篇文章:SqlCiper Performance and SqlCiperSpeed ,我们不会在 iOS 上看到如此大的增长,但我在 Android 上没有看到任何性能数据。
你们看到的问题和我们看到的一样吗?有什么改进建议吗?
最佳答案
首先,确保您有值得担心的问题。单独使用 170 毫秒而不是 10 毫秒的查询不太可能对用户产生重大影响。在任何一种情况下,您都需要使用后台线程,因为即使 10 毫秒也足以让您丢掉一两帧,具体取决于其他情况。因此,如果您正在执行此查询以响应某些离散的用户请求(例如,点击操作项),用户不太可能注意到差异。仅当您在短时间内执行大量此类查询时,您才可能遇到可能会给用户带来问题的速度问题。
其次,请确保您已使用类似 the EXPLAIN
keyword 之类的方式总体上调整了数据库访问。 . Android 的 SQLCipher 使糟糕的数据库 I/O 变得更糟,例如导致表扫描的查询(例如,由于没有正确的索引)。
第三,使用 Traceview 准确确定您的时间花在了哪里。
关于Android SqlCipher 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19730918/