当前位置 : 主页 > 手机开发 > cordova >

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

来源:互联网 收集:自由互联 发布时间:2021-06-10
我有一个相对复杂的sqlcipher数据库(27个表)但几乎没有条目(每个表50-200个条目之间). 当我运行SELECT语句(与相应的视图相同)时,连接3个表,执行几个“LIKE”(使用EXPLAIN优化),桌面客户端CPU
我有一个相对复杂的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

网友评论