我们将sqlciper sqlite数据库集成到我们的android项目中。结果发现,未加密的sqlciper-sqlite数据库与加密的sqlciper-sqlite数据库在数据库查询性能上存在较大差异。
我们刚刚在同一个Android设备上对代码进行了一些基本的计时记录:
未加密的sqlciper db:100 db查询,总时间:1-2秒
加密的sqlciper db:100 db查询,总时间:17秒。
如您所见,在sqlciper数据库中启用加密时,运行时间有了很大的增加。
基于这篇文章:SqlCiper Performance and SqlCiperSpeed,我们不会在ios上看到如此大的增长,但是我在android上没有看到任何性能数据。
你们看到的问题和我们看到的一样吗?有什么改进的建议吗?
最佳答案
首先,确保你有一个值得担心的问题。一个需要170毫秒而不是10毫秒的查询,单独来说,对用户来说不太可能是一个实质性的区别。在这两种情况下,你都需要使用一个后台线程,因为即使是10毫秒也足以使你丢下一两帧,这取决于发生了什么。因此,如果您是响应某个离散的用户请求(例如,点击一个操作项)执行此查询,则用户不太可能注意到差异。只有在短时间内执行大量这些查询时,才可能出现速度问题,这可能会给用户带来问题。
其次,确保您已经使用the EXPLAIN
keyword之类的工具对数据库访问进行了总体优化。sqlcipher for android使糟糕的数据库i/o变得更糟,例如导致表扫描的查询(例如,由于没有正确的索引)。
第三,使用traceview精确地确定你的时间花在哪里。