微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用cordova和Cordova-SQLitePlugin实现android – sqlcipher’open’性能

我有一个相对复杂的sqlcipher数据库(27个表)但几乎没有条目(每个表50-200个条目之间).
当我运行SELECT语句(与相应的视图相同)时,连接3个表,执行几个“LIKE”(使用EXPLAIN优化),桌面客户端cpu(带有sqlcipher)需要3毫秒进行查询.

然而,使用Cordova-sqlitePlugin的Android上的相同查询花费了近1900ms – 由于打开数据库的成本约为1800毫秒,这显然在每次页面加载后重复.

查询的发布方式如下:

var db = window.sqlitePlugin.openDatabase({name: "myDatabase",key: "mySecret",bgType: 1});
    db.transaction(function(transaction) {
        transaction.executesql(query,[],function(transaction,result) {
        callback(result);
    },null);
    },null,null);

有什么我能做的吗?
提前感谢任何提示和线索……

干杯克里斯

解决方法

sqlCipher打开数据库性能故意很慢. sqlCipher使用密钥PBKDF2来执行密钥派生(即数千个SHA1操作)以防止暴力破解和字典攻击.有关更多信息,请参阅 http://sqlcipher.net/design.

最好的选择是缓存数据库连接,以便可以多次使用它,而无需在每个屏幕上打开和键入数据库.如果可以,在启动期间打开数据库一次是首选的操作过程.对同一数据库句柄的后续访问不会触发密钥派生,因此性能将非常快.

如果这不可能,则另一个选项是禁用或削弱密钥派生.这将导致sqlCipher在导出密钥时使用更少轮的PBKDF2.虽然这会使数据库打开得更快,但从安全角度来看,它显着变弱.因此通常不建议这样做.也就是说,这里有关于如何减少KDF迭代的信息:

http://sqlcipher.net/sqlcipher-api/#kdf_iter

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐